Jump to content

[1.12.2] Registering Fluids and Materials


DiamondMiner88

Recommended Posts

This is probably a stupid question but, how do i register Fluids and FluidMaterials?

As what i have done now is register the fluid with

EventSubscriber

Fluid class

I don't get how to make an fluid block because i use @ObjectHolder

How do i register Materials? Any material?

What event?

Github Repository

Edited by DiamondMiner88
Link to comment
Share on other sites

On 4/28/2019 at 7:52 PM, DiamondMiner88 said:

I don't get how to make an fluid block because i use @ObjectHolder

 

Since you are registering your fluid in a block registry event use a local variable.

 

On 4/28/2019 at 7:52 PM, DiamondMiner88 said:

 How do i register Materials? Any material?

 

What's a material in this context? Could you please elaborate?

Link to comment
Share on other sites

50 minutes ago, V0idWa1k3r said:

Since you are registering your fluid in a block registry event use a local variable.

Like this?

public static final Block MOLTEN_GLASS_BLACK = new BlockFluidClassic(ModFluids.FLUID_MOLTEN_GLASS_BLACK, ModMaterials.MOLTEN_GLASS);
51 minutes ago, V0idWa1k3r said:

What's a material in this context? Could you please elaborate? 

public static final Material MOLTEN_GLASS = new MaterialLiquid(MapColor.GREEN_STAINED_HARDENED_CLAY);
Link to comment
Share on other sites

1 hour ago, DiamondMiner88 said:

Like this?

Why did you immediately jump to a static initializer when I said "local variable"? If you don't know what a local variable is then you need to learn basic java.

 

1 hour ago, DiamondMiner88 said:

public static final Material MOLTEN_GLASS = new MaterialLiquid(MapColor.GREEN_STAINED_HARDENED_CLAY);

You absolutely, 100% must not do this. 

Use one of the vanilla fluid materials provided, water or lava. If you need a custom color then use the constructor that takes a MapColor as an argument, or override Block#getMapColor

Link to comment
Share on other sites

9 hours ago, V0idWa1k3r said:

Why did you immediately jump to a static initializer when I said "local variable"? If you don't know what a local variable is then you need to learn basic java.

Sorry, i copied it off a tutorial, and is there a way to have it in a separate class? Because i want it to be organized what i did is make in a separate class and register it like i did with the others.

9 hours ago, V0idWa1k3r said:

Use one of the vanilla fluid materials provided, water or lava.

What if you want to make the fluid not push the player, but also damage it on contact and color the screen when in / under the fluid; also enabling the air bar near the inventory slots?

 

Did i register the Fluid correctly?

EDIT: As i understand you don't need to register materials like blocks. I pieced together stuff and it apparently works. :/

Edited by DiamondMiner88
Link to comment
Share on other sites

So everything is working now? If not, I had the same issue and figured it out on my own so I might be able to help you (same tutorial). Any other issues you might be having, for example, the color of the fluid not changing (had that problem, but looked at some of other mods source code and figured it out) I might be able to help.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.