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

[1.16.4] Why recipe result calculated on server side?


Recommended Posts

I want to implement my own block for crafting. So, I investigated canonical example - workbench. And found this code:

 

   protected static void updateCraftingResult(int id, World world, PlayerEntity player, CraftingInventory inventory, CraftResultInventory inventoryResult) {
      if (!world.isRemote) {
         ServerPlayerEntity serverplayerentity = (ServerPlayerEntity)player;
         ItemStack itemstack = ItemStack.EMPTY;
         Optional<ICraftingRecipe> optional = world.getServer().getRecipeManager().getRecipe(IRecipeType.CRAFTING, inventory, world);
         if (optional.isPresent()) {
            ICraftingRecipe icraftingrecipe = optional.get();
            if (inventoryResult.canUseRecipe(world, serverplayerentity, icraftingrecipe)) {
               itemstack = icraftingrecipe.getCraftingResult(inventory);
            }
         }

         inventoryResult.setInventorySlotContents(0, itemstack);
         serverplayerentity.connection.sendPacket(new SSetSlotPacket(id, 0, itemstack));
      }
   }

 

Crafting result calculates on logical server and than client will be notified about result. But why? My crafting interface propose few results, based on items, which player have. Calculation of all combinations is not easy (of couse it have options for optimisation). What a reason to execute crafting result calculations on server?

Link to post
Share on other sites
54 minutes ago, kiou.23 said:

https://link.springer.com/referenceworkentry/10.1007%2F978-3-319-08234-9_272-1

It's the architecture, the server does all the logical shenanigans, and the client is only a viewport, an interface to the state that's managed in the server side

So, it is more ideologically question than strong restriction? I will try to prevent all situations, when count of combination will be critically big. But in theory I may miss some scenarious, which will creates overload. In this case will be better to overload client and give bad expirience for one player, than overlod server and give bad expirience for all.

Edited by S-Spirit
Link to post
Share on other sites
36 minutes ago, S-Spirit said:

So, it is more ideologically question than strong restriction? I will try to prevent all situations, when count of combination will be critically big. But in theory I may miss some scenarious, which will creates overload. In this case will be better to overload client and give bad expirience for one player, than overlod server and give bad expirience for all.

Cheating.

 

Player says "let me just modify my recipe files so that cobblestone makes diamonds."

Normal server goes "what, no stupid, you can't make diamonds out of cobblestone."

You: "OK, diamonds for you! That is a totally legitimate result I believe you're being honest."

  • Thanks 1

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.

Link to post
Share on other sites
22 hours ago, Draco18s said:

Cheating.

 

Player says "let me just modify my recipe files so that cobblestone makes diamonds."

Normal server goes "what, no stupid, you can't make diamonds out of cobblestone."

You: "OK, diamonds for you! That is a totally legitimate result I believe you're being honest."

For now it is impossible. My crating system is tricki a little. I didn't found way to represents necessary logic by JSON without losing my wishes about customisation. So I don't use recipes consept at all. But I hope at future resolve this problem and use it. In any case, I think your notification about cheating it a great point! So I will implement combinations calculation and filtration at client, but then send results to server for approve and apply into slots. Thanks.

Edited by S-Spirit
Link to post
Share on other sites
1 hour ago, S-Spirit said:

but then send results to server for approve

The server would have to do all the same calculations the client did in order to approve.

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.

Link to post
Share on other sites
13 hours ago, Draco18s said:

The server would have to do all the same calculations the client did in order to approve.

I want to propose to user few options, which he/she may craft from items in inventory. Client will prepare all combinations, than select only few best (in my context). Server will validate only this few combinations. Ofcouse I plans to add precheck how many combination client may construct and prevent few-seconds freezes with message like "Sorry, so many ingredients for autocompletion."

Link to post
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.

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.



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Hello, Ive been having issues downloading forge 1.16, as the installer just says: "The directory is missing a launcher profile. (see image 1)" I have launched the launcher, and the files even show up in the file explorer (see image 2). So, I look in the folders, and there are no files in any of the folders that should have files for Minecraft (see images 3 and 4) I dont know of any way to this so please help
    • Hi, mi name is Nestor. I was creating a server, (magma 1.12.2) and I came up with the idea of implementing a "Radio" the server is a hybrid server, it allows spigot and forge, but I was seeing many ways to add a radio type and the only ways is to reproduce the sound directly, and What I would like is that, for example, the user will turn off the radio and stop listening, but when the radio starts it seems that the radio is live, that is, it does not pause or the sound is removed, it simply no longer listen to the player, I saw that the only forms both easy as a / playsound or with classes, what I need is to see if someone knows any class / api that helps me do that, both spigot and forge, or any idea of how to achieve that in Minecraft :C
    • My issue is that my server crashes 2-3 a day and I can’t figure out how to solve it    Here is the main portion of the crash log: ---- Minecraft Crash Report ---- // You're mean. Time: 2021-06-19 07:29:47 HDT Description: Exception ticking world java.util.ConcurrentModificationException     at java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)     at java.util.HashMap$KeyIterator.next(HashMap.java:1469)     at net.minecraft.entity.EntityTracker.sendLeashedEntitiesInChunk(EntityTracker.java:386)     at net.minecraft.server.management.PlayerChunkMapEntry.sendToPlayers(PlayerChunkMapEntry.java:162)     at net.minecraft.server.management.PlayerChunkMap.tick(SourceFile:165)     at net.minecraft.world.WorldServer.tick(WorldServer.java:227)     at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:756)     at net.minecraft.server.dedicated.DedicatedServer.updateTimeLightAndEntities(DedicatedServer.java:397)     at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:668)     at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:526)     at java.lang.Thread.run(Thread.java:748)       I think the issue lies within the line “net.minecraft.entity.EntityTracker.sendLeashedEntitiesInChunk(EntityTracker.java:386)”  but I have no idea what leashedentities could be, would it be any mob or entity that has a leash on it?
    • Hi, I am new to modding and am having a little trouble when it comes to rgistering a custom recipe serializer to generate my recipe. It's a simple single item recipe so I tired to extend the singleItemRecipeBuilder, however I keep getting the following error when I runData. [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]: Caused by: java.lang.ExceptionInInitializerError [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at com.kup.burgercraft.util.recipe.MeatGrindingRecipeBuilder.meatGrinding(MeatGrindingRecipeBuilder.java:16) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at com.kup.burgercraft.data.ModRecipeProvider.RegisterMeatGrinding(ModRecipeProvider.java:52) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at com.kup.burgercraft.data.ModRecipeProvider.buildShapelessRecipes(ModRecipeProvider.java:20) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at net.minecraft.data.RecipeProvider.run(RecipeProvider.java:50) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at net.minecraft.data.DataGenerator.run(DataGenerator.java:44) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at net.minecraftforge.fml.event.lifecycle.GatherDataEvent$DataGeneratorConfig.lambda$runAll$0(GatherDataEvent.java:111) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at cpw.mods.modlauncher.api.LamdbaExceptionUtils.lambda$rethrowConsumer$0(LamdbaExceptionUtils.java:34) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at java.base/java.util.HashMap$Values.forEach(HashMap.java:976) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at net.minecraftforge.fml.event.lifecycle.GatherDataEvent$DataGeneratorConfig.runAll(GatherDataEvent.java:107) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at net.minecraftforge.fml.DatagenModLoader.begin(DatagenModLoader.java:61) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     at net.minecraft.data.Main.main(Main.java:43) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:648]:     ... 11 more [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:671]: Caused by: java.lang.IllegalStateException: Cannot register new entries to DeferredRegister after RegistryEvent.Register has been fired. [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:671]:     at net.minecraftforge.registries.DeferredRegister.register(DeferredRegister.java:111) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:671]:     at com.kup.burgercraft.setup.ModRecipes$Serializers.<clinit>(ModRecipes.java:26) [01:46:59] [main/INFO] [STDERR/]: [java.lang.Throwable:printStackTrace:671]:     ... 22 more below is a few pastebins of hopefully the more relavant clases ModRecipeProvider MeatGrindingRecipe ModRecipes Registration   Many thanks for any assiance you might be able to lend.  
    • Hello There! The finale is FINALLY here of this really wholesome video series! In this one we switch some things up and we surprise my one friend with a MINECRAFT ACCOUNT! Then we get back to the usual stuff where we surprise the ones who have Java Minecraft with their statues and everything! Sadly this little series was cut short because of the server shutting down but it was fun nonetheless! If you are looking for a wholesome/good vibe video series this is the one for you! I hope you all enjoy this video and if you did don't forget to like and sub for more!  
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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