Fix tile drops issues
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
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.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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user