Jump to content

JakeNelson1999

Members
  • Posts

    26
  • Joined

  • Last visited

Converted

  • Gender
    Male
  • Location
    London, UK
  • Personal Text
    *whispers* Hail Hydra *whispers*

JakeNelson1999's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. I'm trying to create a Minecraft Bot that can place blocks in the order set by the user. I'm having trouble moving items from the inventory to the hotbar, just wondering if there's any simple solution out there. Thanks, Jake.
  2. I'm looking for a way to move an item from the players inventory to the hotbar.
  3. @diesieben07 Hey there thanks for the suggestion, sorry I didnt see this earlier.
  4. So I'm currently using WorldDownloader's reflection utils which work wonders: package com.jakenelson1999.cactusbot.utils; import java.lang.reflect.Field; /** * Reflection utilities. */ public class ChunkUtils { /** * Uses Java's reflection API to get access to an unaccessible field * * @param typeOfClass * Class that the field should be read from * @param typeOfField * The type of the field * @return An Object of type Field */ public static Field stealField(Class<?> typeOfClass, Class<?> typeOfField) { Field[] fields = typeOfClass.getDeclaredFields(); for (Field f : fields) { if (f.getType().equals(typeOfField)) { try { f.setAccessible(true); return f; } catch (Exception e) { throw new RuntimeException( "WorldDownloader: Couldn't steal Field of type \"" + typeOfField + "\" from class \"" + typeOfClass + "\" !", e); } } } throw new RuntimeException( "WorldDownloader: Couldn't steal Field of type \"" + typeOfField + "\" from class \"" + typeOfClass + "\" !"); } /** * Uses Java's reflection API to get access to an unaccessible field * * @param object * Object that the field should be read from or the type of the * object if the field is static * @param typeOfField * The type of the field * @return The value of the field */ public static <T> T stealAndGetField(Object object, Class<T> typeOfField) { Class<?> typeOfObject; if (object instanceof Class<?>) { // User asked for static field: typeOfObject = (Class<?>) object; object = null; } else { typeOfObject = object.getClass(); } try { Field f = stealField(typeOfObject, typeOfField); return typeOfField.cast(f.get(object)); } catch (Exception e) { throw new RuntimeException( "WorldDownloader: Couldn't get Field of type \"" + typeOfField + "\" from object \"" + object + "\" !", e); } } /** * Uses Java's reflection API to set the value of an unaccessible field * * @param object * Object that the field should be read from or the type of the * object if the field is static * @param typeOfField * The type of the field * @param value * The value to set the field to. */ public static void stealAndSetField(Object object, Class<?> typeOfField, Object value) { Class<?> typeOfObject; if (object instanceof Class) { // User asked for static field: typeOfObject = (Class<?>) object; object = null; } else { typeOfObject = object.getClass(); } try { Field f = stealField(typeOfObject, typeOfField); f.set(object, value); } catch (Exception e) { throw new RuntimeException( "WorldDownloader: Couldn't set Field of type \"" + typeOfField + "\" from object \"" + object + "\" to " + value + "!", e); } } /** * Uses Java's reflection API to get access to an unaccessible field * * @param object * Object that the field should be read from or the type of the * object if the field is static * @param typeOfField * The type of the field * @return The value of the field */ public static <T> T stealAndGetField(Object object, Class<?> typeOfObject, Class<T> typeOfField) { try { Field f = stealField(typeOfObject, typeOfField); return typeOfField.cast(f.get(object)); } catch (Exception e) { throw new RuntimeException( "WorldDownloader: Couldn't get Field of type \"" + typeOfField + "\" from object \"" + object + "\" !", e); } } /** * Uses Java's reflection API to set the value of an unaccessible field * * @param object * Object that the field should be read from or the type of the * object if the field is static * @param typeOfObject * The type that the given field is located in. * @param typeOfField * The type of the field * @param value * The value to set the field to. */ public static void stealAndSetField(Object object, Class<?> typeOfObject, Class<?> typeOfField, Object value) { try { Field f = stealField(typeOfObject, typeOfField); f.set(object, value); } catch (Exception e) { throw new RuntimeException( "WorldDownloader: Couldn't set Field of type \"" + typeOfField + "\" from object \"" + object + "\" to " + value + "!", e); } } } To go through all loaded chunks you may simply do: public boolean isSpawnerNearby() { CactusBot.printToChat("Task tick!"); // Get the ChunkProviderClient from WorldClient ChunkProviderClient chunkProvider = (ChunkProviderClient) Minecraft.getMinecraft().theWorld.getChunkProvider(); // Get the list of all loaded chunks. List<?> chunks = ChunkUtils.stealAndGetField(chunkProvider, List.class); for (int currentChunk = 0; currentChunk < chunks.size(); currentChunk++) { Chunk c = (Chunk) chunks.get(currentChunk); for (int xx = 0; xx < 16; xx++) { for (int zz = 0; zz < 16; zz++) { for (int yy = 0; yy < 256; yy++) { Block block = c.getBlock(xx, yy, zz); if (block instanceof BlockMobSpawner) { CactusBot.printToChat("Found mob spawner " + xx + ", " + yy + ", " + zz); CactusBot.printToChat("chunk x start " + c.getChunkCoordIntPair().getXStart()); CactusBot.printToChat("chunk y start " + c.getChunkCoordIntPair().getZStart()); return true; } } } } } return false; }
  5. It's not a hack. It's a tool. I'll post the updated code into here for anyone else who wants to have a look!
  6. Thanks, that helps although the only issue is that it won't get loaded chunks, it'll be hard coded if I use that code. Is there not a way to access currently loaded chunks?
  7. Thanks haha I have no idea. I'm finding it hard to find information on this kind of stuff. Do you know whether there is an iterative get that I can do for loaded chunks though? Help would be greatly appreciated.
  8. The main class I'm using for the searching nearby chunks client side: package com.jakenelson1999.cactusbot.tasks; import com.jakenelson1999.cactusbot.CactusBot; import com.jakenelson1999.cactusbot.CactusController; import com.jakenelson1999.cactusbot.CactusTask; import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraftforge.common.util.BlockSnapshot; public class SearchForSpawner implements CactusTask { public boolean taskComplete = false; public SearchForSpawner(double destx, double desty, double destz, boolean walktoloc) { CactusController.setDelay(5000); } @Override public String getTaskName() { return "Spawner Find"; } @Override public String getTaskDescription() { return "Finds a spawner by walking across the top of the nether."; } @Override public boolean isTaskComplete() { return taskComplete; } @Override public void taskTick() { testDetect(); } @Override public void endTask() { } public boolean testDetect(){ /* This part here is not functioning! :( */ CactusBot.printToChat("Task tick!"); for(BlockSnapshot b : Minecraft.getMinecraft().theWorld.capturedBlockSnapshots){ if(b.getCurrentBlock().getBlock().getMaterial().equals(Blocks.mob_spawner.getMaterial())){ CactusBot.printToChat("Mob Spawner detected!!"); } CactusBot.printToChat(b.getCurrentBlock().getBlock()+""); } return true; } } Note: I've setup an interface for bot tasks, although it's a WIP.
  9. Hey there I'm working on a client side bot mod that I want to be able to search loaded nearby chunks for a particular block type, although currntly I'm unable to find a way to loop through loaded chunks / blocks. Help would be greatly appreciated. I've decided to upload the class files instead of pasting them as there are quite a few. src.zip
  10. I've found the player.inventory.setInventorySlotContents(player.inventory.currentItem, new function although it looks like many of these inventory functions just change the client and gets unchanged when the server updates the client. Help would be greatly appreciated.
  11. Hi there, I'm looking for a client side solution to moving items from the inventory to hotbar, this is for a Minecraft Mining bot that I'm working on. package com.jakenelson1999.cactusbot; import java.util.List; import com.jakenelson1999.cactusbot.threads.GoToLocThread; import com.jakenelson1999.cactusbot.threads.StackUpThread; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.command.CommandException; import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.MathHelper; public class CactusCMD implements ICommand { @Override public int compareTo(Object o) { // TODO Auto-generated method stub return 0; } @Override public String getName() { // TODO Auto-generated method stub return "cactus"; } @Override public String getCommandUsage(ICommandSender sender) { // TODO Auto-generated method stub return "/cactus"; } @Override public List getAliases() { // TODO Auto-generated method stub return null; } @Override public void execute(ICommandSender sender, String[] args) throws CommandException { EntityPlayerMP player = (EntityPlayerMP)sender; if (args[0].toLowerCase().contains("goto")){ cactusbot.printToChat("Going to "+args[1]+", "+args[2]+", "+args[3]); GoToLocThread.setLocX(Double.valueOf(args[1])); GoToLocThread.setLocY(Double.valueOf(args[2])); GoToLocThread.setLocZ(Double.valueOf(args[3])); GoToLocThread.setDestFound(false); } if(args[0].toLowerCase().contains("stack")){ cactusbot.printToChat("Stacking."); StackUpThread.height = Integer.valueOf(args[1])*2; } if(args[0].toLowerCase().contains("request")){ // Move item from inventory to hotbar requested by item id. } } @Override public boolean canCommandSenderUse(ICommandSender sender) { // TODO Auto-generated method stub return true; } @Override public List addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) { // TODO Auto-generated method stub return null; } @Override public boolean isUsernameIndex(String[] args, int index) { // TODO Auto-generated method stub return false; } }
  12. 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.
  13. "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!
  14. 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.
×
×
  • Create New...

Important Information

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