mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-01-07 07:50:27 +00:00
Merge pull request #158 from SquidDev-CC/feature/require-container
Require the player to be interacting with the computer when typing
This commit is contained in:
commit
27ef182294
@ -20,6 +20,7 @@ import dan200.computercraft.shared.network.ComputerCraftPacket;
|
|||||||
import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive;
|
import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive;
|
||||||
import dan200.computercraft.shared.peripheral.monitor.TileMonitor;
|
import dan200.computercraft.shared.peripheral.monitor.TileMonitor;
|
||||||
import dan200.computercraft.shared.peripheral.printer.TilePrinter;
|
import dan200.computercraft.shared.peripheral.printer.TilePrinter;
|
||||||
|
import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer;
|
||||||
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
||||||
import dan200.computercraft.shared.proxy.ComputerCraftProxyCommon;
|
import dan200.computercraft.shared.proxy.ComputerCraftProxyCommon;
|
||||||
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
||||||
@ -325,7 +326,7 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon
|
|||||||
@Override
|
@Override
|
||||||
public Object getPocketComputerGUI( EntityPlayer player, EnumHand hand )
|
public Object getPocketComputerGUI( EntityPlayer player, EnumHand hand )
|
||||||
{
|
{
|
||||||
ContainerHeldItem container = new ContainerHeldItem( player, hand );
|
ContainerPocketComputer container = new ContainerPocketComputer( player, hand );
|
||||||
if( container.getStack() != null && container.getStack().getItem() instanceof ItemPocketComputer )
|
if( container.getStack() != null && container.getStack().getItem() instanceof ItemPocketComputer )
|
||||||
{
|
{
|
||||||
return new GuiPocketComputer( container );
|
return new GuiPocketComputer( container );
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
package dan200.computercraft.shared.computer.core;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance of {@link net.minecraft.inventory.Container} which provides a computer. You should implement this
|
||||||
|
* if you provide custom computers/GUIs to interact with them.
|
||||||
|
*/
|
||||||
|
public interface IContainerComputer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the computer you are interacting with.
|
||||||
|
*
|
||||||
|
* This will only be called on the server.
|
||||||
|
*
|
||||||
|
* @return The computer you are interacting with.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
IComputer getComputer();
|
||||||
|
}
|
@ -20,6 +20,7 @@ import dan200.computercraft.shared.network.ComputerCraftPacket;
|
|||||||
import dan200.computercraft.shared.network.INetworkedThing;
|
import dan200.computercraft.shared.network.INetworkedThing;
|
||||||
import dan200.computercraft.shared.util.NBTUtil;
|
import dan200.computercraft.shared.util.NBTUtil;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.inventory.Container;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
@ -351,6 +352,17 @@ public class ServerComputer extends ServerTerminal
|
|||||||
@Override
|
@Override
|
||||||
public void handlePacket( ComputerCraftPacket packet, EntityPlayer sender )
|
public void handlePacket( ComputerCraftPacket packet, EntityPlayer sender )
|
||||||
{
|
{
|
||||||
|
// Allow Computer/Tile updates as they may happen at any time.
|
||||||
|
if (packet.requiresContainer()) {
|
||||||
|
if (sender == null) return;
|
||||||
|
|
||||||
|
Container container = sender.openContainer;
|
||||||
|
if (!(container instanceof IContainerComputer)) return;
|
||||||
|
|
||||||
|
IComputer computer = ((IContainerComputer) container).getComputer();
|
||||||
|
if (computer != this) return;
|
||||||
|
}
|
||||||
|
|
||||||
// Receive packets sent from the client to the server
|
// Receive packets sent from the client to the server
|
||||||
switch( packet.m_packetType )
|
switch( packet.m_packetType )
|
||||||
{
|
{
|
||||||
|
@ -7,10 +7,15 @@
|
|||||||
package dan200.computercraft.shared.computer.inventory;
|
package dan200.computercraft.shared.computer.inventory;
|
||||||
|
|
||||||
import dan200.computercraft.shared.computer.blocks.TileComputer;
|
import dan200.computercraft.shared.computer.blocks.TileComputer;
|
||||||
|
import dan200.computercraft.shared.computer.core.IComputer;
|
||||||
|
import dan200.computercraft.shared.computer.core.IContainerComputer;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Container;
|
import net.minecraft.inventory.Container;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class ContainerComputer extends Container
|
public class ContainerComputer extends Container
|
||||||
|
implements IContainerComputer
|
||||||
{
|
{
|
||||||
private TileComputer m_computer;
|
private TileComputer m_computer;
|
||||||
|
|
||||||
@ -24,4 +29,11 @@ public class ContainerComputer extends Container
|
|||||||
{
|
{
|
||||||
return m_computer.isUseableByPlayer( player );
|
return m_computer.isUseableByPlayer( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public IComputer getComputer()
|
||||||
|
{
|
||||||
|
return m_computer.getServerComputer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -224,4 +224,12 @@ public class ComputerCraftPacket
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether this packet requires the player to be interacting with the
|
||||||
|
* target.
|
||||||
|
*/
|
||||||
|
public boolean requiresContainer() {
|
||||||
|
return m_packetType != RequestComputerUpdate && m_packetType != RequestTileEntityUpdate;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
package dan200.computercraft.shared.pocket.inventory;
|
||||||
|
|
||||||
|
import dan200.computercraft.shared.computer.core.IComputer;
|
||||||
|
import dan200.computercraft.shared.computer.core.IContainerComputer;
|
||||||
|
import dan200.computercraft.shared.media.inventory.ContainerHeldItem;
|
||||||
|
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.EnumHand;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
public class ContainerPocketComputer extends ContainerHeldItem
|
||||||
|
implements IContainerComputer
|
||||||
|
{
|
||||||
|
public ContainerPocketComputer( EntityPlayer player, EnumHand hand )
|
||||||
|
{
|
||||||
|
super( player, hand );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public IComputer getComputer()
|
||||||
|
{
|
||||||
|
ItemStack stack = getStack();
|
||||||
|
if( stack != null && stack.getItem() instanceof ItemPocketComputer )
|
||||||
|
{
|
||||||
|
return ((ItemPocketComputer) stack.getItem()).getServerComputer( stack );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -279,6 +279,16 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia
|
|||||||
return computer;
|
return computer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ServerComputer getServerComputer( ItemStack stack )
|
||||||
|
{
|
||||||
|
int instanceID = getInstanceID( stack );
|
||||||
|
if( instanceID >= 0 )
|
||||||
|
{
|
||||||
|
return ComputerCraft.serverComputerRegistry.get( instanceID );
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public ClientComputer createClientComputer( ItemStack stack )
|
public ClientComputer createClientComputer( ItemStack stack )
|
||||||
{
|
{
|
||||||
int instanceID = getInstanceID( stack );
|
int instanceID = getInstanceID( stack );
|
||||||
|
@ -42,6 +42,7 @@ import dan200.computercraft.shared.peripheral.modem.TileWirelessModem;
|
|||||||
import dan200.computercraft.shared.peripheral.monitor.TileMonitor;
|
import dan200.computercraft.shared.peripheral.monitor.TileMonitor;
|
||||||
import dan200.computercraft.shared.peripheral.printer.ContainerPrinter;
|
import dan200.computercraft.shared.peripheral.printer.ContainerPrinter;
|
||||||
import dan200.computercraft.shared.peripheral.printer.TilePrinter;
|
import dan200.computercraft.shared.peripheral.printer.TilePrinter;
|
||||||
|
import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer;
|
||||||
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
||||||
import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory;
|
import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory;
|
||||||
import dan200.computercraft.shared.pocket.recipes.PocketComputerUpgradeRecipe;
|
import dan200.computercraft.shared.pocket.recipes.PocketComputerUpgradeRecipe;
|
||||||
@ -541,7 +542,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
|
|||||||
if (tile != null && tile instanceof TileTurtle)
|
if (tile != null && tile instanceof TileTurtle)
|
||||||
{
|
{
|
||||||
TileTurtle turtle = (TileTurtle) tile;
|
TileTurtle turtle = (TileTurtle) tile;
|
||||||
return new ContainerTurtle( player.inventory, turtle.getAccess() );
|
return new ContainerTurtle( player.inventory, turtle.getAccess(), turtle.getServerComputer() );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -551,7 +552,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
|
|||||||
}
|
}
|
||||||
case ComputerCraft.pocketComputerGUIID:
|
case ComputerCraft.pocketComputerGUIID:
|
||||||
{
|
{
|
||||||
return new ContainerHeldItem( player, x == 0 ? EnumHand.MAIN_HAND : EnumHand.OFF_HAND );
|
return new ContainerPocketComputer( player, x == 0 ? EnumHand.MAIN_HAND : EnumHand.OFF_HAND );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
package dan200.computercraft.shared.turtle.inventory;
|
package dan200.computercraft.shared.turtle.inventory;
|
||||||
|
|
||||||
import dan200.computercraft.api.turtle.ITurtleAccess;
|
import dan200.computercraft.api.turtle.ITurtleAccess;
|
||||||
|
import dan200.computercraft.shared.computer.core.IComputer;
|
||||||
|
import dan200.computercraft.shared.computer.core.IContainerComputer;
|
||||||
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
||||||
import dan200.computercraft.shared.turtle.core.TurtleBrain;
|
import dan200.computercraft.shared.turtle.core.TurtleBrain;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
@ -16,7 +18,10 @@ import net.minecraft.inventory.IInventory;
|
|||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class ContainerTurtle extends Container
|
public class ContainerTurtle extends Container
|
||||||
|
implements IContainerComputer
|
||||||
{
|
{
|
||||||
private static final int PROGRESS_ID_SELECTED_SLOT = 0;
|
private static final int PROGRESS_ID_SELECTED_SLOT = 0;
|
||||||
|
|
||||||
@ -24,6 +29,7 @@ public class ContainerTurtle extends Container
|
|||||||
public final int m_turtleInvStartX;
|
public final int m_turtleInvStartX;
|
||||||
|
|
||||||
protected ITurtleAccess m_turtle;
|
protected ITurtleAccess m_turtle;
|
||||||
|
private IComputer m_computer;
|
||||||
private int m_selectedSlot;
|
private int m_selectedSlot;
|
||||||
|
|
||||||
protected ContainerTurtle( IInventory playerInventory, ITurtleAccess turtle, int playerInvStartY, int turtleInvStartX )
|
protected ContainerTurtle( IInventory playerInventory, ITurtleAccess turtle, int playerInvStartY, int turtleInvStartX )
|
||||||
@ -71,6 +77,12 @@ public class ContainerTurtle extends Container
|
|||||||
this( playerInventory, turtle, 134, 175 );
|
this( playerInventory, turtle, 134, 175 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ContainerTurtle( IInventory playerInventory, ITurtleAccess turtle, IComputer computer )
|
||||||
|
{
|
||||||
|
this( playerInventory, turtle );
|
||||||
|
m_computer = computer;
|
||||||
|
}
|
||||||
|
|
||||||
public int getSelectedSlot()
|
public int getSelectedSlot()
|
||||||
{
|
{
|
||||||
return m_selectedSlot;
|
return m_selectedSlot;
|
||||||
@ -178,4 +190,11 @@ public class ContainerTurtle extends Container
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public IComputer getComputer()
|
||||||
|
{
|
||||||
|
return m_computer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user