Jeerdus
Members-
Posts
104 -
Joined
-
Last visited
Everything posted by Jeerdus
-
I've done the packet part now, but it still isn't updating the slots. I've committed and pushed my code on GitHub if you want to take a look at it.
-
I've putted the code into the detectAndSendChanges method. Here's the code: public void detectAndSendChanges() { super.detectAndSendChanges(); if(tileentity.upgradeScreenOpened && !this.upgradeScreen){ this.upgradeScreen = true; reloadSlots(); System.out.println("Sent"); } else if(!tileentity.upgradeScreenOpened && this.upgradeScreen){ this.upgradeScreen = false; reloadSlots(); System.out.println("Sent"); } System.out.println("Detected; "+ this.upgradeScreen + "; " + tileentity.upgradeScreenOpened); } But I found out that it doesn't detect when the tileentity.upgradeScreenOpened boolean changes. It always says in the console that it's "false". Am I doing something wrong?
-
I know that I'm not calling it. I tried some ways calling it, but most of them failed. I just don't know where and how to call it, so it works properly.
-
OK, I've done it. It's with ForgeGradle now. Just use the same link as before.
-
Oh, OK. I'll definitely install the ForgeGradle. I just didn't know that it was build .964. Thanks!
-
I don't think I can use ForgeGradle with 1.6.4. But I can give you the instructions: Assets are basically textures, so all you have to do is to copy the "cyborg53373_elementum" folder inside the "assets" folder into your "src/minecraft/assets" folder. The "elementum" folder is the code, you put that whole folder into "src/minecraft" folder. And that's pretty much it.
-
OK, I've putted it on GitHub, but I don't know if I did it right. Here's the link: https://github.com/Jeerdus/Elementum/
-
I did, but I couldn't find anything useful, think I'll try once more then.
-
I've never worked with GitHub. How does one set it properly up? Isn't there a tutorial or something?
-
I can't make it work! I tried 3 other ways and all they did was either the same as before, make them appear after you reopen the machine, or it didn't work at all!
-
I can't seem to be able to receive the packet. I am sending it, but it isn't receiving. Container: package elementum; import java.util.ArrayList; import java.util.List; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.tileentity.TileEntityFurnace; public class ContainerChargingStation extends Container { private TileEntityChargingStation tileentity; private int chargingBurnTime; private int lastItemBurnTime; private int curAmount; public ContainerChargingStation(InventoryPlayer inventoryplayer, TileEntityChargingStation tileentityInputFurnace) { chargingBurnTime = 0; lastItemBurnTime = 0; curAmount = 0; tileentity = tileentityInputFurnace; this.addSlotToContainer(new Slot(tileentityInputFurnace, 0, 98, 34)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 1, 8, 62)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 2, 179, 5)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 3, 179, 23)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 4, 179, 41)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 5, 179, 59)); for (int i = 0; i < 3; i++) { for (int k = 0; k < 9; k++) { this.addSlotToContainer(new Slot(inventoryplayer, k + i * 9 + 9, 8 + k * 18, 84 + i * 18)); } } for (int j = 0; j < 9; j++) { this.addSlotToContainer(new Slot(inventoryplayer, j, 8 + j * 18, 142)); } reloadSlots(); } public void reloadSlots() { if(tileentity.upgradeScreenOpened){ ((Slot)inventorySlots.get(2)).xDisplayPosition = 179; ((Slot)inventorySlots.get(3)).xDisplayPosition = 179; ((Slot)inventorySlots.get(4)).xDisplayPosition = 179; ((Slot)inventorySlots.get(5)).xDisplayPosition = 179; System.out.println("TRUE"); } else if(!tileentity.upgradeScreenOpened){ ((Slot)inventorySlots.get(2)).xDisplayPosition = Integer.MIN_VALUE; ((Slot)inventorySlots.get(3)).xDisplayPosition = Integer.MIN_VALUE; ((Slot)inventorySlots.get(4)).xDisplayPosition = Integer.MIN_VALUE; ((Slot)inventorySlots.get(5)).xDisplayPosition = Integer.MIN_VALUE; System.out.println("FALSE"); } } public void receiveButtonEvent(byte buttonID){ if(buttonID == 0){ reloadSlots(); System.out.println("Recieved"); } } public void addCraftingToCrafters(ICrafting par1ICrafting) { super.addCraftingToCrafters(par1ICrafting); par1ICrafting.sendProgressBarUpdate(this, 0, this.tileentity.chargingBurnTime); par1ICrafting.sendProgressBarUpdate(this, 1, this.tileentity.currentItemBurnTime); par1ICrafting.sendProgressBarUpdate(this, 2, this.tileentity.currentAmount); } public void detectAndSendChanges() { super.detectAndSendChanges(); for (int var1 = 0; var1 < this.crafters.size(); ++var1) { ICrafting var2 = (ICrafting)this.crafters.get(var1); if (this.chargingBurnTime != this.tileentity.chargingBurnTime) { var2.sendProgressBarUpdate(this, 0, this.tileentity.chargingBurnTime); } if (this.lastItemBurnTime != this.tileentity.currentItemBurnTime) { var2.sendProgressBarUpdate(this, 1, this.tileentity.currentItemBurnTime); } if (this.curAmount != this.tileentity.currentAmount) { var2.sendProgressBarUpdate(this, 2, this.tileentity.currentAmount); } } this.chargingBurnTime = this.tileentity.chargingBurnTime; this.lastItemBurnTime = this.tileentity.currentItemBurnTime; this.curAmount = this.tileentity.currentAmount; } public void updateProgressBar(int i, int j) { if (i == 0) { tileentity.chargingBurnTime = j; } if (i == 1) { tileentity.currentItemBurnTime = j; } if (i == 2) { tileentity.currentAmount = j; } } public ItemStack transferStackInSlot(EntityPlayer player, int slotNum) { ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(slotNum); if(slot != null && slot.getHasStack()){ ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if(slotNum == 0 || slotNum == 1 || slotNum == 2 || slotNum == 3 || slotNum == 4 || slotNum == 5){ if(!this.mergeItemStack(itemstack1, 6, 42, true)) { return null; } slot.onSlotChange(itemstack1, itemstack); } else if(slotNum != 1 && slotNum != 0){ if(TileEntityChargingStation.isItemFuel(itemstack1)){ if (!this.mergeItemStack(itemstack1, 1, 2, false)){ return null; } } else if(TileEntityChargingStation.isChargable(itemstack1)){ if (!this.mergeItemStack(itemstack1, 0, 1, false)){ return null; } } else if(slotNum >= 6 && slotNum < 33){ if(!this.mergeItemStack(itemstack1, 33, 42, false)){ return null; } } else if(slotNum >= 33 && slotNum > 42 && !this.mergeItemStack(itemstack1, 33, 42, false)){ if(!this.mergeItemStack(itemstack1, 6, 33, false)){ return null; } } } else if(!this.mergeItemStack(itemstack1, 6, 33, false)){ return null; } if(itemstack1.stackSize == 0){ slot.putStack((ItemStack)null); } else{ slot.onSlotChanged(); } if(itemstack1.stackSize == itemstack.stackSize){ return null; } slot.onPickupFromSlot(player, itemstack1); } return itemstack; } public boolean canInteractWith(EntityPlayer entityplayer) { return tileentity.isUseableByPlayer(entityplayer); } public TileEntityChargingStation getMachine() { return tileentity; } } GUI: package elementum; import java.util.ArrayList; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; import org.lwjgl.opengl.GL11; public class GuiChargingStation extends GuiContainer { private ResourceLocation chargingStationTexture = new ResourceLocation("cyborg53373_elementum","textures/gui/chargingStationGUI.png"); private TileEntityChargingStation machine; private int xSize2; public GuiChargingStation(InventoryPlayer inventoryplayer, TileEntityChargingStation tileentityChargingStation) { super(new ContainerChargingStation(inventoryplayer, tileentityChargingStation)); machine = tileentityChargingStation; xSize = 203; xSize2 = xSize - 27; } protected void drawGuiContainerForegroundLayer(int x, int y) { fontRenderer.drawString(StatCollector.translateToLocal("Coal Charging Station"), 34, 3, 0x404040); //fontRenderer.drawString(StatCollector.translateToLocal("Inventory"), 8, (ySize - 96) + 2, 0x404040); ArrayList<String> text01 = new ArrayList<String>(); text01.add(String.valueOf(machine.currentAmount) + "/" + String.valueOf(machine.maxAmount)); ArrayList<String> text02 = new ArrayList<String>(); text02.add("Click to show upgrade slots"); ArrayList<String> text03 = new ArrayList<String>(); text03.add("Click to hide upgrade slots"); int x1 = x - guiLeft; int y1 = y - guiTop; if(x1 >= 61 && x1 <= 77 && y1 >= 16 && y1 <= 68){ drawHoveringText(text01, x - guiLeft, y - guiTop, fontRenderer); } if(x1 >= xSize2 - 15 && x1 <= xSize2 - 7 && y1 >= 7 && y1 <= 15){ if(!machine.upgradeScreenOpened){ drawHoveringText(text02, x - guiLeft, y - guiTop, fontRenderer); } else if(machine.upgradeScreenOpened){ drawHoveringText(text03, x - guiLeft, y - guiTop, fontRenderer); } } } protected void drawGuiContainerBackgroundLayer(float f, int x, int y) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); //mc.renderEngine.bindTexture(tif); Minecraft.getMinecraft().getTextureManager().bindTexture(chargingStationTexture); int l = (width - xSize) / 2; int i1 = (height - ySize) / 2; drawTexturedModalRect(l, i1, 0, 0, xSize2, ySize); if (machine.isBurning()) { int j1 = machine.getBurnTimeRemainingScaled(12); drawTexturedModalRect(l + 9, (i1 + 45 + 12) - j1, 176, 12 - j1, 14, j1 + 2); } int k1 = machine.getCookProgressScaled(52); drawTexturedModalRect(l + 61, i1 + 16, 176, 14, 44, 51 - k1); int srcX = 27; int srcY = 177; int butX = l + xSize2 - 15; int butY = i1 + 7; int butW = 8; int butH = 8; if(butX <= x && x <= butX + butW && butY <= y && y <= butY + butH){ srcY += 8; } if(machine.upgradeScreenOpened){ drawTexturedModalRect(butX, butY, srcX, srcY + 16, butW, butH); drawTexturedModalRect(l + xSize2 - 3, i1, 0, 174, 27, 82); } else if(!machine.upgradeScreenOpened){ drawTexturedModalRect(butX, butY, srcX, srcY, butW, butH); } } protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); int l = (width - xSize) / 2; int i1 = (height - ySize) / 2; if(l + xSize2 - 15 <= x && x <= l + xSize2 - 7 && i1 + 7 <= y && y <= i1 + 15 && !machine.upgradeScreenOpened){ machine.upgradeScreenOpened = true; this.mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); PacketHandler.sendButtonPacket((byte)0); System.out.println("Sent"); } else if(l + xSize2 - 15 <= x && x <= l + xSize2 - 7 && i1 + 7 <= y && y <= i1 + 15 && machine.upgradeScreenOpened){ machine.upgradeScreenOpened = false; this.mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); PacketHandler.sendButtonPacket((byte)0); System.out.println("Sent"); } } public void onGuiClosed() { super.onGuiClosed(); //machine.upgradeScreenOpened = false; } } PacketHandler: package elementum; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet250CustomPayload; import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteStreams; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.common.network.PacketDispatcher; import cpw.mods.fml.common.network.Player; import elementum.ModInfo; public class PacketHandler implements IPacketHandler { @Override public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) { ByteArrayDataInput reader = ByteStreams.newDataInput(packet.data); EntityPlayer entityPlayer = (EntityPlayer)player; byte packetId = reader.readByte(); switch (packetId) { case 0: int entityId = reader.readInt(); Entity entity = entityPlayer.worldObj.getEntityByID(entityId); break; case 1: byte buttonId = reader.readByte(); Container container = entityPlayer.openContainer; if (container != null && container instanceof ContainerChargingStation) { ((ContainerChargingStation) container).receiveButtonEvent(buttonId); } break; } } public static void sendButtonPacket(byte id) { ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); DataOutputStream dataStream = new DataOutputStream(byteStream); try { dataStream.writeByte((byte)1); dataStream.writeByte(id); PacketDispatcher.sendPacketToServer(PacketDispatcher.getPacket(ModInfo.CHANNEL, byteStream.toByteArray())); }catch(IOException ex) { System.err.append("Failed to send button click packet"); } } }
-
Where can I get or how can I create the onButtonClick method? Basically now I just need to call my other method which will move the slots.
-
Sorry, I couldn't reply until now. My container code is: package elementum; import java.util.ArrayList; import java.util.List; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.tileentity.TileEntityFurnace; public class ContainerChargingStation extends Container { private TileEntityChargingStation tileentity; private int chargingBurnTime; private int lastItemBurnTime; private int curAmount; public ContainerChargingStation(InventoryPlayer inventoryplayer, TileEntityChargingStation tileentityInputFurnace) { chargingBurnTime = 0; lastItemBurnTime = 0; curAmount = 0; tileentity = tileentityInputFurnace; this.addSlotToContainer(new Slot(tileentityInputFurnace, 0, 98, 34)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 1, 8, 62)); for (int i = 0; i < 3; i++) { for (int k = 0; k < 9; k++) { this.addSlotToContainer(new Slot(inventoryplayer, k + i * 9 + 9, 8 + k * 18, 84 + i * 18)); } } for (int j = 0; j < 9; j++) { this.addSlotToContainer(new Slot(inventoryplayer, j, 8 + j * 18, 142)); } if(tileentity.upgradeScreenOpened){ this.addSlotToContainer(new Slot(tileentityInputFurnace, 2, 179, 5)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 3, 179, 23)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 4, 179, 41)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 5, 179, 59)); } else { this.addSlotToContainer(new Slot(tileentityInputFurnace, 2, Integer.MIN_VALUE, Integer.MIN_VALUE)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 3, Integer.MIN_VALUE, Integer.MIN_VALUE)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 4, Integer.MIN_VALUE, Integer.MIN_VALUE)); this.addSlotToContainer(new Slot(tileentityInputFurnace, 5, Integer.MIN_VALUE, Integer.MIN_VALUE)); } } public void addCraftingToCrafters(ICrafting par1ICrafting) { super.addCraftingToCrafters(par1ICrafting); par1ICrafting.sendProgressBarUpdate(this, 0, this.tileentity.chargingBurnTime); par1ICrafting.sendProgressBarUpdate(this, 1, this.tileentity.currentItemBurnTime); par1ICrafting.sendProgressBarUpdate(this, 2, this.tileentity.currentAmount); } public void detectAndSendChanges() { super.detectAndSendChanges(); for (int var1 = 0; var1 < this.crafters.size(); ++var1) { ICrafting var2 = (ICrafting)this.crafters.get(var1); if (this.chargingBurnTime != this.tileentity.chargingBurnTime) { var2.sendProgressBarUpdate(this, 0, this.tileentity.chargingBurnTime); } if (this.lastItemBurnTime != this.tileentity.currentItemBurnTime) { var2.sendProgressBarUpdate(this, 1, this.tileentity.currentItemBurnTime); } if (this.curAmount != this.tileentity.currentAmount) { var2.sendProgressBarUpdate(this, 2, this.tileentity.currentAmount); } } this.chargingBurnTime = this.tileentity.chargingBurnTime; this.lastItemBurnTime = this.tileentity.currentItemBurnTime; this.curAmount = this.tileentity.currentAmount; } public void updateProgressBar(int i, int j) { if (i == 0) { tileentity.chargingBurnTime = j; } if (i == 1) { tileentity.currentItemBurnTime = j; } if (i == 2) { tileentity.currentAmount = j; } } public ItemStack transferStackInSlot(EntityPlayer player, int slotNum) { ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(slotNum); if(slot != null && slot.getHasStack()){ ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if(slotNum == 0 || slotNum == 1 || slotNum == 2 || slotNum == 3 || slotNum == 4 || slotNum == 5){ if(!this.mergeItemStack(itemstack1, 6, 42, true)) { return null; } slot.onSlotChange(itemstack1, itemstack); } else if(slotNum != 1 && slotNum != 0){ if(TileEntityChargingStation.isItemFuel(itemstack1)){ if (!this.mergeItemStack(itemstack1, 1, 2, false)){ return null; } } else if(TileEntityChargingStation.isChargable(itemstack1)){ if (!this.mergeItemStack(itemstack1, 0, 1, false)){ return null; } } else if(slotNum >= 6 && slotNum < 33){ if(!this.mergeItemStack(itemstack1, 33, 42, false)){ return null; } } else if(slotNum >= 33 && slotNum > 42 && !this.mergeItemStack(itemstack1, 33, 42, false)){ if(!this.mergeItemStack(itemstack1, 6, 33, false)){ return null; } } } else if(!this.mergeItemStack(itemstack1, 6, 33, false)){ return null; } if(itemstack1.stackSize == 0){ slot.putStack((ItemStack)null); } else{ slot.onSlotChanged(); } if(itemstack1.stackSize == itemstack.stackSize){ return null; } slot.onPickupFromSlot(player, itemstack1); } return itemstack; } public boolean canInteractWith(EntityPlayer entityplayer) { return tileentity.isUseableByPlayer(entityplayer); } } If you would need any other file just say.
-
Thanks for your help! I've just found that it isn't updating, I have to close and open the machine for it to update. Can I ask if there isn't a way for it to update?
-
Good day! I am working on a mod, which contains a machine in which there's a button which extends the GUI with few more slots. I made the GUI part, but now I'm struggling with the container slots. I don't know how to make them appear nor disappear. I got an idea that I could somehow move them from like x: -1000 and y: -1000 to the correct slot, but my code didn't work. (I used simple if statement) Could you please suggest me some ways of doing it? Thanks!
-
I don't quite understand the function. Could you please explain it to me?
-
How can I change icon of an item based on it's damage value?
-
Is there a way to "extend" tile entities that are already in the game? For example the anvil tile entity.
-
setNoRepair(); is for the 2 tools in crafting table repair. I've also tried getIsRepairable(ItemStack i1, ItemStack i2), but that doesn't seem to work.
-
Ok, thanks! I'll definitely try that!
-
Good day, I am working on a battery item for my mod and it uses data values for the amounts of energy it is currently holding, but the biggest problem comes when I put 2 batteries into the anvil. The damage value adds the second damage value and plus bit more. Example: If I put a battery with 1200 energy into the first slot and into the second slot the same battery with the same amount of energy, the outcome isn't 2400 as I would expect, but it is 3600. That means that it "generated" additional power. Is there a way to make it, so the outcome is 2400 or even better to completely disable the anvil recipe?
-
Good day, I made a block which connects to each other when they are next to each other. It isn't 1m3, but the standard block bounds are: (0.25F, 0.25F, 0.25F, 0.75F, 0.75F, 0.75F) Now when I place 2 of them, they connect nicely, but when I place 3 of them in a L shape. The middle one turns into: (0.25F, 0.25F, 0.25F, 1.0F, 1.0F, 0.75F) How would I make it look like pipes from BC or cables from IC. Does anyone know?
-
[Solved] How can I make custom furnace recipes require 2 items to smelt
Jeerdus replied to Jeerdus's topic in Modder Support
Fixed it! I don't need help anymore! But thanks for the help anyway. -
[Solved] How can I make custom furnace recipes require 2 items to smelt
Jeerdus replied to Jeerdus's topic in Modder Support
Quick update: Somehow made it to work, now I'm trying to do, if the cell slot stack size is smaller then 2, don't do the recipe.