Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[Answered] Question about Tile Entites


PegBeard
 Share

Recommended Posts

Pretty simple question: Do I need a tile entity?

 

Specifically, if I make a functional block, such as a block breaker, but don't give it an inventory, do I still need a tile entity? I have looked at tutorials for functional blocks, but they have all used inventories and none of them discussed the necessity of tile entities.

Link to comment
Share on other sites

A

TileEntity

is needed for two basic reasons:

  • To store data beyond a 4-bit integer (metadata), e.g an inventory
  • To run code every tick or every X ticks (by implementing
    ITickable

    ). This can also be done via

    World#scheduleUpdate

    /

    Block#updateTick

    , but this may not be as reliable since Minecraft will only run up to 1000 scheduled updates per tick.

 

If you don't need either of these, you probably don't need a

TileEntity

.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

The difference is one of instantiation. There is only ever one actual object created of each block type. The world has a huge array of block IDs and metadata nibbles, not block objects. A block class's design must function on that tiny nibble of metadata (sometimes augmented by position and other contextual parameters passed into its methods). Millions of stone and air blocks need nothing more, but some blocks do. For those special blocks, we have helpers called tile entities.

 

By contrast, each tile entity gets an object (new TileEntity...) at each of its locations in the world. A tile entity operates while its chunk is loaded. Then (maybe) it writes its data to an NBT tag for storage (call super and then add data). When next the TE is loaded, it must similarly read NBT into an empty new object. Whenever that data changes, it must mark itself dirty to be sure it is (re)written.

 

Because of their abstractedness, block classes must only store data that applies to all blocks of the type. If you ever catch yourself adding persistent situational data to a block, stop; you'd be changing some data affecting every block of that type in the whole world. Ask yourself if the information can be reconstructed from context passed to each involved method call.

 

If so, then that's usually what you should do (even if the block already has a tile entity, you don't want to enlarge its NBT tag unnecessarily). If not, then you need to use a tile entity. If your block extends one that has a TE, then you usually want to extend its TE child class and add your own data (otherwise bad things may happen inside your block's parent).

 

I hope that helps you wrap your head around the block and tile paradigms.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

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
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.

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Oh, Now that I see it better the error is different.  This is the error now i dont saw much of it: 2022-01-19 21:36:34,998 main WARN Advanced terminal features are not available in this environment [21:36:36] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher running: args [--gameDir, ., --launchTarget, fmlserver, --fml.forgeVersion, 36.2.22, --fml.mcpVersion, 20210115.111550, --fml.mcVersion, 1.16.5, --fml.forgeGroup, net.minecraftforge] [21:36:36] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher 8.0.9+86+master.3cf110c starting: java version 1.8.0_25 by Oracle Corporation [21:36:36] [main/WARN] [cp.mo.mo.SecureJarHandler/]: LEGACY JDK DETECTED, SECURED JAR HANDLING DISABLED [21:36:38] [main/INFO] [ne.mi.fm.lo.FixSSL/CORE]: Added Lets Encrypt root certificates as additional trust [21:36:38] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.4 Source=file:/C:/Users/Lautaro/Desktop/server1/libraries/org/spongepowered/mixin/0.8.4/mixin-0.8.4.jar Service=ModLauncher Env=SERVER Exception in thread "main" [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]: java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/ClassFilter [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.coremod.NashornFactory.createEngine(NashornFactory.java:13) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.coremod.CoreModEngine.loadCoreMod(CoreModEngine.java:52) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.coremod.CoreModProvider.addCoreMod(CoreModProvider.java:12) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.fml.loading.LoadingModList$$Lambda$347/589987187.accept(Unknown Source) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:270) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.fml.loading.LoadingModList.addCoreMods(LoadingModList.java:85) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer.discoverMods(ModDiscoverer.java:130) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.fml.loading.FMLLoader.beginModScan(FMLLoader.java:216) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.fml.loading.FMLServiceProvider.runScan(FMLServiceProvider.java:107) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at cpw.mods.modlauncher.TransformationServiceDecorator.runScan(TransformationServiceDecorator.java:114) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at cpw.mods.modlauncher.TransformationServicesHandler.lambda$runScanningTransformationServices$8(TransformationServicesHandler.java:115) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at cpw.mods.modlauncher.TransformationServicesHandler$$Lambda$185/259564670.apply(Unknown Source) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:267) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1612) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at cpw.mods.modlauncher.TransformationServicesHandler.runScanningTransformationServices(TransformationServicesHandler.java:116) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at cpw.mods.modlauncher.TransformationServicesHandler.initializeTransformationServices(TransformationServicesHandler.java:63) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at cpw.mods.modlauncher.Launcher.run(Launcher.java:76) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.server.ServerMain$Runner.runLauncher(ServerMain.java:63) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.server.ServerMain$Runner.access$100(ServerMain.java:60) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1052]:       at net.minecraftforge.server.ServerMain.main(ServerMain.java:57) [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1061]: Caused by: java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/ClassFilter [21:36:39] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1061]:       ... 38 more [21:36:39] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:643]: Caused by: java.lang.ClassNotFoundException: jdk.nashorn.api.scripting.ClassFilter [21:36:39] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:643]:    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) [21:36:39] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:643]:    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) [21:36:39] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:643]:    at java.security.AccessController.doPrivileged(Native Method) [21:36:39] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:643]:    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) [21:36:39] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:643]:    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) [21:36:39] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:643]:    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) [21:36:39] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:643]:    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) [21:36:39] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:643]:    ... 38 more
    • i tried that but it says the same error
    • No, and it is in fact broken. Firstly, you never register this type, so it will never work correctly. Secondly, you must not create registry entries in static initializers. You did it correctly above: Use this instead. However this is in the wrong class, as particle types (as all registry entries) must be registered on both sides (client and server). As such doing this in a client-only class will never work right.
    • Every time you post you post in the wrong subforum and I have to move your thread. Please take the hint. This is broken. You must not return null from this method. Use NetworkHooks.getEntitySpawningPacket. You must also only spawn your entity and start riding it on the server.
    • Sorry about the wait, I managed to fix the issue by loading in one of my server providers presets and stealing the jar from that. Sorry about wasting your time.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.