Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.