Fix tile drops issues
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
WIP
|
||||
|
||||
**TODO**
|
||||
- Fix wrong quantity per craft
|
||||
- Better way to do crafting upgrades
|
||||
- Textures
|
||||
- Update wiki
|
||||
|
||||
|
||||
@@ -202,12 +202,20 @@ public class RefinedStorageUtils {
|
||||
return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE);
|
||||
}
|
||||
|
||||
public static int getSpeed(InventorySimple upgrades) {
|
||||
return getSpeed(upgrades, 9, 2);
|
||||
public static int getSpeed(InventorySimple inventory) {
|
||||
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) {
|
||||
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) {
|
||||
speed -= speedIncrease;
|
||||
}
|
||||
@@ -221,9 +229,13 @@ public class RefinedStorageUtils {
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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) {
|
||||
upgrades++;
|
||||
}
|
||||
|
||||
@@ -14,8 +14,7 @@ import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import refinedstorage.RefinedStorage;
|
||||
import refinedstorage.RefinedStorageGui;
|
||||
import refinedstorage.tile.TileDetector;
|
||||
import refinedstorage.tile.TileSolderer;
|
||||
import refinedstorage.tile.solderer.TileSolderer;
|
||||
|
||||
public class BlockSolderer extends BlockMachine {
|
||||
public static final PropertyBool WORKING = PropertyBool.create("working");
|
||||
|
||||
@@ -7,7 +7,7 @@ import refinedstorage.container.slot.SlotFiltered;
|
||||
import refinedstorage.container.slot.SlotOutput;
|
||||
import refinedstorage.container.slot.UpgradeItemValidator;
|
||||
import refinedstorage.item.ItemUpgrade;
|
||||
import refinedstorage.tile.TileSolderer;
|
||||
import refinedstorage.tile.solderer.TileSolderer;
|
||||
|
||||
public class ContainerSolderer extends ContainerBase {
|
||||
public ContainerSolderer(EntityPlayer player, TileSolderer solderer) {
|
||||
@@ -25,7 +25,7 @@ public class ContainerSolderer extends ContainerBase {
|
||||
addSlotToContainer(new SlotOutput(solderer, 3, 134, 38));
|
||||
|
||||
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);
|
||||
|
||||
@@ -16,6 +16,7 @@ import refinedstorage.tile.autocrafting.TileCraftingMonitor;
|
||||
import refinedstorage.tile.autocrafting.TileProcessingPatternEncoder;
|
||||
import refinedstorage.tile.grid.TileGrid;
|
||||
import refinedstorage.tile.grid.WirelessGrid;
|
||||
import refinedstorage.tile.solderer.TileSolderer;
|
||||
|
||||
public class GuiHandler implements IGuiHandler {
|
||||
private Container getContainer(int ID, EntityPlayer player, TileEntity tile) {
|
||||
|
||||
@@ -2,7 +2,7 @@ package refinedstorage.gui;
|
||||
|
||||
import refinedstorage.container.ContainerSolderer;
|
||||
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import refinedstorage.tile.TileSolderer;
|
||||
import refinedstorage.tile.solderer.TileSolderer;
|
||||
|
||||
public class GuiSolderer extends GuiBase {
|
||||
private TileSolderer solderer;
|
||||
|
||||
47
src/main/java/refinedstorage/tile/CraftingTaskScheduler.java
Executable file
47
src/main/java/refinedstorage/tile/CraftingTaskScheduler.java
Executable 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,6 @@ import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.container.ContainerConstructor;
|
||||
import refinedstorage.inventory.InventorySimple;
|
||||
import refinedstorage.item.ItemUpgrade;
|
||||
import refinedstorage.tile.autocrafting.CraftingPattern;
|
||||
import refinedstorage.tile.config.ICompareConfig;
|
||||
|
||||
public class TileConstructor extends TileMachine implements ICompareConfig {
|
||||
@@ -27,6 +26,8 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
|
||||
|
||||
private int compare = 0;
|
||||
|
||||
private CraftingTaskScheduler scheduler = new CraftingTaskScheduler();
|
||||
|
||||
@Override
|
||||
public int getEnergyUsage() {
|
||||
return 1;
|
||||
@@ -43,15 +44,16 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
|
||||
ItemStack took = controller.take(inventory.getStackInSlot(0).copy(), compare);
|
||||
|
||||
if (took != null) {
|
||||
scheduler.resetSchedule();
|
||||
worldObj.setBlockState(front, block.getStateFromMeta(took.getItemDamage()), 1 | 2);
|
||||
// From ItemBlock.onItemUse
|
||||
SoundType blockSound = block.getStepSound();
|
||||
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)) {
|
||||
CraftingPattern pattern = controller.getPattern(inventory.getStackInSlot(0), compare);
|
||||
ItemStack toCraft = inventory.getStackInSlot(0);
|
||||
|
||||
if (pattern != null && !controller.hasCraftingTask(pattern, compare)) {
|
||||
controller.addCraftingTask(pattern);
|
||||
if (scheduler.canSchedule(compare, toCraft)) {
|
||||
scheduler.schedule(controller, compare, toCraft);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,6 +82,8 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
|
||||
|
||||
RefinedStorageUtils.restoreInventory(inventory, 0, nbt);
|
||||
RefinedStorageUtils.restoreInventory(upgradesInventory, 1, nbt);
|
||||
|
||||
scheduler.readFromNBT(nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -90,6 +94,8 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
|
||||
|
||||
RefinedStorageUtils.saveInventory(inventory, 0, nbt);
|
||||
RefinedStorageUtils.saveInventory(upgradesInventory, 1, nbt);
|
||||
|
||||
scheduler.writeToNBT(nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -115,6 +121,11 @@ public class TileConstructor extends TileMachine implements ICompareConfig {
|
||||
return upgradesInventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IInventory getDroppedInventory() {
|
||||
return upgradesInventory;
|
||||
}
|
||||
|
||||
public IInventory getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
@@ -147,6 +147,11 @@ public class TileDestructor extends TileMachine implements ICompareConfig, IMode
|
||||
return upgradesInventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IInventory getDroppedInventory() {
|
||||
return upgradesInventory;
|
||||
}
|
||||
|
||||
public IInventory getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
@@ -277,6 +277,20 @@ public class TileInterface extends TileMachine implements ICompareConfig, ISided
|
||||
|
||||
@Override
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package refinedstorage.tile;
|
||||
package refinedstorage.tile.solderer;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@@ -13,8 +13,7 @@ import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.container.ContainerSolderer;
|
||||
import refinedstorage.inventory.InventorySimple;
|
||||
import refinedstorage.item.ItemUpgrade;
|
||||
import refinedstorage.tile.solderer.ISoldererRecipe;
|
||||
import refinedstorage.tile.solderer.SoldererRegistry;
|
||||
import refinedstorage.tile.TileMachine;
|
||||
|
||||
public class TileSolderer extends TileMachine implements IInventory, ISidedInventory {
|
||||
public static final String NBT_WORKING = "Working";
|
||||
@@ -27,8 +26,7 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
|
||||
3
|
||||
};
|
||||
|
||||
private InventorySimple inventory = new InventorySimple("solderer", 4, this);
|
||||
private InventorySimple upgradesInventory = new InventorySimple("upgrades", 4, this);
|
||||
private InventorySimple inventory = new InventorySimple("solderer", 4 + 4, this);
|
||||
|
||||
private ISoldererRecipe recipe;
|
||||
|
||||
@@ -58,7 +56,7 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
|
||||
markDirty();
|
||||
}
|
||||
} 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 (inventory.getStackInSlot(3) != null) {
|
||||
@@ -98,7 +96,6 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
RefinedStorageUtils.restoreInventory(this, 0, nbt);
|
||||
RefinedStorageUtils.restoreInventory(upgradesInventory, 1, nbt);
|
||||
|
||||
recipe = SoldererRegistry.getRecipe(inventory);
|
||||
|
||||
@@ -116,7 +113,6 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
|
||||
super.writeToNBT(nbt);
|
||||
|
||||
RefinedStorageUtils.saveInventory(this, 0, nbt);
|
||||
RefinedStorageUtils.saveInventory(upgradesInventory, 1, nbt);
|
||||
|
||||
nbt.setBoolean(NBT_WORKING, working);
|
||||
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) {
|
||||
return slot == 3;
|
||||
}
|
||||
|
||||
public InventorySimple getUpgradesInventory() {
|
||||
return upgradesInventory;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user