- 5,149
- 49
- 899
ПосмотримПредлагаю переименовать мод в RealLagodrom Craft.
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
ПосмотримПредлагаю переименовать мод в RealLagodrom Craft.
if(!mc.isGamePaused()) {
playerpos = mc.player.getPosition();
block = mc.world.getBlockState(playerpos).getBlock();
int x = playerpos.getX();
int y = playerpos.getY();
int z = playerpos.getZ();
BlockPos pos = new BlockPos(x,y,z);
if(playerpos == null || !playerpos.equals(pos.down())) {
final int r = 70;
final int rr = r * r;
for (int i = pos.getX() - r, is = i + 2 * r + 1; i < is; i++) {
for (int j = pos.getY() - r, js = j + 2 * r + 1; j < js; j++) {
for (int k = pos.getZ() - r, ks = k + 2 * r + 1; k < ks; k++) {
final int xx = pos.getX() - i;
final int yy = pos.getY() - j;
final int zz = pos.getZ() - k;
if (xx * xx + yy * yy + zz * zz <= rr) {
if(mc.world.getBlockState(new BlockPos(i,j,k)) == Blocks.COBBLESTONE.getDefaultState()) {
drawBlockTexture(mc.player, mc.getRenderPartialTicks(), i, j, k, mc.world, "realism:textatlas/mold");
}
}
}
}
}
Я же тебе сказал, как оптимизировать код раз в 20...70. При 70 блоках сфера начала люто лагать(9-10 фпс)![]()
Когда? Где?Я же тебе сказал, как оптимизировать код раз в 20...
ДаА в первом слоте у тебя календарь?
Не понял. Сделать срабатывание эвента по тикам?Ну попробуй в тик по сто раз не выключать гл'овские штуки. Включи, потом везде забинди текстурки, потом выключи... Думаю, это сработает.
О, прямо как в Ку1#Development
Тестировал новое покачивание камеры. Отключается обычной кнопкой в настройках. На данный момент болтает не так сильно, как на видео, и угол крена камеры задается в конфиге.
Ниче не поменялось, если что... Также фпс проседает Может неправильно что то сделал?Нет. просто в начале эвента открой все "матрицы", все функции, потом забинди все текстуры, потом все закрой.
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void eventClick(RenderWorldLastEvent event) {
World world = Minecraft.getMinecraft().world;
if(!mc.isGamePaused()) {
GlStateManager.enableBlend();
GlStateManager.color(1.0F, 1.0F, 1.0F, 0.5F);
GlStateManager.doPolygonOffset(-3.0F, -3.0F);
GlStateManager.enablePolygonOffset();
GlStateManager.alphaFunc(516, 0.1F);
GlStateManager.enableAlpha();
GlStateManager.pushMatrix();
playerpos = mc.player.getPosition();
block = mc.world.getBlockState(playerpos).getBlock();
int x = playerpos.getX();
int y = playerpos.getY();
int z = playerpos.getZ();
BlockPos pos = new BlockPos(x,y,z);
if(playerpos == null || !playerpos.equals(pos.down())) {
final int r = 50;
final int rr = r * r;
for (int i = pos.getX() - r, is = i + 2 * r + 1; i < is; i++) {
for (int j = pos.getY() - r, js = j + 2 * r + 1; j < js; j++) {
for (int k = pos.getZ() - r, ks = k + 2 * r + 1; k < ks; k++) {
final int xx = pos.getX() - i;
final int yy = pos.getY() - j;
final int zz = pos.getZ() - k;
if (xx * xx + yy * yy + zz * zz <= rr) {
if(mc.world.getBlockState(new BlockPos(i,j,k)) == Blocks.COBBLESTONE.getDefaultState()) {
drawBlockTexture(mc.player, mc.getRenderPartialTicks(), i, j, k, mc.world, "realism:textatlas/mold");
}
}
}
}
}
}
else {
block = mc.world.getBlockState(playerpos).getBlock();
// Block block = mc.world.getBlockState(RayTraceResultUtil.getRayTraceToBlock(mc.player, 1, 5, true).getBlockPos()).getBlock();
drawBlockTexture(mc.player, 0.5f, pos.getX() - 6, pos.getY()-6 , pos.getZ()- 6, mc.world, "realism:textatlas/mold");
}
GlStateManager.disableAlpha();
GlStateManager.doPolygonOffset(0.0F, 0.0F);
GlStateManager.disablePolygonOffset();
GlStateManager.enableAlpha();
GlStateManager.depthMask(true);
GlStateManager.popMatrix();
}
}
public static void drawBlockTexture(Entity entityIn, float partialTicks, int x,int y,int z, World world, String texture) {
double d3 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double) partialTicks;
double d4 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double) partialTicks;
double d5 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double) partialTicks;
Tessellator tessellatorIn = Tessellator.getInstance();
BufferBuilder bufferBuilderIn = tessellatorIn.getBuffer();
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
bufferBuilderIn.begin(7, DefaultVertexFormats.BLOCK);
bufferBuilderIn.setTranslation(-d3, -d4, -d5);
bufferBuilderIn.noColor();
IBlockState iblockstate = world.getBlockState(new BlockPos(x,y,z));
TextureMap texturemap = Minecraft.getMinecraft().getTextureMapBlocks();
BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
blockrendererdispatcher.renderBlockDamage(iblockstate, new BlockPos(x,y,z), texturemap.getAtlasSprite("realism:textatlas/mold"), world);
tessellatorIn.draw();
bufferBuilderIn.setTranslation(0.0D, 0.0D, 0.0D);
}
Так он и так, один раз в конце же, нет?Я, конечно, не уверен, но поробуй тесселятор.драв() прописать один раз в конце
так там тесселятор вовсю используется в методе. Если я оттуда все переношу, мне быстрее весь drawTexture перенести в эвентЯ имею ввиду вызывать tessellatorIn.draw(); в конце RenderWorldLastEvent
Так нельзя. Крашится.Ну так?-_- перенеси tessellatorIn.draw(); из drawTexture в конец RenderWorldLastEvent.
Все остальное для удобства оставь в drawTexture