- 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"));
}
}
И методов, которые нужно переопределить, там нет...