fix detectors.. NEXT!
This commit is contained in:
@@ -34,12 +34,14 @@ public class BlockDetector extends BlockBase implements ITileEntityProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int side) {
|
public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int side) {
|
||||||
return ((TileDetector) world.getTileEntity(x, y, z)).providesPower() ? 15 : 0;
|
return isProvidingStrongPower(world, x, y, z, side);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int isProvidingStrongPower(IBlockAccess world, int x, int y, int z, int side) {
|
public int isProvidingStrongPower(IBlockAccess world, int x, int y, int z, int side) {
|
||||||
return ((TileDetector) world.getTileEntity(x, y, z)).providesPower() ? 15 : 0;
|
TileDetector detector = (TileDetector) world.getTileEntity(x, y, z);
|
||||||
|
|
||||||
|
return detector.providesPower() ? 15 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -6,8 +6,7 @@ import storagecraft.StorageCraft;
|
|||||||
import storagecraft.container.ContainerDetector;
|
import storagecraft.container.ContainerDetector;
|
||||||
import storagecraft.gui.sidebutton.SideButtonCompare;
|
import storagecraft.gui.sidebutton.SideButtonCompare;
|
||||||
import storagecraft.gui.sidebutton.SideButtonDetectorMode;
|
import storagecraft.gui.sidebutton.SideButtonDetectorMode;
|
||||||
import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
|
import storagecraft.network.MessageDetectorAmountUpdate;
|
||||||
import storagecraft.network.MessageDetectorModeUpdate;
|
|
||||||
import storagecraft.tile.TileDetector;
|
import storagecraft.tile.TileDetector;
|
||||||
import storagecraft.util.InventoryUtils;
|
import storagecraft.util.InventoryUtils;
|
||||||
|
|
||||||
@@ -24,8 +23,6 @@ public class GuiDetector extends GuiBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(int x, int y) {
|
public void init(int x, int y) {
|
||||||
addSideButton(new SideButtonRedstoneMode(detector));
|
|
||||||
|
|
||||||
addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_DAMAGE));
|
addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_DAMAGE));
|
||||||
addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_NBT));
|
addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_NBT));
|
||||||
|
|
||||||
@@ -65,7 +62,7 @@ public class GuiDetector extends GuiBase {
|
|||||||
Integer result = Ints.tryParse(amountField.getText());
|
Integer result = Ints.tryParse(amountField.getText());
|
||||||
|
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
StorageCraft.NETWORK.sendToServer(new MessageDetectorModeUpdate(detector, result));
|
StorageCraft.NETWORK.sendToServer(new MessageDetectorAmountUpdate(detector, result));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
super.keyTyped(character, keyCode);
|
super.keyTyped(character, keyCode);
|
||||||
|
@@ -30,6 +30,6 @@ public class SideButtonDetectorMode extends SideButton {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed() {
|
public void actionPerformed() {
|
||||||
StorageCraft.NETWORK.sendToServer(new MessageDetectorModeUpdate(detector, detector.getAmount()));
|
StorageCraft.NETWORK.sendToServer(new MessageDetectorModeUpdate(detector));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,55 @@
|
|||||||
|
package storagecraft.network;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||||
|
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||||
|
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import storagecraft.tile.TileDetector;
|
||||||
|
|
||||||
|
public class MessageDetectorAmountUpdate implements IMessage, IMessageHandler<MessageDetectorAmountUpdate, IMessage> {
|
||||||
|
private int x;
|
||||||
|
private int y;
|
||||||
|
private int z;
|
||||||
|
private int amount;
|
||||||
|
|
||||||
|
public MessageDetectorAmountUpdate() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageDetectorAmountUpdate(TileDetector detector, int amount) {
|
||||||
|
this.x = detector.xCoord;
|
||||||
|
this.y = detector.yCoord;
|
||||||
|
this.z = detector.zCoord;
|
||||||
|
this.amount = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fromBytes(ByteBuf buf) {
|
||||||
|
x = buf.readInt();
|
||||||
|
y = buf.readInt();
|
||||||
|
z = buf.readInt();
|
||||||
|
amount = buf.readInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void toBytes(ByteBuf buf) {
|
||||||
|
buf.writeInt(x);
|
||||||
|
buf.writeInt(y);
|
||||||
|
buf.writeInt(z);
|
||||||
|
buf.writeInt(amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IMessage onMessage(MessageDetectorAmountUpdate message, MessageContext context) {
|
||||||
|
EntityPlayerMP player = context.getServerHandler().playerEntity;
|
||||||
|
|
||||||
|
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
|
||||||
|
|
||||||
|
if (tile instanceof TileDetector && message.amount >= 0) {
|
||||||
|
((TileDetector) tile).setAmount(message.amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@@ -12,16 +12,14 @@ public class MessageDetectorModeUpdate implements IMessage, IMessageHandler<Mess
|
|||||||
private int x;
|
private int x;
|
||||||
private int y;
|
private int y;
|
||||||
private int z;
|
private int z;
|
||||||
private int amount;
|
|
||||||
|
|
||||||
public MessageDetectorModeUpdate() {
|
public MessageDetectorModeUpdate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageDetectorModeUpdate(TileDetector detector, int amount) {
|
public MessageDetectorModeUpdate(TileDetector detector) {
|
||||||
this.x = detector.xCoord;
|
this.x = detector.xCoord;
|
||||||
this.y = detector.yCoord;
|
this.y = detector.yCoord;
|
||||||
this.z = detector.zCoord;
|
this.z = detector.zCoord;
|
||||||
this.amount = amount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -29,7 +27,6 @@ public class MessageDetectorModeUpdate implements IMessage, IMessageHandler<Mess
|
|||||||
x = buf.readInt();
|
x = buf.readInt();
|
||||||
y = buf.readInt();
|
y = buf.readInt();
|
||||||
z = buf.readInt();
|
z = buf.readInt();
|
||||||
amount = buf.readInt();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -37,7 +34,6 @@ public class MessageDetectorModeUpdate implements IMessage, IMessageHandler<Mess
|
|||||||
buf.writeInt(x);
|
buf.writeInt(x);
|
||||||
buf.writeInt(y);
|
buf.writeInt(y);
|
||||||
buf.writeInt(z);
|
buf.writeInt(z);
|
||||||
buf.writeInt(amount);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -60,10 +56,6 @@ public class MessageDetectorModeUpdate implements IMessage, IMessageHandler<Mess
|
|||||||
detector.setMode(TileDetector.MODE_UNDER);
|
detector.setMode(TileDetector.MODE_UNDER);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.amount >= 0) {
|
|
||||||
detector.setAmount(message.amount);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@@ -12,6 +12,7 @@ import storagecraft.StorageCraftItems;
|
|||||||
import storagecraft.gui.GuiHandler;
|
import storagecraft.gui.GuiHandler;
|
||||||
import storagecraft.item.ItemBlockCable;
|
import storagecraft.item.ItemBlockCable;
|
||||||
import storagecraft.network.MessageCompareUpdate;
|
import storagecraft.network.MessageCompareUpdate;
|
||||||
|
import storagecraft.network.MessageDetectorAmountUpdate;
|
||||||
import storagecraft.network.MessageDetectorModeUpdate;
|
import storagecraft.network.MessageDetectorModeUpdate;
|
||||||
import storagecraft.network.MessageImporterModeUpdate;
|
import storagecraft.network.MessageImporterModeUpdate;
|
||||||
import storagecraft.network.MessageRedstoneModeUpdate;
|
import storagecraft.network.MessageRedstoneModeUpdate;
|
||||||
@@ -36,6 +37,7 @@ public class CommonProxy {
|
|||||||
StorageCraft.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, 4, Side.SERVER);
|
StorageCraft.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, 4, Side.SERVER);
|
||||||
StorageCraft.NETWORK.registerMessage(MessageImporterModeUpdate.class, MessageImporterModeUpdate.class, 5, Side.SERVER);
|
StorageCraft.NETWORK.registerMessage(MessageImporterModeUpdate.class, MessageImporterModeUpdate.class, 5, Side.SERVER);
|
||||||
StorageCraft.NETWORK.registerMessage(MessageDetectorModeUpdate.class, MessageDetectorModeUpdate.class, 6, Side.SERVER);
|
StorageCraft.NETWORK.registerMessage(MessageDetectorModeUpdate.class, MessageDetectorModeUpdate.class, 6, Side.SERVER);
|
||||||
|
StorageCraft.NETWORK.registerMessage(MessageDetectorAmountUpdate.class, MessageDetectorAmountUpdate.class, 7, Side.SERVER);
|
||||||
|
|
||||||
NetworkRegistry.INSTANCE.registerGuiHandler(StorageCraft.INSTANCE, new GuiHandler());
|
NetworkRegistry.INSTANCE.registerGuiHandler(StorageCraft.INSTANCE, new GuiHandler());
|
||||||
|
|
||||||
|
@@ -6,6 +6,7 @@ import net.minecraft.inventory.IInventory;
|
|||||||
import net.minecraft.inventory.ISidedInventory;
|
import net.minecraft.inventory.ISidedInventory;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import storagecraft.StorageCraftBlocks;
|
||||||
import storagecraft.inventory.InventorySimple;
|
import storagecraft.inventory.InventorySimple;
|
||||||
import storagecraft.storage.StorageItem;
|
import storagecraft.storage.StorageItem;
|
||||||
import storagecraft.util.InventoryUtils;
|
import storagecraft.util.InventoryUtils;
|
||||||
@@ -27,6 +28,10 @@ public class TileDetector extends TileMachine implements IInventory, ISidedInven
|
|||||||
|
|
||||||
private boolean providesPower = false;
|
private boolean providesPower = false;
|
||||||
|
|
||||||
|
public TileDetector() {
|
||||||
|
this.redstoneControlled = false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getEnergyUsage() {
|
public int getEnergyUsage() {
|
||||||
return 4;
|
return 4;
|
||||||
@@ -37,6 +42,8 @@ public class TileDetector extends TileMachine implements IInventory, ISidedInven
|
|||||||
if (ticks % 5 == 0) {
|
if (ticks % 5 == 0) {
|
||||||
ItemStack slot = inventory.getStackInSlot(0);
|
ItemStack slot = inventory.getStackInSlot(0);
|
||||||
|
|
||||||
|
boolean lastProvidesPower = providesPower;
|
||||||
|
|
||||||
if (slot != null) {
|
if (slot != null) {
|
||||||
boolean foundAny = false;
|
boolean foundAny = false;
|
||||||
|
|
||||||
@@ -55,25 +62,28 @@ public class TileDetector extends TileMachine implements IInventory, ISidedInven
|
|||||||
providesPower = item.getQuantity() > amount;
|
providesPower = item.getQuantity() > amount;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!foundAny) {
|
if (!foundAny) {
|
||||||
switch (mode) {
|
if (mode == MODE_UNDER && amount != 0) {
|
||||||
case MODE_UNDER:
|
providesPower = true;
|
||||||
providesPower = amount != 0;
|
} else if (mode == MODE_EQUAL && amount == 0) {
|
||||||
break;
|
providesPower = true;
|
||||||
case MODE_EQUAL:
|
} else {
|
||||||
providesPower = amount == 0;
|
providesPower = false;
|
||||||
break;
|
|
||||||
default:
|
|
||||||
providesPower = false;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
providesPower = false;
|
providesPower = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (providesPower != lastProvidesPower) {
|
||||||
|
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
||||||
|
worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, StorageCraftBlocks.DETECTOR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -5,8 +5,9 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||||||
|
|
||||||
public abstract class TileMachine extends TileBase implements INetworkTile, IRedstoneModeSetting {
|
public abstract class TileMachine extends TileBase implements INetworkTile, IRedstoneModeSetting {
|
||||||
protected boolean connected = false;
|
protected boolean connected = false;
|
||||||
|
protected boolean redstoneControlled = true;
|
||||||
|
|
||||||
private RedstoneMode redstoneMode = RedstoneMode.LOW;
|
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
|
||||||
|
|
||||||
private int xController;
|
private int xController;
|
||||||
private int yController;
|
private int yController;
|
||||||
@@ -48,7 +49,9 @@ public abstract class TileMachine extends TileBase implements INetworkTile, IRed
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRedstoneMode(RedstoneMode mode) {
|
public void setRedstoneMode(RedstoneMode mode) {
|
||||||
this.redstoneMode = mode;
|
if (redstoneControlled) {
|
||||||
|
this.redstoneMode = mode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user