Jump to content

MultiMote

Forge Modder
  • Posts

    257
  • Joined

  • Last visited

Everything posted by MultiMote

  1. (IInventory variable).getStackInSlot(number) ?
  2. I think you can select all EntityItems near the player (world.getEntitiesWithinAABBExcludingEntity) and move them. Take look at handleMaterialAcceleration function in the EntityItem class.
  3. Slots in container numerated from 0 to inventory_size - 1 Let's look at your code. for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { addSlotToContainer(new Slot(c, j + i * 2, (loot_x + j * 18), (loot_y + i * 18))); } This code adds slots: 0, 1, 2, 3, 4, 5 for (int j = 0; j < 2; j++) { addSlotToContainer(new SlotUpgrade(c, j * 2, (loot_x + j * 18), (loot_y + j + 4 * 18))); } This code adds slots: 0 (again), and 5 (again) I think you should edit second part to this: for (int j = 0; j < 2; j++) { addSlotToContainer(new SlotUpgrade(c, 6 + j, (loot_x + j * 18), (loot_y + j + 4 * 18))); } And it will add slots 6 and 7 instead of 0 and 5
  4. @SubscribeEvent public void onSleep(PlayerSleepInBedEvent event) { if(event.result == EntityPlayer.EnumStatus.OK) event.entityPlayer.worldObj.playSoundEffect(event.entityPlayer.posX, event.entityPlayer.posY, event.entityPlayer.posZ, "random.successful_hit", 1.0F, 0.1F); }
  5. MinecraftForgeClient.registerItemRenderer(ModClass.youritem, new YourItemRenderer()); YourItemRenderer must implement IItemRenderer. @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { switch (type) { case EQUIPPED: //render code break; case EQUIPPED_FIRST_PERSON: //render code break; case ENTITY: //render code break; case INVENTORY: //render code break; default: break; } } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return true; //render all variants }
  6. http://www.minecraftforge.net/wiki/Using_wavefront_model
  7. You add buttons in drawScreen which called 20 times per second. You must add buttons in initGui().
  8. Create class with methods @SubscribeEvent public void onLogout(PlayerEvent.PlayerLoggedOutEvent event) {} @SubscribeEvent public void onLogin(PlayerEvent.PlayerLoggedInEvent event) {} And register it with FMLCommonHandler.instance().bus().register(new YourClass());
  9. I created and tested pig with inventory for you MyEntity: public class MyEntity extends EntityPig implements IInvBasic { public MyInventory gear; public MyEntity(World world) { super(world); this.setupGear(); this.gear.setInventorySlotContents(0, new ItemStack(Items.apple)); this.gear.setInventorySlotContents(1, new ItemStack(Items.carrot)); } public int howManySlots() { return 8; } private void setupGear() { MyInventory gear1 = this.gear; this.gear = new MyInventory("MyInventory", howManySlots()); this.gear.func_110133_a(this.getCommandSenderName()); if (gear1 != null) { gear1.func_110132_b(this); int i = Math.min(gear1.getSizeInventory(), this.gear.getSizeInventory()); for (int j = 0; j < i; ++j) { ItemStack itemstack = gear1.getStackInSlot(j); if (itemstack != null) { this.gear.setInventorySlotContents(j, itemstack.copy()); } } gear1 = null; } this.gear.func_110134_a(this); } public void onDeath(DamageSource ds) { super.onDeath(ds); if (gear != null && !this.worldObj.isRemote) { for (int i = 0; i < gear.getSizeInventory(); ++i) { ItemStack itemstack = gear.getStackInSlot(i); if (itemstack != null) { this.entityDropItem(itemstack, 0.0F); } } } } public void writeEntityToNBT(NBTTagCompound com) { NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.gear.getSizeInventory(); ++i) { ItemStack itemstack = this.gear.getStackInSlot(i); if (itemstack != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte("Slot", (byte) i); itemstack.writeToNBT(nbttagcompound1); nbttaglist.appendTag(nbttagcompound1); } com.setTag("Items", nbttaglist); } } public void readEntityFromNBT(NBTTagCompound com) { NBTTagList nbttaglist = com.getTagList("Items", 10); this.setupGear(); for (int i = 0; i < nbttaglist.tagCount(); ++i) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); int j = nbttagcompound1.getByte("Slot") & 255; if (j >= 0 && j < this.gear.getSizeInventory()) { this.gear.setInventorySlotContents(j, ItemStack.loadItemStackFromNBT(nbttagcompound1)); } } } @Override public boolean interact(EntityPlayer player) { super.interact(player); if(!player.worldObj.isRemote)player.openGui(Core.instance, 5, this.worldObj, this.getEntityId(), 0, 0); //we will use x coord for sending entityId return true; } public void onInventoryChanged(InventoryBasic inv) {} } MyInventory: public class MyInventory extends InventoryBasic { public MyInventory(String name, int slots) { super(name, false, slots); } } MyContainer: public class MyContainer extends Container { protected IInventory gear; private int player_inventory_x = 70; private int player_inventory_y = 8; private int loot_x = 8; private int loot_y = 10; public MyContainer (InventoryPlayer inventoryPlayer, IInventory c){ gear = c; { int isize = c.getSizeInventory(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 2; j++) { addSlotToContainer(new Slot(c, j + i * 2, (loot_x + j * 18), (loot_y + i * 18))); } } } bindPlayerInventory(inventoryPlayer); } public boolean canInteractWith(EntityPlayer player) { return gear.isUseableByPlayer(player); } protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 9; j++) { addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, player_inventory_x + j * 18, player_inventory_y + i * 18)); } } for (int i = 0; i < 9; i++) { addSlotToContainer(new Slot(inventoryPlayer, i, player_inventory_x + i * 18, player_inventory_y + 54 + 4)); } } public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) { ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(par2); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); int s = gear.getSizeInventory(); if (par2 < s) { if (!this.mergeItemStack(itemstack1, s, this.inventorySlots.size(), true)) { return null; } } else if (!this.mergeItemStack(itemstack1, 0, s, false)) { return null; } if (itemstack1.stackSize == 0) { slot.putStack(null); } else { slot.onSlotChanged(); } } return itemstack; } public void onContainerClosed(EntityPlayer par1EntityPlayer) { super.onContainerClosed(par1EntityPlayer); this.gear.closeInventory(); } } MyEntityGui: public class MyEntityGui extends GuiContainer { private static final ResourceLocation txtr = new ResourceLocation(your ModID in Assets:path/to/testgui.png); private int invW = 176; private int invH = 90; private int lootH = 90; private int lootW = 50; public MyEntityGui(InventoryPlayer inventoryPlayer, MyInventory inv) { super(new MyContainer(inventoryPlayer, inv)); this.xSize=300; this.ySize=90; } protected void drawGuiContainerForegroundLayer(int param1, int param2) {} protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(txtr); int x = (width - invW) / 2; int y = (height - invH) / 2; this.drawTexturedModalRect(x, y, 0, 0, invW, invH); x = (width/ 2)-150; y = (height - lootH) / 2; this.drawTexturedModalRect(x, y, 176, 0, lootW, lootH); } } GuiHandler: public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if(id==5){ Entity ent = world.getEntityByID(x); if(ent!=null && ent instanceof MyEntity){ return new MyContainer(player.inventory, ((MyEntity)ent).gear); }} return null; } @Override public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if(id==5){ Entity ent = world.getEntityByID(x); if(ent!=null && ent instanceof MyEntity){ return new MyEntityGui(player.inventory, new MyInventory("MyInventory", ((MyEntity) ent).howManySlots())); }} return null; } } And add this to your main mod class: @EventHandler public void load(FMLInitializationEvent event) { EntityRegistry.registerGlobalEntityID(MyEntity.class, "MyEntity", 151, 52, 89); //creates dark-blue egg to spawn entity EntityRegistry.registerModEntity(MyEntity.class, "MyEntity", 151, this, 64, 1, true); NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler()); } testgui.png: screens:
  10. Also you can use InventoryBasic. MyInventory.java public class MyInventory extends InventoryBasic { public MyInventory(String name, int slots) { super(name, false, slots); } } MyEntity.java public class MyEntity extends EntityLiving implements IInvBasic { public MyInventory gear; public MyEntity(World world) { super(world); //other inits setupInventory(); this.gear.setInventorySlotContents(0, new ItemStack(Items.apple)); this.gear.setInventorySlotContents(1, new ItemStack(Items.carrot)); } private void setupInventory() { MyInventory gear1 = this.gear; this.gear = new MyInventory("MyInventory", howManySlots()); this.gear.func_110133_a(this.getCommandSenderName()); if (gear1 != null) { gear1.func_110132_b(this); int i = Math.min(gear1.getSizeInventory(), this.gear.getSizeInventory()); for (int j = 0; j < i; ++j) { ItemStack itemstack = gear1.getStackInSlot(j); if (itemstack != null) { this.gear.setInventorySlotContents(j, itemstack.copy()); } } gear1 = null; } this.gear.func_110134_a(this); } public int howManySlots() { return this.getType() == 10; } public void onDeath(DamageSource ds) { super.onDeath(ds); if (gear != null && !this.worldObj.isRemote) { //drop all items for (int i = 0; i < gear.getSizeInventory(); ++i) { ItemStack itemstack = gear.getStackInSlot(i); if (itemstack != null) { this.entityDropItem(itemstack, 0.0F); } } } } public void writeEntityToNBT(NBTTagCompound com) { NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.gear.getSizeInventory(); ++i) { ItemStack itemstack = this.gear.getStackInSlot(i); if (itemstack != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte("Slot", (byte) i); itemstack.writeToNBT(nbttagcompound1); nbttaglist.appendTag(nbttagcompound1); } com.setTag("Items", nbttaglist); } } public void readEntityFromNBT(NBTTagCompound com) { NBTTagList nbttaglist = com.getTagList("Items", 10); this.setupGear(); for (int i = 0; i < nbttaglist.tagCount(); ++i) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); int j = nbttagcompound1.getByte("Slot") & 255; if (j >= 0 && j < this.gear.getSizeInventory()) { this.gear.setInventorySlotContents(j, ItemStack.loadItemStackFromNBT(nbttagcompound1)); } } } public void onInventoryChanged(InventoryBasic inv) {} //and other methods } This is entity inventory part.
  11. It's from forge changelog. Comment in NetworkCheckHandler: /** * A method annotated with this will be called when a remote network connection is offered. * The method should have two parameters, of types {@link Map<String,String>} and {@link Side}. It should return a boolean * true indicating that the remote party is acceptable, or false if not. * * <p> * When the method is invoked, the map will contain String keys and values listing all mods and their versions present. * The side represents the side of the remote party. So if you're on the server, it'll be CLIENT, and vice versa. * * <p> * This method will be invoked both when querying the status of the remote server, and when connecting to the remote server. * * <p> * <strong>NOTE: the server will not be setup at any point when this method is called. Do not try and interact with the server * or the client in any way, except to accept or reject the list of mods.</strong> * * @author cpw * */
  12. I only found this: But... I don't know how to use it.
  13. Methods can be client-side only (with @SideOnly(Side.CLIENT) annotation).
  14. In 1.7: Handler class: package yourpackage; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; import net.minecraft.util.ChatComponentText; public class PlayerLoginHandler { @SubscribeEvent public void onLogin(PlayerEvent.PlayerLoggedInEvent event){ event.player.addChatMessage(new ChatComponentText("Hello!")); } @SubscribeEvent public void onLogout(PlayerEvent.PlayerLoggedOutEvent event){ //something else } } Register event in mod class: @EventHandler public void load(FMLInitializationEvent event) { FMLCommonHandler.instance().bus().register(new PlayerLoginHandler()); }
  15. world.markBlockForUpdate(x, y, z)
  16. public void drawTexturedRect(int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight) { float f = 1F / (float)textureWidth; float f1 = 1F / (float)textureHeight; Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)(x), (double)(y + height), 0, (double)((float)(u) * f), (double)((float)(v + height) * f1)); tessellator.addVertexWithUV((double)(x + width), (double)(y + height), 0, (double)((float)(u + width) * f), (double)((float)(v + height) * f1)); tessellator.addVertexWithUV((double)(x + width), (double)(y), 0, (double)((float)(u + width) * f), (double)((float)(v) * f1)); tessellator.addVertexWithUV((double)(x), (double)(y), 0, (double)((float)(u) * f), (double)((float)(v) * f1)); tessellator.draw(); }
×
×
  • Create New...

Important Information

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