Изменение звука, частиц и оверлея жидкости в MCreator

Версия Minecraft
1.16.5
API
MCreator
198
1
24
Начал делать мод с помощью MCreator - и сразу понял, что без вставок своего кода там не обойтись. Вот, например, жидкость в MCreator основана на воде или на лаве. Вода имеет пузырьки, и характерный плеск, ну и оверлей под водой. Аналогично с лавой. Все эти свойства совершенно неуместны для моей жидкости. Насколько я понял, мне нужно переопределить метод animateTick() в классе жидкости. Но у MCreator'а свой, извращённый стиль кода, и вместо класса FlowingFluid или Fluid, как вода или лава, он выглядит вот так:

Java:
package com.madalchemist.alienworlds.block;

import net.minecraftforge.registries.ObjectHolder;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fluids.ForgeFlowingFluid;
import net.minecraftforge.fluids.FluidAttributes;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.api.distmarker.Dist;

import net.minecraft.world.World;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.ResourceLocation;
import net.minecraft.item.Items;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.Item;
import net.minecraft.item.BucketItem;
import net.minecraft.fluid.Fluid;
import net.minecraft.fluid.FlowingFluid;
import net.minecraft.entity.Entity;
import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.block.material.Material;
import net.minecraft.block.FlowingFluidBlock;
import net.minecraft.block.BlockState;
import net.minecraft.block.Block;

import java.util.Map;
import java.util.HashMap;

import com.madalchemist.alienworlds.procedures.QuickSandEntityCollidesInTheBlockProcedure;
import com.madalchemist.alienworlds.AlienWorldsModElements;

@AlienWorldsModElements.ModElement.Tag
public class QuickSandBlock extends AlienWorldsModElements.ModElement {
    @ObjectHolder("alien_worlds:quick_sand")
    public static final FlowingFluidBlock block = null;
    @ObjectHolder("alien_worlds:quick_sand_bucket")
    public static final Item bucket = null;
    public static FlowingFluid flowing = null;
    public static FlowingFluid still = null;
    private ForgeFlowingFluid.Properties fluidproperties = null;
    public QuickSandBlock(AlienWorldsModElements instance) {
        super(instance, 37);
        FMLJavaModLoadingContext.get().getModEventBus().register(new FluidRegisterHandler());
    }
    private static class FluidRegisterHandler {
        @SubscribeEvent
        public void registerFluids(RegistryEvent.Register<Fluid> event) {
            event.getRegistry().register(still);
            event.getRegistry().register(flowing);
        }
    }
    @Override
    @OnlyIn(Dist.CLIENT)
    public void clientLoad(FMLClientSetupEvent event) {
        RenderTypeLookup.setRenderLayer(still, RenderType.getTranslucent());
        RenderTypeLookup.setRenderLayer(flowing, RenderType.getTranslucent());
    }

    @Override
    public void initElements() {
        fluidproperties = new ForgeFlowingFluid.Properties(() -> still, () -> flowing,
                FluidAttributes
                        .builder(new ResourceLocation("alien_worlds:blocks/red_quicksand"), new ResourceLocation("alien_worlds:blocks/red_quicksand"))
                        .luminosity(0).density(2500).viscosity(6666)).bucket(() -> bucket).block(() -> block);
        still = (FlowingFluid) new ForgeFlowingFluid.Source(fluidproperties).setRegistryName("quick_sand");
        flowing = (FlowingFluid) new ForgeFlowingFluid.Flowing(fluidproperties).setRegistryName("quick_sand_flowing");
        elements.blocks.add(() -> new FlowingFluidBlock(still, Block.Properties.create(Material.LAVA)) {
            @Override
            public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) {
                super.onEntityCollision(state, world, pos, entity);
                int x = pos.getX();
                int y = pos.getY();
                int z = pos.getZ();
                {
                    Map<String, Object> $_dependencies = new HashMap<>();
                    $_dependencies.put("entity", entity);
                    $_dependencies.put("x", x);
                    $_dependencies.put("z", z);
                    $_dependencies.put("world", world);
                    QuickSandEntityCollidesInTheBlockProcedure.executeProcedure($_dependencies);
                }
            }
        }.setRegistryName("quick_sand"));
        elements.items.add(() -> new BucketItem(still, new Item.Properties().containerItem(Items.BUCKET).maxStackSize(1).group(ItemGroup.MISC))
                .setRegistryName("quick_sand_bucket"));
    }
}

И методов, которые нужно переопределить, там нет...
 

ReyMagos

Тег-бомбастер
412
7
121
И методов, которые нужно переопределить, там нет...
Так допиши их.
Если тебе нужно переопределить какой-либо метод ты должен его написать, для удобства поставить аннотацию @Override и написать внутри него, что нужно. Если нужно обратиться к родительскому методу использую super.

вместо класса FlowingFluid или Fluid
Этот класс всё равно будет наследоваться от жидкости, не зависимо от того, что там MCreator вытворяет. Значит нужный тебе метод там будет.
 
Последнее редактирование:

ReyMagos

Тег-бомбастер
412
7
121
Если ты пишешь в идее, то "Ctrl+Элемент в коде" и он перекинет тебя на определение этого элемента. Соответственно тыкаешь AlienWorldsModElements.>>>ModElement<<< сюда и тебя кидает на определение. Если там снова какая-то фигня повторяешь действие. И так ты дойдёшь то чего-то майнкрафтовского, например до Fluid.
 
Сверху