Jump to content

Bucket Volume  

18 members have voted

  1. 1. Bucket Volume

    • 1000mb
      10
    • 1296mb
      3
    • Other
      5


Recommended Posts

Posted
2 hours ago, hanetzer said:

Honestly I don't think mb would be useful to keep around, or perhaps keep it equal to a bucket ounce/whatever

so folks doing chem mods which use liquids which never become blocks (or came from blocks) can stay metric.

I agree, they can define their derived units of measure to be whatever they want (in terms of conversion from the smallest possible unit i.e. atom or bucket ounce etc ), and display it to the user however they want.  I don't think that needs to be standardised between mods?  

I think the proposed 1296 ounces (81 * 16) seems a reasonable tradeoff between granularity (from a user's point of view) and the maximum blocks in an int (i.e. 2^31 / 1296 ~ 1.6 million)

 

nugget    16 oz
ingot    144 oz
block    1296 oz
pane    81 oz

1296 seems to be a good number if you just throw away the milliBuckets name and replace it with something non-metric.  For folks raised in metric countries, milliBuckets != 1/1000 is extremely confusing.

 

An alternative thought - perhaps you want even divisibility by each "voxel" in a block, i.e. 16x16x16 = 4096,  x 81 = 331776 atoms per block

 

ounce = 256 atoms

nugget = 16 oz =  4096 atoms 
ingot = 144 oz =  36864 atoms
block = 1296 oz =  331776 atoms

 

voxel = 81 atoms
single line = 16 voxels = 1296 atoms
pane = 16 lines = 20736 atoms

block = 16 panes = 331776 atoms

 

That give you a maximum of ~6400 blocks in a single 31 bit int.  That seems like plenty?

 

 

 

 

 

Posted
1 hour ago, TheGreyGhost said:

i.e. 16x16x16 = 4096,  x 81 = 331776 atoms per block

This is too big of a number. Quick, what's 1/9th of it?

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.

Posted (edited)

Well the idea is that users won't know anything about atoms.  It's for the coders only.

The user will know about

ounces, nuggets, ingots, and blocks, or voxels, lines, panes, and blocks. 

 

Or some arbitrary measure such as grams, kilograms, tons, or just an inexact decimal representation such as 0.153 blocks.  They'll have no idea how many atoms are behind the scenes.  

 

Edited by TheGreyGhost
Posted (edited)

Honestly I would say having so many units would be confusing to new players (and some old players).

I don't see how remembering ounces, nuggets, voxels and the conversions between them is easier than "144mb an ingot, 1000mb a bucket".

Without a unified measurement (mB), some modders may start to favor certain units over the others, or invent their own units based on atoms, causing more confusion in the system.

Edited by DavidM
  • Like 1

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

Posted
4 minutes ago, DavidM said:

Honestly I would say having so many units would be confusing to new players (and some old players).

I don't see how remembering ounces, nuggets, voxels and the conversions between them is easier than "144mb an ingot, 1000mb a bucket".

Without a unified measurement (mB), some modders may start to favor certain units over the others, or invent their own units based on atoms, causing more confusion in the system.

that's the problem - i.e. an ingot is approximately 111.1111111 mB.  Your system of units has to be consistent.

 

The bottom line is that you have to make tradeoffs for the user, i.e. you either use a decimal representation that is inexact, or you define exact units which will be unwieldy numbers.  The whole metric vs imperial argument eg 15.363 kg vs 30 lb 3 oz.

 

One set of exact units works fine with "nice" numbers if you are dealing in whole amounts of nuggets (i.e. 9-based)

A different set of exact units is more "natural" if you want slabs (or 16-based such as 16x16x16 voxels)

 

When you mix the two together (for example you want to melt nuggets into panes) then you will always have residual bits left over that become messy.

 

If I were implementing a user interface for this, it would for sure be an inexact decimal representation (with an exact count behind the scenes).  For any practical use that I can think of, the user would not care if an ingot is shown as 111 mB instead of 111.11111 mB.

 

  • Like 1
Posted

Bear in mind that more players use metric systems than imperial (according to minecraft server statistics, and the fact that there are few countries which still use the imperial system).

It is far easier for users to understand that half a bucket is 500mb, than it is for them to see 648 "atoms" (If that is the approach, I would prefer to use something like "voxellites" which has no real-world bearing than "atoms" which could cause huge confusion for users of chemical mods).

And to the next argument that you would just display it as "3 1/2 buckets" or 3 1/1296 buckets", that is hugely unnatural for me (and presumably many others).

 

I'm not sure what the issue with 144mb/ingot is. Why does a melted compound have to fit in the same space as a solid one? It doesn't in real life.

And as far as cauldrons, I think it's fair enough to just lose 1mb in a cauldron. Who cares about 1/1000 of a bucket of an infinite resource? And for those mods which have finite supplies of water, they usually add their own mechanisms for collecting/storing it, so the cauldron issue is moot.

  • Like 1
  • Thanks 1
Posted

Howdy

9 hours ago, Alpvax said:

Bear in mind that more players use metric systems than imperial (according to minecraft server statistics, and the fact that there are few countries which still use the imperial system).

It is far easier for users to understand that half a bucket is 500mb, than it is for them to see 648 "atoms" (If that is the approach, I would prefer to use something like "voxellites" which has no real-world bearing than "atoms" which could cause huge confusion for users of chemical mods).

And to the next argument that you would just display it as "3 1/2 buckets" or 3 1/1296 buckets", that is hugely unnatural for me (and presumably many others).

 

That's for sure... the long slow death of the imperial system can't come fast enough for me.  

Just to be clear - I'm not proposing that the users will ever know about the "atoms" or "voxellites" or "grains" or whatever, that's just an internal representation.  The amount of fluid is stored using an int, i.e. 

final int FLUID_AMOUNT_ONE_VOXELLITE = 1;
final int FLUID_AMOUNT_ONE_NUGGET = 4096
final int FLUID_AMOUNT_ONE_NUGGET = 4096
final int FLUID_AMOUNT_ONE_BLOCK = 4096*81;
//etc

addFluidVoxellites(int voxellites) {
  this.fluidAmount += voxellites;
}

addFluidNuggets(int nuggets) {
  this.fluidAmount += FLUID_AMOUNT_ONE_NUGGET * nuggets;
}

addFluidMilliBlocks(float milliBlocks) {
  this.fluidAmount += (int)FLUID_AMOUNT_ONE_BLOCK * milliBlocks;
}

 

 

9 hours ago, Alpvax said:

I'm not sure what the issue with 144mb/ingot is. Why does a melted compound have to fit in the same space as a solid one? It doesn't in real life.

 

THe round trip is the problem.  In real life, you get conservation of mass i.e. if you melt the compound then freeze it, you get the same mass as before.

if your ingot is 144/1000 of a bucket, then converting ingots to buckets and back again gains you several extra ingots.

If you define a bucket as 1296 "millibuckets", then every metric-system-based user thinks you've taken leave of your senses :)

 

Cheers

  TGG

 

Posted
13 hours ago, TheGreyGhost said:

THe round trip is the problem.  In real life, you get conservation of mass i.e. if you melt the compound then freeze it, you get the same mass as before.

if your ingot is 144/1000 of a bucket, then converting ingots to buckets and back again gains you several extra ingots.

I don't see how that is true at all. Why does 1 block have to fit in 1 bucket? If we just accept that 1 block is 1296mb, everything works.

I don't see why we have to add the restriction that 1 bucket is 1 (solid) block. We can just accept that melting it makes it less dense, therefore bigger.

  • Like 1
Posted
9 hours ago, Alpvax said:

I don't see how that is true at all. Why does 1 block have to fit in 1 bucket? If we just accept that 1 block is 1296mb, everything works.

I don't see why we have to add the restriction that 1 bucket is 1 (solid) block. We can just accept that melting it makes it less dense, therefore bigger.

Howdy

The problem is that you're breaking the minecraft conventions to do that, for an arbitrary coding implementation reason.

Minecraft convention is:

9 nuggets per ingot

9 ingots per block

1 block = 1 bucket (think lava or water being filled into a bucket and back again).

 

This magic number 1296 (16*81) is only important behind the scenes, as a coding implementation, the user doesn't need to know about it at all.  The whole millibuckets question is actually a bit of a red herring, because there are really two parts to this

1) what's the internal representation of a fluid (the "atoms" or "voxellites" or whatever)

2) what do we do with the currently-accepted user convention of "millibuckets"

 

personally I think the best answers are:

1) 4096*81 = 331776 units per block (i,.e. final int FLUID_AMOUNT_ONE_BLOCK = 4096*81;) which allows exact representation of all the standard objects that we're interested in (and hence gives conservation of mass with no round-trip-gain-or-lose-mass problems);

2) leave milliBuckets as 1/1000 of a bucket, and present it to the user in an (inexact) metric format eg "one nugget = approximately 111 mB"

 

-TGG

Posted
16 hours ago, TheGreyGhost said:

1 block = 1 bucket (think lava or water being filled into a bucket and back again).

I don't agree with that logic.

Yes, 1 bucket of a fluid is 1 block of the fluid (although it actually doesn't quite reach the top, so you could argue that is not true), but there is nothing saying 1 solid block is equivalent to 1 bucket of that material melted down.

Liquid doesn't have ingots or nuggets, so those solid conversions do not need to apply to them.

If we keep it as 1 block of a solid becomes a bucket-and-a-bit, all it means is that you don't fit an even number of blocks into your tanks. But I don't see why that is an issue, because once you have converted it to a fluid, whatever you're using it for (machines?) probably doesn't care about the solid amount.

If you want to transfer exact amounts, use the blocks. They are probably easier to transport anyway (there is a vanilla mechanic for it, and you can usually carry 64 per inventory slot as opposed to the 1 in a bucket).

  • Like 1
  • 2 months later...
Posted

The main problem in this debate is not ingots. While ingots point out a clear flaw in the fluid units since 1000mb does not work with vanilla crafting, it is fair to say that does not have to match. However, the fact that forge fluid units are incompatible with two out of three of Mojang's one fluid container, that is bottles and the cauldron, is a huge problem. By this incompatibility, we are stuck with no fluid amount attributed to water bottles, and no mods can safely use bottles or cauldrons as a fluid container due to competing standards. Yes, in Java the cauldron can only hold water and bottles just water or potions, but in Bedrock it works on any fluid and there is a good chance that will one day end up in Java, so it needs to be considered in modding APIs.

 

As soon as you write off cauldrons as an "acceptable duplication" or 1/1000mb as an acceptable loss, you negate an entire vanilla mechanic being used in fluids at all, because if its an acceptable dupe for water, anything using that is an acceptable duplication. It is terrible game design to expect your math to not work out so you delete remainders or duplicate amounts. It is also terrible mod design to actively ignore mechanics in the base game like that.

 

An additional point is does it really matter that a bucket is 1000 parts? Players only see "I need X amount to craft this", that number can mean whatever modders want. I think its much more likely a player is thinking "1 bucket lets me craft 10 of these" than "I need 100mb to craft this" as the way you obtain most fluids is by the bucket.

Posted (edited)

Or you do edge-condition checks.

Water bottle? 333mb (oh no a loss)

Cauldron? 333mb / 666mb / 1000mb (depending on state)

 

Worried about someone pulling 333 out of your widget and putting it in a cauldron, then sucking it out of the cauldron to generate fluid? Don't be. They need to do that 1000 times to get ONE extra block worth of liquid. The game already has matter generators in the form of cobblestone generators.

 

Or maybe you don't. You can only pull 999 out of a cauldron, but in order to fill it you need to push 1000. Big deal.

Edited by Draco18s

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.

Posted (edited)

It is a big deal. Any fluid duplication is fluid duplication, which is bad design. You may think 1mb is almost nothing, but some mods add fluids that are expensive enough and used in small enough quantities that it quickly becomes a big deal, and automated users exist that let you automate "do thing 1000 times" super easy, so now my mod becomes a free fluid generator. I will not subject my mod to such an obvious fluid duplication bug even if its as "trivial" as you claim. That is just taking a broken system and using it despite it being broken.

 

And no, disabling pulling buckets out is equally bad. Players should not have to suffer and lose vanilla functionality because forge fluid units do not work with vanilla. Until we have something divisible by 3, fluid stacks are not practical to use for cauldrons or water bottles.

Edited by KnightMiner
Posted (edited)
58 minutes ago, KnightMiner said:

And no, disabling pulling buckets out is equally bad.

Yeah I never said that.

 

And if fluid duplication is that big of a deal, then suffer the 1mb loss instead.

Edited by Draco18s

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.

Posted (edited)

You miss the point. The 1mb loss is disabling pulling buckets out. Because you cannot pull 999mb as a bucket. Any method that lets you pull out 999mb as a bucket brings back the duplication.

 

 

Let me try to put the duplication more in terms that most players are used to. What if I told you for a low cost of 7 iron and a catalyst of 8 ingots of a particular metal, you could receive a free nugget of that metal in about 20 seconds, and easily an ingot in a minute or two? This could be used to produce enderium, manyullyn, draconium, any metal you have in your modpack. Would you consider such an exploit to be acceptable duplication? The standard for fluid for a nugget is a measly 16mb, and for an ingot 144mb. Neither is a lot if you can get a free 1mb in a few seconds.

 

When you look at duplication as acceptable because on a grand scale it means little, you forget that not all recipes work on a grand scale. Some recipes simply need 16mb of a fluid for an expensive resource. And really, the idea that any duplication is simply "acceptable" is stupid. If you think buckets are unlikely to get switched from 1000mb, argue that it is unlikely to be switched and why, I could accept that argument. But arguing that what we have right now causes no problems that cannot be easily solved is ridiculous.

Edited by KnightMiner

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

    • Version 1.19 - Forge 41.0.63 I want to create a wolf entity that I can ride, so far it seems to be working, but the problem is that when I get on the wolf, I can’t control it. I then discovered that the issue is that the server doesn’t detect that I’m riding the wolf, so I’m struggling with synchronization. However, it seems to not be working properly. As I understand it, the server receives the packet but doesn’t register it correctly. I’m a bit new to Java, and I’ll try to provide all the relevant code and prints *The comments and prints are translated by chatgpt since they were originally in Spanish* Thank you very much in advance No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. MountableWolfEntity package com.vals.valscraft.entity; import com.vals.valscraft.network.MountSyncPacket; import com.vals.valscraft.network.NetworkHandler; import net.minecraft.client.Minecraft; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.animal.Wolf; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.Entity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.network.PacketDistributor; public class MountableWolfEntity extends Wolf { private boolean hasSaddle; private static final EntityDataAccessor<Byte> DATA_ID_FLAGS = SynchedEntityData.defineId(MountableWolfEntity.class, EntityDataSerializers.BYTE); public MountableWolfEntity(EntityType<? extends Wolf> type, Level level) { super(type, level); this.hasSaddle = false; } @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(DATA_ID_FLAGS, (byte)0); } public static AttributeSupplier.Builder createAttributes() { return Wolf.createAttributes() .add(Attributes.MAX_HEALTH, 20.0) .add(Attributes.MOVEMENT_SPEED, 0.3); } @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemstack = player.getItemInHand(hand); if (itemstack.getItem() == Items.SADDLE && !this.hasSaddle()) { if (!player.isCreative()) { itemstack.shrink(1); } this.setSaddle(true); return InteractionResult.SUCCESS; } else if (!level.isClientSide && this.hasSaddle()) { player.startRiding(this); MountSyncPacket packet = new MountSyncPacket(true); // 'true' means the player is mounted NetworkHandler.CHANNEL.sendToServer(packet); // Ensure the server handles the packet return InteractionResult.SUCCESS; } return InteractionResult.PASS; } @Override public void travel(Vec3 travelVector) { if (this.isVehicle() && this.getControllingPassenger() instanceof Player) { System.out.println("The wolf has a passenger."); System.out.println("The passenger is a player."); Player player = (Player) this.getControllingPassenger(); // Ensure the player is the controller this.setYRot(player.getYRot()); this.yRotO = this.getYRot(); this.setXRot(player.getXRot() * 0.5F); this.setRot(this.getYRot(), this.getXRot()); this.yBodyRot = this.getYRot(); this.yHeadRot = this.yBodyRot; float forward = player.zza; float strafe = player.xxa; if (forward <= 0.0F) { forward *= 0.25F; } this.flyingSpeed = this.getSpeed() * 0.1F; this.setSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * 1.5F); this.setDeltaMovement(new Vec3(strafe, travelVector.y, forward).scale(this.getSpeed())); this.calculateEntityAnimation(this, false); } else { // The wolf does not have a passenger or the passenger is not a player System.out.println("No player is mounted, or the passenger is not a player."); super.travel(travelVector); } } public boolean hasSaddle() { return this.hasSaddle; } public void setSaddle(boolean hasSaddle) { this.hasSaddle = hasSaddle; } @Override protected void dropEquipment() { super.dropEquipment(); if (this.hasSaddle()) { this.spawnAtLocation(Items.SADDLE); this.setSaddle(false); } } @SubscribeEvent public static void onServerTick(TickEvent.ServerTickEvent event) { if (event.phase == TickEvent.Phase.START) { MinecraftServer server = net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(); if (server != null) { for (ServerPlayer player : server.getPlayerList().getPlayers()) { if (player.isPassenger() && player.getVehicle() instanceof MountableWolfEntity) { MountableWolfEntity wolf = (MountableWolfEntity) player.getVehicle(); System.out.println("Tick: " + player.getName().getString() + " is correctly mounted on " + wolf); } } } } } private boolean lastMountedState = false; @Override public void tick() { super.tick(); if (!this.level.isClientSide) { // Only on the server boolean isMounted = this.isVehicle() && this.getControllingPassenger() instanceof Player; // Only print if the state changed if (isMounted != lastMountedState) { if (isMounted) { Player player = (Player) this.getControllingPassenger(); // Verify the passenger is a player System.out.println("Server: Player " + player.getName().getString() + " is now mounted."); } else { System.out.println("Server: The wolf no longer has a passenger."); } lastMountedState = isMounted; } } } @Override public void addPassenger(Entity passenger) { super.addPassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(true)); } } } @Override public void removePassenger(Entity passenger) { super.removePassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is no longer mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(false)); } } } @Override public boolean isControlledByLocalInstance() { Entity entity = this.getControllingPassenger(); return entity instanceof Player; } @Override public void positionRider(Entity passenger) { if (this.hasPassenger(passenger)) { double xOffset = Math.cos(Math.toRadians(this.getYRot() + 90)) * 0.4; double zOffset = Math.sin(Math.toRadians(this.getYRot() + 90)) * 0.4; passenger.setPos(this.getX() + xOffset, this.getY() + this.getPassengersRidingOffset() + passenger.getMyRidingOffset(), this.getZ() + zOffset); } } } MountSyncPacket package com.vals.valscraft.network; import com.vals.valscraft.entity.MountableWolfEntity; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class MountSyncPacket { private final boolean isMounted; public MountSyncPacket(boolean isMounted) { this.isMounted = isMounted; } public void encode(FriendlyByteBuf buffer) { buffer.writeBoolean(isMounted); } public static MountSyncPacket decode(FriendlyByteBuf buffer) { return new MountSyncPacket(buffer.readBoolean()); } public void handle(NetworkEvent.Context context) { context.enqueueWork(() -> { ServerPlayer player = context.getSender(); // Get the player from the context if (player != null) { // Verifies if the player has dismounted if (!isMounted) { Entity vehicle = player.getVehicle(); if (vehicle instanceof MountableWolfEntity wolf) { // Logic to remove the player as a passenger wolf.removePassenger(player); System.out.println("Server: Player " + player.getName().getString() + " is no longer mounted."); } } } }); context.setPacketHandled(true); // Marks the packet as handled } } networkHandler package com.vals.valscraft.network; import com.vals.valscraft.valscraft; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.simple.SimpleChannel; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class NetworkHandler { private static final String PROTOCOL_VERSION = "1"; public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel( new ResourceLocation(valscraft.MODID, "main"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals ); public static void init() { int packetId = 0; // Register the mount synchronization packet CHANNEL.registerMessage( packetId++, MountSyncPacket.class, MountSyncPacket::encode, MountSyncPacket::decode, (msg, context) -> msg.handle(context.get()) // Get the context with context.get() ); } }  
    • Do you use features of inventory profiles next (ipnext) or is there a change without it?
    • Remove rubidium - you are already using embeddium, which is a fork of rubidium
  • Topics

×
×
  • Create New...

Important Information

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