-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding container and gui for infinite emitter
- Loading branch information
Showing
3 changed files
with
315 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
150 changes: 150 additions & 0 deletions
150
src/main/java/particlephysics/tileentity/infiniteemitter/InfiniteEmitterContainer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
package particlephysics.tileentity.infiniteemitter; | ||
|
||
import particlephysics.tileentity.emitter.*; | ||
import net.minecraft.entity.player.EntityPlayer; | ||
import net.minecraft.entity.player.InventoryPlayer; | ||
import net.minecraft.inventory.ICrafting; | ||
import net.minecraft.inventory.Slot; | ||
import net.minecraft.item.ItemStack; | ||
import cpw.mods.fml.relauncher.Side; | ||
import cpw.mods.fml.relauncher.SideOnly; | ||
|
||
public class InfiniteEmitterContainer extends EmitterContainer | ||
{ | ||
|
||
private EmitterTileEntity machine; | ||
|
||
public InfiniteEmitterContainer(InventoryPlayer invPlayer, InfiniteEmitterTileEntity machine) | ||
{ | ||
super(invPlayer, machine); | ||
this.machine = machine; | ||
|
||
|
||
// Player inventory hotbar slots | ||
for (int x = 0; x < 9; x++) | ||
{ | ||
addSlotToContainer(new Slot(invPlayer, x, 8 + 18 * x, 64 + 130)); | ||
} | ||
// Player non-hotbar inventory | ||
for (int y = 0; y < 3; y++) | ||
{ | ||
for (int x = 0; x < 9; x++) | ||
{ | ||
addSlotToContainer(new Slot(invPlayer, x + y * 9 + 9, 8 + 18 * x, 64 + 72 + y * 18)); | ||
} | ||
} | ||
|
||
// Add active fuel slot | ||
addSlotToContainer(new EmitterFuelSlot(machine, 0, 8, 73)); | ||
|
||
} | ||
|
||
public EmitterTileEntity getMachine() | ||
{ | ||
return this.machine; | ||
} | ||
|
||
@Override | ||
public boolean canInteractWith(EntityPlayer entityplayer) | ||
{ | ||
return machine.isUseableByPlayer(entityplayer); | ||
} | ||
|
||
@Override | ||
public ItemStack transferStackInSlot(EntityPlayer player, int i) | ||
{ | ||
Slot slot = getSlot(i); | ||
|
||
if (slot != null && slot.getHasStack()) | ||
{ | ||
ItemStack stack = slot.getStack(); | ||
|
||
if (i >= 36) | ||
{ | ||
if (!mergeItemStack(stack, 0, 36, false)) | ||
{ | ||
return null; | ||
} | ||
} else if (machine.isValidFuel(stack.itemID) || !mergeItemStack(stack, 36, 36 + machine.getSizeInventory(), false)) | ||
{ | ||
return null; | ||
} | ||
|
||
if (stack.stackSize == 0) | ||
{ | ||
slot.putStack(null); | ||
} else | ||
{ | ||
slot.onSlotChanged(); | ||
} | ||
|
||
slot.onPickupFromSlot(player, stack); | ||
|
||
} | ||
return null; | ||
} | ||
|
||
@Override | ||
public void addCraftingToCrafters(ICrafting player) | ||
{ | ||
super.addCraftingToCrafters(player); | ||
|
||
player.sendProgressBarUpdate(this, 0, machine.fuelStored); | ||
player.sendProgressBarUpdate(this, 1, machine.fuelType); | ||
player.sendProgressBarUpdate(this, 2, machine.fuelMeta); | ||
player.sendProgressBarUpdate(this, 3, machine.interval); | ||
} | ||
|
||
@Override | ||
@SideOnly(Side.CLIENT) | ||
public void updateProgressBar(int id, int data) | ||
{ | ||
if (id == 0) | ||
{ | ||
machine.fuelStored = data; | ||
} | ||
if (id == 1) | ||
{ | ||
machine.fuelType = data; | ||
} | ||
if (id == 2) | ||
{ | ||
machine.fuelMeta = data; | ||
} | ||
if (id == 3) | ||
{ | ||
machine.interval = data; | ||
} | ||
} | ||
|
||
private int oldFuelStored; | ||
private int oldFuelType; | ||
private int oldFuelMeta; | ||
|
||
@Override | ||
public void detectAndSendChanges() | ||
{ | ||
super.detectAndSendChanges(); | ||
for (Object player : crafters) | ||
{ | ||
|
||
if (oldFuelStored != machine.fuelStored) | ||
{ | ||
((ICrafting) player).sendProgressBarUpdate(this, 0, machine.fuelStored); | ||
} | ||
if (oldFuelType != machine.fuelType) | ||
{ | ||
((ICrafting) player).sendProgressBarUpdate(this, 1, machine.fuelType); | ||
} | ||
if (oldFuelMeta != machine.fuelMeta) | ||
{ | ||
((ICrafting) player).sendProgressBarUpdate(this, 2, machine.fuelMeta); | ||
} | ||
|
||
} | ||
this.oldFuelMeta = machine.fuelMeta; | ||
this.oldFuelStored = machine.fuelStored; | ||
this.oldFuelType = machine.fuelType; | ||
} | ||
|
||
} |
149 changes: 149 additions & 0 deletions
149
src/main/java/particlephysics/tileentity/infiniteemitter/InfiniteEmitterGUI.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
package particlephysics.tileentity.infiniteemitter; | ||
|
||
import particlephysics.tileentity.emitter.*; | ||
|
||
import net.minecraft.client.Minecraft; | ||
import net.minecraft.entity.player.InventoryPlayer; | ||
import particlephysics.entity.particle.TemplateParticle; | ||
|
||
public class InfiniteEmitterGUI extends EmitterGUI | ||
{ | ||
private final InfiniteEmitterTileEntity tile; | ||
|
||
public InfiniteEmitterGUI(InventoryPlayer invPlayer, InfiniteEmitterTileEntity tile) | ||
{ | ||
super(invPlayer, tile); | ||
this.tile = tile; | ||
|
||
xSize = 176; | ||
ySize = 218; | ||
|
||
this.syncGUIElements(); | ||
|
||
} | ||
|
||
@Override | ||
protected void drawGuiContainerBackgroundLayer(float f, int x, int y) | ||
{ | ||
Minecraft.getMinecraft().getTextureManager().bindTexture(texture); | ||
|
||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); | ||
|
||
if (tile.intervalReset > 0 && tile.fuelStored != 0) | ||
{ | ||
intervalPercent = (int) (((float) tile.intervalReset / (float) ((tile.interval + 1) * 20)) * 200); | ||
progressBar = (int) ((float) intervalPercent * 0.7F); | ||
if (intervalPercent <= 100) | ||
{ | ||
burstOffset = 0; | ||
|
||
if (progressBar <= 7) | ||
{ | ||
progressVertical = progressBar; | ||
progressHorizontal = 0; | ||
} else | ||
{ | ||
progressVertical = 7; | ||
progressHorizontal = progressBar - 6; | ||
} | ||
|
||
} else if (intervalPercent >= 100 && intervalPercent <= 200) | ||
{ | ||
burstOffset = (int) (((float) tile.intervalReset / (float) ((tile.interval + 1) * 20)) * 20) - 11; | ||
} else | ||
{ | ||
// a safety net for | ||
// verifying sanity | ||
// never should be called | ||
burstOffset = 0; | ||
} | ||
|
||
} | ||
|
||
// draw the burst | ||
if (intervalPercent >= 0 && intervalPercent <= 200 && tile.fuelStored != 0) | ||
{ | ||
// particle progress bar | ||
drawTexturedModalRect(guiLeft + 42, guiTop + 38 - progressVertical, 211, 20 - progressVertical, 5, progressVertical); | ||
drawTexturedModalRect(guiLeft + 42, guiTop + 27, 191, 0, progressHorizontal + 1, 10); | ||
|
||
if (intervalPercent >= 100) | ||
{ | ||
if (intervalPercent <= 113) | ||
{ | ||
guiParticle = (int) ((float) (intervalPercent - 100)); | ||
if (tile.interval <= 1) | ||
{ | ||
// adjust for 0 and 1 interval | ||
guiParticle = guiParticle + 3; | ||
} | ||
} | ||
// draw "particle" in GUI | ||
drawTexturedModalRect(guiLeft + 105 + guiParticle, guiTop + 31, 254, 4, 2, 2); | ||
|
||
// draw "burst" pattern | ||
drawTexturedModalRect(guiLeft + 118 - burstOffset, guiTop + 31 - burstOffset, 200 - burstOffset, 22 - burstOffset, 2 + burstOffset * 2, 2 + burstOffset * 2); | ||
} | ||
} | ||
|
||
if (tile.fuelStored > 0) | ||
{ | ||
int offset = (tile.fuelStored / 2); | ||
// draw the fuel meter | ||
drawTexturedModalRect(guiLeft + 37, guiTop + 89 - offset, 176, 50 - offset, 15, 0 + offset); | ||
} | ||
|
||
if (tile.fuelStored <= 1) | ||
{ | ||
if (oldTick != tile.worldObj.getWorldTime()) | ||
{ | ||
oldTick = tile.worldObj.getWorldTime(); | ||
tickCounter++; | ||
if (tickCounter >= 10 + (20 * tile.interval) * 2) | ||
{ | ||
if (fuelLoadVertical <= 13) | ||
{ | ||
fuelLoadVertical++; | ||
} else if (fuelLoadhorizontal <= 18) | ||
{ | ||
fuelLoadhorizontal++; | ||
} | ||
} | ||
} | ||
if (tile.inventory[0] != null) | ||
{ | ||
drawTexturedModalRect(guiLeft + 10, guiTop + 70 - fuelLoadVertical, 191, 47 - fuelLoadVertical, 13, fuelLoadVertical); | ||
drawTexturedModalRect(guiLeft + 17, guiTop + 53, 225, 13, fuelLoadhorizontal, 8); | ||
} | ||
} else | ||
{ | ||
fuelLoadVertical = 0; | ||
fuelLoadhorizontal = 0; | ||
tickCounter = 0; | ||
} | ||
|
||
if (!this.isDragging) | ||
{ | ||
this.tempHeightSetting = tile.interval; | ||
} | ||
|
||
bar.draw(this, 0, 218); | ||
this.updateSliderPosition(); | ||
slider.draw(this, 0, 224); | ||
|
||
fontRenderer.drawString((this.tempHeightSetting + 1) + " Seconds", guiLeft + 48, guiTop + 4, 0x404040); | ||
fontRenderer.drawString("Queue", guiLeft + 85, guiTop + 101, 0x404040); | ||
|
||
if (tile.getStackInSlot(0) != null) | ||
{ | ||
TemplateParticle particle = tile.getParticleFromFuel(tile.getStackInSlot(0).itemID, tile.getStackInSlot(0).getItemDamage()); | ||
if (particle != null) | ||
{ | ||
// Display particle type | ||
fontRenderer.drawString(particle.getName(), guiLeft + 115, guiTop + 46, 0x404040); | ||
fontRenderer.drawString("Type:", guiLeft + 89, guiTop + 46, 0x404040); | ||
} | ||
} | ||
|
||
} | ||
} |