Добавление кода, например, как вы можете сделать с новым ClassName () {}? - PullRequest
0 голосов
/ 06 августа 2020

Извините, если заголовок сформулирован неправильно, я изо всех сил пытался придумать слова, чтобы объяснить это простым заголовком. Да, это вещь Minecraft, но из-за того, что это старая версия и код уже работает индивидуально, и это в основном вещь Java, я думаю, уместно сказать это здесь. Итак, я хочу подключиться ко всем экземплярам BlockFence и заменить их своим собственным классом, который может подключаться к другим ограждениям. Эта часть достаточно проста. Однако этот класс должен быть экземпляром класса, который я заменяю, и почти каждый мод создает дочерний класс для типа блока, который они добавляют. Поэтому я решил перебрать все ограждения и попытаться добавить в свой код:

            Iterator<Block> iterator = Block.blockRegistry.iterator();
        while(iterator.hasNext()) {
            Block block = iterator.next();
            if(block instanceof BlockFence) {
                String name = Block.blockRegistry.getNameForObject(block);
                GameRegistry.addSubstitutionAlias(name, GameRegistry.Type.BLOCK, block);
                GameRegistry.addSubstitutionAlias(name, GameRegistry.Type.ITEM, new ItemBlock(block));
            }
        }

Если вы не играете в Minecraft, вы можете заменить блоки и элементы в реестре игры своей собственной версией, и то, что я пытаюсь сделать, замените идентичным экземпляром своего класса. Я застрял здесь. Для ванильных заборов это не проблема, поскольку у меня уже есть доступ к классу. Вот пример работающего кода замены Nether Brick Fence:

            Block block = new BlockFence("nether_brick", Material.rock) {
            public boolean canConnectFenceTo(IBlockAccess p_149826_1_, int p_149826_2_, int p_149826_3_, int p_149826_4_)
            {
                Block block = p_149826_1_.getBlock(p_149826_2_, p_149826_3_, p_149826_4_);
                return !(block instanceof BlockFence) && !(block instanceof BlockFenceGate) ? (block.getMaterial().isOpaque() && block.renderAsNormalBlock() ? block.getMaterial() != Material.gourd : false) : block.getMaterial() == blockMaterial;
            }
        };
        block.setHardness(2.0F).setResistance(10.0F).setStepSound(Block.soundTypePiston).setBlockName("netherFence");
        GameRegistry.addSubstitutionAlias("minecraft:nether_brick_fence", GameRegistry.Type.BLOCK, block);
        GameRegistry.addSubstitutionAlias("minecraft:nether_brick_fence", GameRegistry.Type.ITEM, new ItemBlock(block));

Итак, как я могу сделать новую вещь ClassName () {some code}, но с переменной класса c Dynami? В принципе, представьте, что я делаю то же самое, но в первом блоке вместо этого использую переменную повторяющегося кода.

...