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

View File

@@ -6,8 +6,7 @@ import storagecraft.StorageCraft;
import storagecraft.container.ContainerDetector;
import storagecraft.gui.sidebutton.SideButtonCompare;
import storagecraft.gui.sidebutton.SideButtonDetectorMode;
import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
import storagecraft.network.MessageDetectorModeUpdate;
import storagecraft.network.MessageDetectorAmountUpdate;
import storagecraft.tile.TileDetector;
import storagecraft.util.InventoryUtils;
@@ -24,8 +23,6 @@ public class GuiDetector extends GuiBase {
@Override
public void init(int x, int y) {
addSideButton(new SideButtonRedstoneMode(detector));
addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_DAMAGE));
addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_NBT));
@@ -65,7 +62,7 @@ public class GuiDetector extends GuiBase {
Integer result = Ints.tryParse(amountField.getText());
if (result != null) {
StorageCraft.NETWORK.sendToServer(new MessageDetectorModeUpdate(detector, result));
StorageCraft.NETWORK.sendToServer(new MessageDetectorAmountUpdate(detector, result));
}
} else {
super.keyTyped(character, keyCode);

View File

@@ -30,6 +30,6 @@ public class SideButtonDetectorMode extends SideButton {
@Override
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 y;
private int z;
private int amount;
public MessageDetectorModeUpdate() {
}
public MessageDetectorModeUpdate(TileDetector detector, int amount) {
public MessageDetectorModeUpdate(TileDetector detector) {
this.x = detector.xCoord;
this.y = detector.yCoord;
this.z = detector.zCoord;
this.amount = amount;
}
@Override
@@ -29,7 +27,6 @@ public class MessageDetectorModeUpdate implements IMessage, IMessageHandler<Mess
x = buf.readInt();
y = buf.readInt();
z = buf.readInt();
amount = buf.readInt();
}
@Override
@@ -37,7 +34,6 @@ public class MessageDetectorModeUpdate implements IMessage, IMessageHandler<Mess
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
buf.writeInt(amount);
}
@Override
@@ -60,10 +56,6 @@ public class MessageDetectorModeUpdate implements IMessage, IMessageHandler<Mess
detector.setMode(TileDetector.MODE_UNDER);
break;
}
if (message.amount >= 0) {
detector.setAmount(message.amount);
}
}
return null;

View File

@@ -12,6 +12,7 @@ import storagecraft.StorageCraftItems;
import storagecraft.gui.GuiHandler;
import storagecraft.item.ItemBlockCable;
import storagecraft.network.MessageCompareUpdate;
import storagecraft.network.MessageDetectorAmountUpdate;
import storagecraft.network.MessageDetectorModeUpdate;
import storagecraft.network.MessageImporterModeUpdate;
import storagecraft.network.MessageRedstoneModeUpdate;
@@ -36,6 +37,7 @@ public class CommonProxy {
StorageCraft.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, 4, 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(MessageDetectorAmountUpdate.class, MessageDetectorAmountUpdate.class, 7, Side.SERVER);
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.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import storagecraft.StorageCraftBlocks;
import storagecraft.inventory.InventorySimple;
import storagecraft.storage.StorageItem;
import storagecraft.util.InventoryUtils;
@@ -27,6 +28,10 @@ public class TileDetector extends TileMachine implements IInventory, ISidedInven
private boolean providesPower = false;
public TileDetector() {
this.redstoneControlled = false;
}
@Override
public int getEnergyUsage() {
return 4;
@@ -37,6 +42,8 @@ public class TileDetector extends TileMachine implements IInventory, ISidedInven
if (ticks % 5 == 0) {
ItemStack slot = inventory.getStackInSlot(0);
boolean lastProvidesPower = providesPower;
if (slot != null) {
boolean foundAny = false;
@@ -55,25 +62,28 @@ public class TileDetector extends TileMachine implements IInventory, ISidedInven
providesPower = item.getQuantity() > amount;
break;
}
break;
}
}
if (!foundAny) {
switch (mode) {
case MODE_UNDER:
providesPower = amount != 0;
break;
case MODE_EQUAL:
providesPower = amount == 0;
break;
default:
if (mode == MODE_UNDER && amount != 0) {
providesPower = true;
} else if (mode == MODE_EQUAL && amount == 0) {
providesPower = true;
} else {
providesPower = false;
break;
}
}
} else {
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 {
protected boolean connected = false;
protected boolean redstoneControlled = true;
private RedstoneMode redstoneMode = RedstoneMode.LOW;
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private int xController;
private int yController;
@@ -48,8 +49,10 @@ public abstract class TileMachine extends TileBase implements INetworkTile, IRed
@Override
public void setRedstoneMode(RedstoneMode mode) {
if (redstoneControlled) {
this.redstoneMode = mode;
}
}
@Override
public int getX() {