Fix tile drops issues

This commit is contained in:
Raoul Van den Berge
2016-05-09 18:28:27 +02:00
parent 91a07b09e0
commit fd252330d8
11 changed files with 109 additions and 26 deletions

View File

@@ -4,6 +4,8 @@
WIP WIP
**TODO** **TODO**
- Fix wrong quantity per craft
- Better way to do crafting upgrades
- Textures - Textures
- Update wiki - Update wiki

View File

@@ -202,12 +202,20 @@ public class RefinedStorageUtils {
return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE); return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE);
} }
public static int getSpeed(InventorySimple upgrades) { public static int getSpeed(InventorySimple inventory) {
return getSpeed(upgrades, 9, 2); return getSpeed(inventory, 9, 2, 0);
}
public static int getSpeed(InventorySimple inventory, int start) {
return getSpeed(inventory, 9, 2, start);
} }
public static int getSpeed(InventorySimple inventory, int speed, int speedIncrease) { public static int getSpeed(InventorySimple inventory, int speed, int speedIncrease) {
for (int i = 0; i < inventory.getSizeInventory(); ++i) { return getSpeed(inventory, speed, speedIncrease, 0);
}
public static int getSpeed(InventorySimple inventory, int speed, int speedIncrease, int start) {
for (int i = start; i < inventory.getSizeInventory(); ++i) {
if (inventory.getStackInSlot(i) != null && inventory.getStackInSlot(i).getMetadata() == ItemUpgrade.TYPE_SPEED) { if (inventory.getStackInSlot(i) != null && inventory.getStackInSlot(i).getMetadata() == ItemUpgrade.TYPE_SPEED) {
speed -= speedIncrease; speed -= speedIncrease;
} }
@@ -221,9 +229,13 @@ public class RefinedStorageUtils {
} }
public static int getUpgradeCount(InventorySimple inventory, int type) { public static int getUpgradeCount(InventorySimple inventory, int type) {
return getUpgradeCount(inventory, type, 0);
}
public static int getUpgradeCount(InventorySimple inventory, int type, int start) {
int upgrades = 0; int upgrades = 0;
for (int i = 0; i < inventory.getSizeInventory(); ++i) { for (int i = start; i < inventory.getSizeInventory(); ++i) {
if (inventory.getStackInSlot(i) != null && inventory.getStackInSlot(i).getMetadata() == type) { if (inventory.getStackInSlot(i) != null && inventory.getStackInSlot(i).getMetadata() == type) {
upgrades++; upgrades++;
} }

View File

@@ -14,8 +14,7 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageGui;
import refinedstorage.tile.TileDetector; import refinedstorage.tile.solderer.TileSolderer;
import refinedstorage.tile.TileSolderer;
public class BlockSolderer extends BlockMachine { public class BlockSolderer extends BlockMachine {
public static final PropertyBool WORKING = PropertyBool.create("working"); public static final PropertyBool WORKING = PropertyBool.create("working");

View File

@@ -7,7 +7,7 @@ import refinedstorage.container.slot.SlotFiltered;
import refinedstorage.container.slot.SlotOutput; import refinedstorage.container.slot.SlotOutput;
import refinedstorage.container.slot.UpgradeItemValidator; import refinedstorage.container.slot.UpgradeItemValidator;
import refinedstorage.item.ItemUpgrade; import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.TileSolderer; import refinedstorage.tile.solderer.TileSolderer;
public class ContainerSolderer extends ContainerBase { public class ContainerSolderer extends ContainerBase {
public ContainerSolderer(EntityPlayer player, TileSolderer solderer) { public ContainerSolderer(EntityPlayer player, TileSolderer solderer) {
@@ -25,7 +25,7 @@ public class ContainerSolderer extends ContainerBase {
addSlotToContainer(new SlotOutput(solderer, 3, 134, 38)); addSlotToContainer(new SlotOutput(solderer, 3, 134, 38));
for (int i = 0; i < 4; ++i) { for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotFiltered(solderer.getUpgradesInventory(), i, 187, 6 + (i * 18), new UpgradeItemValidator(ItemUpgrade.TYPE_SPEED))); addSlotToContainer(new SlotFiltered(solderer, 4 + i, 187, 6 + (i * 18), new UpgradeItemValidator(ItemUpgrade.TYPE_SPEED)));
} }
addPlayerInventory(8, 95); addPlayerInventory(8, 95);

View File

@@ -16,6 +16,7 @@ import refinedstorage.tile.autocrafting.TileCraftingMonitor;
import refinedstorage.tile.autocrafting.TileProcessingPatternEncoder; import refinedstorage.tile.autocrafting.TileProcessingPatternEncoder;
import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.TileGrid;
import refinedstorage.tile.grid.WirelessGrid; import refinedstorage.tile.grid.WirelessGrid;
import refinedstorage.tile.solderer.TileSolderer;
public class GuiHandler implements IGuiHandler { public class GuiHandler implements IGuiHandler {
private Container getContainer(int ID, EntityPlayer player, TileEntity tile) { private Container getContainer(int ID, EntityPlayer player, TileEntity tile) {

View File

@@ -2,7 +2,7 @@ package refinedstorage.gui;
import refinedstorage.container.ContainerSolderer; import refinedstorage.container.ContainerSolderer;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.TileSolderer; import refinedstorage.tile.solderer.TileSolderer;
public class GuiSolderer extends GuiBase { public class GuiSolderer extends GuiBase {
private TileSolderer solderer; private TileSolderer solderer;

View File

@@ -0,0 +1,47 @@
package refinedstorage.tile;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.tile.autocrafting.CraftingPattern;
public class CraftingTaskScheduler {
public static String NBT_SCHEDULED = "CraftingTaskScheduled";
private ItemStack scheduledFor;
public boolean canSchedule(int compare, ItemStack item) {
// We can only reschedule if:
// - we didn't schedule anything before
// - the item we can't to schedule is another item
return scheduledFor == null || !RefinedStorageUtils.compareStack(scheduledFor, item, compare);
}
public void schedule(TileController controller, int compare, ItemStack item) {
CraftingPattern pattern = controller.getPattern(item, compare);
if (pattern != null) {
scheduledFor = item;
controller.addCraftingTask(pattern);
}
}
public void resetSchedule() {
this.scheduledFor = null;
}
public void writeToNBT(NBTTagCompound tag) {
if (scheduledFor != null) {
tag.setTag(NBT_SCHEDULED, scheduledFor.serializeNBT());
} else {
tag.removeTag(NBT_SCHEDULED);
}
}
public void readFromNBT(NBTTagCompound tag) {
if (tag.hasKey(NBT_SCHEDULED)) {
scheduledFor = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(NBT_SCHEDULED));
}
}
}

View File

@@ -14,7 +14,6 @@ import refinedstorage.RefinedStorageUtils;
import refinedstorage.container.ContainerConstructor; import refinedstorage.container.ContainerConstructor;
import refinedstorage.inventory.InventorySimple; import refinedstorage.inventory.InventorySimple;
import refinedstorage.item.ItemUpgrade; import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.ICompareConfig;
public class TileConstructor extends TileMachine implements ICompareConfig { public class TileConstructor extends TileMachine implements ICompareConfig {
@@ -27,6 +26,8 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
private int compare = 0; private int compare = 0;
private CraftingTaskScheduler scheduler = new CraftingTaskScheduler();
@Override @Override
public int getEnergyUsage() { public int getEnergyUsage() {
return 1; return 1;
@@ -43,15 +44,16 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
ItemStack took = controller.take(inventory.getStackInSlot(0).copy(), compare); ItemStack took = controller.take(inventory.getStackInSlot(0).copy(), compare);
if (took != null) { if (took != null) {
scheduler.resetSchedule();
worldObj.setBlockState(front, block.getStateFromMeta(took.getItemDamage()), 1 | 2); worldObj.setBlockState(front, block.getStateFromMeta(took.getItemDamage()), 1 | 2);
// From ItemBlock.onItemUse // From ItemBlock.onItemUse
SoundType blockSound = block.getStepSound(); SoundType blockSound = block.getStepSound();
worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F); worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F);
} else if (RefinedStorageUtils.hasUpgrade(upgradesInventory, ItemUpgrade.TYPE_CRAFTING)) { } else if (RefinedStorageUtils.hasUpgrade(upgradesInventory, ItemUpgrade.TYPE_CRAFTING)) {
CraftingPattern pattern = controller.getPattern(inventory.getStackInSlot(0), compare); ItemStack toCraft = inventory.getStackInSlot(0);
if (pattern != null && !controller.hasCraftingTask(pattern, compare)) { if (scheduler.canSchedule(compare, toCraft)) {
controller.addCraftingTask(pattern); scheduler.schedule(controller, compare, toCraft);
} }
} }
} }
@@ -80,6 +82,8 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
RefinedStorageUtils.restoreInventory(inventory, 0, nbt); RefinedStorageUtils.restoreInventory(inventory, 0, nbt);
RefinedStorageUtils.restoreInventory(upgradesInventory, 1, nbt); RefinedStorageUtils.restoreInventory(upgradesInventory, 1, nbt);
scheduler.readFromNBT(nbt);
} }
@Override @Override
@@ -90,6 +94,8 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
RefinedStorageUtils.saveInventory(inventory, 0, nbt); RefinedStorageUtils.saveInventory(inventory, 0, nbt);
RefinedStorageUtils.saveInventory(upgradesInventory, 1, nbt); RefinedStorageUtils.saveInventory(upgradesInventory, 1, nbt);
scheduler.writeToNBT(nbt);
} }
@Override @Override
@@ -115,6 +121,11 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
return upgradesInventory; return upgradesInventory;
} }
@Override
public IInventory getDroppedInventory() {
return upgradesInventory;
}
public IInventory getInventory() { public IInventory getInventory() {
return inventory; return inventory;
} }

View File

@@ -147,6 +147,11 @@ public class TileDestructor extends TileMachine implements ICompareConfig, IMode
return upgradesInventory; return upgradesInventory;
} }
@Override
public IInventory getDroppedInventory() {
return upgradesInventory;
}
public IInventory getInventory() { public IInventory getInventory() {
return inventory; return inventory;
} }

View File

@@ -277,6 +277,20 @@ public class TileInterface extends TileMachine implements ICompareConfig, ISided
@Override @Override
public IInventory getDroppedInventory() { public IInventory getDroppedInventory() {
return upgradesInventory; InventorySimple dummy = new InventorySimple(null, 9 + 9 + 4);
for (int i = 0; i < 9; ++i) {
dummy.setInventorySlotContents(i, inventory.getStackInSlot(i));
}
for (int i = 0; i < 9; ++i) {
dummy.setInventorySlotContents(9 + i, inventory.getStackInSlot(18 + i));
}
for (int i = 0; i < 4; ++i) {
dummy.setInventorySlotContents(18 + i, upgradesInventory.getStackInSlot(i));
}
return dummy;
} }
} }

View File

@@ -1,4 +1,4 @@
package refinedstorage.tile; package refinedstorage.tile.solderer;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
@@ -13,8 +13,7 @@ import refinedstorage.RefinedStorageUtils;
import refinedstorage.container.ContainerSolderer; import refinedstorage.container.ContainerSolderer;
import refinedstorage.inventory.InventorySimple; import refinedstorage.inventory.InventorySimple;
import refinedstorage.item.ItemUpgrade; import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.solderer.ISoldererRecipe; import refinedstorage.tile.TileMachine;
import refinedstorage.tile.solderer.SoldererRegistry;
public class TileSolderer extends TileMachine implements IInventory, ISidedInventory { public class TileSolderer extends TileMachine implements IInventory, ISidedInventory {
public static final String NBT_WORKING = "Working"; public static final String NBT_WORKING = "Working";
@@ -27,8 +26,7 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
3 3
}; };
private InventorySimple inventory = new InventorySimple("solderer", 4, this); private InventorySimple inventory = new InventorySimple("solderer", 4 + 4, this);
private InventorySimple upgradesInventory = new InventorySimple("upgrades", 4, this);
private ISoldererRecipe recipe; private ISoldererRecipe recipe;
@@ -58,7 +56,7 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
markDirty(); markDirty();
} }
} else if (working) { } else if (working) {
progress += 1 + RefinedStorageUtils.getUpgradeCount(upgradesInventory, ItemUpgrade.TYPE_SPEED); progress += 1 + RefinedStorageUtils.getUpgradeCount(inventory, ItemUpgrade.TYPE_SPEED, 4);
if (progress >= recipe.getDuration()) { if (progress >= recipe.getDuration()) {
if (inventory.getStackInSlot(3) != null) { if (inventory.getStackInSlot(3) != null) {
@@ -98,7 +96,6 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
super.readFromNBT(nbt); super.readFromNBT(nbt);
RefinedStorageUtils.restoreInventory(this, 0, nbt); RefinedStorageUtils.restoreInventory(this, 0, nbt);
RefinedStorageUtils.restoreInventory(upgradesInventory, 1, nbt);
recipe = SoldererRegistry.getRecipe(inventory); recipe = SoldererRegistry.getRecipe(inventory);
@@ -116,7 +113,6 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
super.writeToNBT(nbt); super.writeToNBT(nbt);
RefinedStorageUtils.saveInventory(this, 0, nbt); RefinedStorageUtils.saveInventory(this, 0, nbt);
RefinedStorageUtils.saveInventory(upgradesInventory, 1, nbt);
nbt.setBoolean(NBT_WORKING, working); nbt.setBoolean(NBT_WORKING, working);
nbt.setInteger(NBT_PROGRESS, progress); nbt.setInteger(NBT_PROGRESS, progress);
@@ -278,8 +274,4 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
public boolean canExtractItem(int slot, ItemStack stack, EnumFacing direction) { public boolean canExtractItem(int slot, ItemStack stack, EnumFacing direction) {
return slot == 3; return slot == 3;
} }
public InventorySimple getUpgradesInventory() {
return upgradesInventory;
}
} }