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



×
×
  • Create New...

Important Information

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