Posted November 18, 20168 yr Hi There, I'm Jake. At the moment I'm trying to work on a mod which lets you transfer all items from the currently open chest to inventory. After looking on the forums for a few hours I found the function transferstackinslot The current code looks like this: player.openConainer.transferStackInSlot(player, 1); player.openContainer.detectAndSendChanges(); player.inventoryContainer.detectAndSendChanges(); The only issue is the items aren't actually moved, it's only client sided, so once it's updated the items disappear. Help would be greatly appreciated!! Jake.
November 18, 20168 yr Hi There, I'm Jake. At the moment I'm trying to work on a mod which lets you transfer all items from the currently open chest to inventory. After looking on the forums for a few hours I found the function transferstackinslot The current code looks like this: player.openConainer.transferStackInSlot(player, 1); player.openContainer.detectAndSendChanges(); player.inventoryContainer.detectAndSendChanges(); The only issue is the items aren't actually moved, it's only client sided, so once it's updated the items disappear. Help would be greatly appreciated!! Jake. Where are you running the code at? VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
November 18, 20168 yr Author It'll probably be easier if you have the full code. package com.jakenelson1999.mods.cmds; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Timer; import java.util.TimerTask; import net.minecraft.client.Minecraft; import net.minecraft.client.network.NetworkPlayerInfo; import net.minecraft.client.settings.KeyBinding; import net.minecraft.command.CommandException; import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.client.settings.KeyBindingMap; import net.minecraftforge.fml.client.FMLClientHandler; public class TestPluginCommand implements ICommand { @Override public int compareTo(ICommand o) { return 0; } @Override public String getCommandName() { return "jakeplugin"; } @Override public String getCommandUsage(ICommandSender sender) { return "/jakeplugin help"; } @Override public List<String> getCommandAliases() { return null; } @Override public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { if(args[0].equalsIgnoreCase("debug")){ // The following code scans in a 10 block range around the player for a chest. int range = 10; double playerx = MathHelper.floor_double(Minecraft.getMinecraft().thePlayer.posX); double playery = MathHelper.floor_double(Minecraft.getMinecraft().thePlayer.posY); double playerz = MathHelper.floor_double(Minecraft.getMinecraft().thePlayer.posZ); double chestx = 0; double chesty = 0; double chestz = 0; for (double x = playerx - range; x < playerx+range; x++){ for (double y = playery - range; y < playery+range; y++){ for (double z = playerz - range; z < playerz+range; z++){ if(Minecraft.getMinecraft().thePlayer.getEntityWorld().getBlockState(new BlockPos(x, y, z)).toString().toLowerCase().contains("chest")){ System.out.println(x+" "+y+" "+z); chestx = x; chesty = y; chestz = z; } } } } // The pitch and yaw values are calculated using mathsey stuff. double xDiff = chestx - playerx; double yDiff = chesty - 1 - playery; double zDiff = chestz - playerz; double DistanceXZ = Math.sqrt(xDiff * xDiff + zDiff * zDiff); double DistanceY = Math.sqrt(DistanceXZ * DistanceXZ + yDiff * yDiff); double newYaw = Math.acos(xDiff / DistanceXZ) * 180 / Math.PI; double newPitch = Math.acos(yDiff / DistanceY) * 180 / Math.PI - 90; if (zDiff < 0.0) newYaw = newYaw + Math.abs(180 - newYaw) * 2; newYaw = (newYaw - 90); float yaw = (float) newYaw; float pitch = (float) newPitch; float headyaw = (float) newYaw; // The player looks perfectly at the chest. So this works! Minecraft.getMinecraft().thePlayer.setAngles(yaw, pitch); Minecraft.getMinecraft().thePlayer.setLocationAndAngles(Minecraft.getMinecraft().thePlayer.posX, Minecraft.getMinecraft().thePlayer.posY, Minecraft.getMinecraft().thePlayer.posZ, yaw, pitch); // A New thread is started // (I don't want to sleep the main thread or the game would pause) final Thread thread = new Thread(){ public void run(){ try {this.sleep(500);} catch (InterruptedException e) {} // Make the player right click and open the chest // This works perfectly fine KeyBinding.onTick(Minecraft.getMinecraft().gameSettings.keyBindUseItem.getKeyCode()); try {this.sleep(500);} catch (InterruptedException e) {} //This is where the problem lies. When taking items out the chest, they are only moved // temporarily. Thanks to whoever is reading this for taking the time to help me! // Save the player as 'player' EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer; //Transfer the item in slot 1 to the player? player.openContainer.transferStackInSlot(player, 1); // Give the action time to settle try {this.sleep(100);} catch (InterruptedException e) {} // Update the changes player.openContainer.detectAndSendChanges(); try {this.sleep(100);} catch (InterruptedException e) {} player.inventoryContainer.detectAndSendChanges(); } }; // Start the thread. thread.start(); } } } } @Override public boolean checkPermission(MinecraftServer server, ICommandSender sender) { return true; } @Override public List<String> getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) { return null; } @Override public boolean isUsernameIndex(String[] args, int index) { return false; } }
November 18, 20168 yr I believe that code is executed on the client side of things so you will want to send a packet with as little information as possible to get this done then do it in the packet. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
November 18, 20168 yr Author That sounds like an incredibly daunting task This is my first mod, So any further help would be appreciated haha. Thanks, Jake.
November 18, 20168 yr That sounds like an incredibly daunting task This is my first mod, So any further help would be appreciated haha. Thanks, Jake. Read this http://www.minecraftforge.net/forum/index.php?topic=20135.0 VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
November 18, 20168 yr Author Hey sorry for bugging you guys but i feel completely out of my depth. So I get the basic idea of packets - Packets are used by server and client to send information - Theres a different id and piece of data recieved by the server for each action in minecraft. - Theres a particular id for transfering items from the chest to player's inventory My questions are: - Is there a list of packet ids I could use? - Is there a non-packet way to do this, packets seem very scary.
November 18, 20168 yr Hey sorry for bugging you guys but i feel completely out of my depth. So I get the basic idea of packets - Packets are used by server and client to send information - Theres a different id and piece of data recieved by the server for each action in minecraft. - Theres a particular id for transfering items from the chest to player's inventory My questions are: - Is there a list of packet ids I could use? - Is there a non-packet way to do this, packets seem very scary. There is not a non packet way to do this as you need to communicate with the server from the client and packets are the only way to do this. You could instead of using a command use something else like an Item right click. And I believe the id's for mods are mod specific. Then converted to universal later. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
November 18, 20168 yr Author "Item right click" Sorry bro i don't think you understand what im trying to do I just want a mod that will put all the items in a chest into the players inventory. It should be very simple to do but now I've got a headache and have drank 10 cups of coffee so far. If anyone else has a simple solution please feel free to post it before i die inside. Thanks, Jake!
November 18, 20168 yr "Item right click" Sorry bro i don't think you understand what im trying to do I just want a mod that will put all the items in a chest into the players inventory. It should be very simple to do but now I've got a headache and have drank 10 cups of coffee so far. If anyone else has a simple solution please feel free to post it before i die inside. Thanks, Jake! "Item Right Click" is when you right click while holding an Item. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
November 18, 20168 yr Author I've been looking at this for the past 10 hours. I'm still stuck looking for solutions. I think the packet idea is how I would go through with it. The problem is I haven't got the ability to code in raw packets. Help would be greatly appreciated Jake.
November 18, 20168 yr I think the packet idea is how I would go through with it. That would be correct. The problem is I haven't got the ability to code in raw packets. Packets are easy. https://github.com/Draco18s/ReasonableRealism/blob/master/src/main/java/com/draco18s/industry/network/CtoSMessage.java https://github.com/Draco18s/ReasonableRealism/blob/master/src/main/java/com/draco18s/industry/network/PacketHandlerServer.java 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.
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.