fix detectors.. NEXT!

This commit is contained in:
Raoul Van den Berge
2015-12-21 20:38:33 +01:00
parent a1a014d0c5
commit 81ee8cf7af
8 changed files with 90 additions and 29 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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));
} }
} }

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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());

View File

@@ -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);
}
} }
} }

View File

@@ -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