Оптимизация кода.

Версия Minecraft
1.12.2
586
32
136
Привет всем, есть код, который заряжает предмет в сундуке, который сверху от генератора, код:
Java:
@SubscribeEvent(priority = EventPriority.HIGHEST)
    public void deGenerator(TickEvent.WorldTickEvent e){
        if(e.side.isClient())return;
        List<TileEntity> tileEntities = e.world.loadedTileEntityList;
        for(TileEntity tileEntity : tileEntities) {
            if (e.world.getBlockState(tileEntity.getPos().add(0, 1, 0)).getBlock() != Blocks.CHEST) return;
            if (!(tileEntity instanceof TileDEGenerator)) return;
            if (!(e.world.getTileEntity(tileEntity.getPos().add(0, 1, 0)) instanceof TileEntityChest)) return;
            TileEntityChest chest = (TileEntityChest) e.world.getTileEntity(tileEntity.getPos().add(0, 1, 0));
            TileDEGenerator generator = (TileDEGenerator) tileEntity;
            for (int i = 0; i < chest.getSizeInventory(); i++) {
                ItemStack stack = chest.getStackInSlot(i);
                if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("DE")) continue;
                if (stack.getTagCompound().getInteger("DE") >= 50000) {
                    stack.getTagCompound().setInteger("DE", 50000);
                    continue;
                }
                if (generator.getDE() <= 50) continue;
                stack.getTagCompound().setInteger("DE", stack.getTagCompound().getInteger("DE") + 50);
                generator.setDE(generator.getDE() - 50);
            }
        }
    }
Мой говно-код работает отлично. Но я задаюсь вопросом, как его лучше всего использовать, как оптимизировать код?
 
3,005
192
592
Запихни в тайл своего блока.
В его update.
И будут браться сразу только твои блоки.
От них и чекай..
 
586
32
136
Запихни в тайл своего блока.
В его update.
И будут браться сразу только твои блоки.
От них и чекай..
Запихни в тайл своего блока.
В его update.
И будут браться сразу только твои блоки.
От них и чекай..
Подробнее, пожалуйста.
 
3,005
192
592
7,099
324
1,510
if (!(tileEntity instanceof TileDEGenerator)) return;
Очень плохой стиль: ! можно не заметить Лучше убери их и return.

Сначала проверяй(а если сделаешь, как Doc советует - вообще не понадобится)
tileEntity instanceof TileDEGenerator
Потом
e.world.getTileEntity(tileEntity.getPos().add(0, 1, 0)) instanceof TileEntityChest

e.world.getBlockState(tileEntity.getPos().add(0, 1, 0)).getBlock() != Blocks.CHEST - бесполезно, т.к. если есть тайл, то блок подавно
 
2,505
81
397
Очень плохой стиль: ! можно не заметить Лучше убери их и return.
От части.
Есть вот эти однострочники if (!(tileEntity instanceof TileDEGenerator)) return; заменить на
Java:
if (!(tileEntity instanceof TileDEGenerator))
    return;
или
Java:
if (!(tileEntity instanceof TileDEGenerator)) {
    return;
}
то наоборот лучше. Многоуровневый код тяжеле читать, чем линейный.

И вообще там не return нужно, а continue.
 
3,005
192
592
И вообще там не return нужно, а continue.
Кстати, да.
Если там будет сначала поставлен любой блок с тайлом, а над ним не будет сундука - то и "свой" блок даже не будет проверен..
 
586
32
136
Java:
 @Override
    public void update() {
        if (!(world.getTileEntity(this.getPos().add(0, 1, 0)) instanceof TileEntityChest)) return;
        TileEntityChest chest = (TileEntityChest) world.getTileEntity(this.getPos().add(0, 1, 0));
        TileDEGenerator generator = this;
        for (int i = 0; i < chest.getSizeInventory(); i++) {
            ItemStack stack = chest.getStackInSlot(i);
            if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("DE")) continue;
            if (stack.getTagCompound().getInteger("DE") >= 50000) {
                stack.getTagCompound().setInteger("DE", 50000);
                continue;
            }
            if (generator.getDE() <= 50) continue;
            stack.getTagCompound().setInteger("DE", stack.getTagCompound().getInteger("DE") + 50);
            generator.setDE(generator.getDE() - 50);
        }
    }
Сделал так в тайле.
 
3,005
192
592
if (generator.getDE() <= 50) continue;
Вынеси перед проверкой сундука.
Поставь просто < 50.
Добавь проверку на то, что stack != EMPTY.
В место >= 50000 - используй > 50000.
 
Сверху