Jump to content

[1.12] Tile Entity does not load


MrDj200

Recommended Posts

Hey there o/.

 

I made a Tile Entity with the "ITickable" interface and I'm using the Overwritten method "update()" to let the Block do something.

And that works fine, except when I reload the world, it does not work anymore. Block updates won't start it either. It needs to be replaced.

What am I missing, is "update()" the wrong method?

 

Here's the code: https://pastebin.com/5vkT7eaJ

 

-Dj

 

Link to comment
Share on other sites

I'm fairly sure that starting 1.11 you want to register it in PreInit(), and your renderer in your client proxy PreInit(), but now that I've re-read I've noticed you're in 1.12, however, I'm not sure how to delete this post.

 

edit: nevermind.  I'm thinking about the wrong version.

Edited by oldcheese
I can't read
  • Like 1
Link to comment
Share on other sites

  • 4 months later...

I'm having the same issue and I'm wondering about the different events that are being used.

 

My main class implements:

  @Mod.EventHandler
  public void preInit(FMLPreInitializationEvent event)
  @Mod.EventHandler
  public void init(FMLInitializationEvent event)
  @Mod.EventHandler
  public void postInit(FMLPostInitializationEvent event)

 

It also defines this class

  @Mod.EventBusSubscriber
  public static class RegistrationHandler

implementing these methods:

    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event)
   @SubscribeEvent
    public static void registerItems(ModelRegistryEvent event)
    @SubscribeEvent
    public static void registerBlocks(RegistryEvent.Register<Block> event)

 

I got this from some tutorials and I was under the impression that the RegistrationHandler was the new preferred implementation.

 

I tried this in both the preInit and the registerBlocks events:

GameRegistry.registerTileEntity(MyTileEntity.class, "mymod:my_tile_entity")

And still my TE doesn't trigger onLoad until I right-click the block to open the GUI. Previously I had seen some "Skipping BlockEntity with id " (and no id was printed there) which leads me to believe my TE's weren't storing their NBT but after moving the registryTileEntity to preInit that error is gone.

 

1. What is the preferred implementation for the registration events; in which event should I register the Block and the TE?

2. Why is my TE not loaded on world load?

 

 

Edited by lyn mimistrobell
Link to comment
Share on other sites

53 minutes ago, lyn mimistrobell said:

I got this from some tutorials and I was under the impression that the RegistrationHandler was the new preferred implementation.

Yes it is.

 

54 minutes ago, lyn mimistrobell said:

And still my TE doesn't trigger onLoad until I right-click the block to open the GUI.

 

Show your code.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

2 hours ago, Draco18s said:

Show your code.

I provided all the relevant code... In the log I see it does:

 - preInit (on Client)

 - RegistrationHandler.registerBlocks (on Client)

 - GameRegistry.registerTileEntity (on Client)

 - RegistrationHandler.registerItems (on Client)

 - RegistrationHandler.registerItems (on Client, for the models)

 - init (on Client)

 - postInit (on Client)

 

Then when I right-click my block:

 - onBlockActivated (on Server)

 - TE.onLoad (on Server)

 - TE.onLoad (on Client)

 

Anything unexpected here? The  block itself is registered on RegistrationHandler.registerBlocks; is that a problem?

 

 

Link to comment
Share on other sites

you should make sure in you block you have the method's hasTileEntity() (although not sure if this is needed),

and also createTileEntity().

Edited by sir_titi
typo :p

Always looking for new challenges, and happy to help the people where ever I can

Link to comment
Share on other sites

I've implemented:
 - getTileEntityClass
 - getTileEntity
 - hasTileEntity (returns true)
 - createTileEntity(world, state) (though deprecated)
 - createTileEntity(world, meta) (though deprecated)

My Block and TE class have a constructor without parameters.

One thing that bugs me is that all registrations happen through event.getRegistry; except for the TE registration which uses GameRegistry.registerTileEntity - seems inconsistent.

Link to comment
Share on other sites

and you are implementing "ITileEntityProvider"?

cuss those method's you call are not recommended

implement the interface i said and use those method's that have the Blockstate instead of the meta

 

And yea i know but hey! Make a wrapper method and you no longer see that :p.

Edited by sir_titi

Always looking for new challenges, and happy to help the people where ever I can

Link to comment
Share on other sites

1 hour ago, lyn mimistrobell said:

I provided all the relevant code...

No you didn't. I want to see your entire Block and entire TileEntity classes.

Possibly also other things, I can't be sure.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

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.