Jump to content

Recommended Posts

Posted (edited)

Hi !

I created a small mod but I didn't realize the system I used was bad for adding more content. So I decided to rewrite my mod so it's easier to add new content and to allow modders to add their own content to my mod.

But I have some general questions before rewriting my mod.

 

1) The system I use to save my Tile Entity's data. Basically, my mod adds 2 types of blocks : controllers and devices. A device is controlled by 0 to N controllers. You can link a device to a controller by shift-right-clicking the device then shift-right-clicking the controller. This is the basis of my mod. The controller TileEntity stores it's data + all data from every linked device, whereas the device TileEntity only stores his data + the position of all controllers controlling the device. Both use Capabilities. This way I can easily update the controller when the device data changed. But it seems to be a huge use of useless space in NBT data, and the only way to "identify" the device is from it's BlockPos.

Instead, should I store controllers datas and devices datas in the World itself ? Each controller/device will have an identifier (integer), and only this identifier will be stored in the TE data. And for the controller for example, I will store which device is linked to the controller using a list of device IDs.

If this is more optimized, should I use a WorldSavedData or a Capability ? (basically, I'll be storing a Map<Integer, DeviceData> (or just a List<DeviceData>, though) containing all devices in the world).

 

2) Using Java 8 features, does this custom IMessageHandler implementation work for both sides ?

Spoiler

public interface ICustomMessageHandler<REQ extends IMessage> extends IMessageHandler<REQ, IMessage> {

	@Override
	default IMessage onMessage(REQ message, MessageContext ctx) {
		WirelessRedstoneControl.proxy.getThreadListener(ctx).addScheduledTask(() -> {
			onMessage_(message, ctx);
		});
		return null;
	}

	public void onMessage_(REQ message, MessageContext ctx);

}

public class ClientProxy implements IProxy {

	@Override
	public IThreadListener getThreadListener(MessageContext ctx) {
		return Minecraft.getMinecraft();
	}

}

public class ServerProxy implements IProxy {

	@Override
	public IThreadListener getThreadListener(MessageContext ctx) {
		return (WorldServer) ctx.getServerHandler().player.world;
	}

}

Thanks for answering :)

Edited by Franckyi
Syntax highlighting

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

    • https://mclo.gs/46Xf7Sq thanks
    • That seems to have fixed it, thank you!
    • I am having some issues starting an RLCraft server on a minimal install of Debian 12. I have Java installed and I'm able to start the vanilla Minecraft server jar no problem and people can join and play without any issues, as soon as I try to create a new directory with the Forge jar the initial install with the INSTALLER jar works when I use the java command with the --installServer flag, but as soon as I try to start the server using the forge jar that is NOT labelled with installer I get the following error: A problem occurred running the Server launcher.java.lang.reflect.InvocationTargetException         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)         at java.base/java.lang.reflect.Method.invoke(Method.java:569)         at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.run(ServerLaunchWrapper.java:70)         at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.main(ServerLaunchWrapper.java:34) Caused by: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap')         at net.minecraft.launchwrapper.Launch.<init>(Launch.java:34)         at net.minecraft.launchwrapper.Launch.main(Launch.java:28)         ... 6 more   I have tried using newer versions of Java directly from Oracle as well. Has anybody been successful in starting and running a RLCraft server from the terminal on a Linux machine? I cannot figure out why it doesn't want to work but the vanilla jar works without issue. Thank you in advance!
  • Topics

×
×
  • Create New...

Important Information

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