enderchest API support

This commit is contained in:
gnembon committed 2020-01-10 11:31:49 -04:00
1 parent 80b72366ee
commit a841755d61
2 files changed
+22 -4

No files matched your search

@@ -1234,7 +1234,8 @@ public class CarpetExpression
* <div style="padding-left: 20px; border-radius: 5px 45px; border:1px solid grey;"> * <div style="padding-left: 20px; border-radius: 5px 45px; border:1px solid grey;">
* <h2>Manipulating inventories of blocks and entities</h2> * <h2>Manipulating inventories of blocks and entities</h2>
* <p>Most functions in this category require inventory as the first argument. Inventory could be specified by * <p>Most functions in this category require inventory as the first argument. Inventory could be specified by
* an entity, or a block, or position (three coordinates) of a potential block with inventory. * an entity, or a block, or position (three coordinates) of a potential block with inventory. Player enderchest inventory
* require two arguments, keyword <code>'enderchest'</code>, followed by the player entity argument.
* If the entity or a block doesn't * If the entity or a block doesn't
* have an inventory, they typically do nothing and return null.</p> * have an inventory, they typically do nothing and return null.</p>
* <p>Most items returned are in the form of * <p>Most items returned are in the form of
@@ -1262,6 +1263,7 @@ public class CarpetExpression
* don't have an inventory</p> * don't have an inventory</p>
* <pre> * <pre>
* inventory_size(player()) =&gt; 41 * inventory_size(player()) =&gt; 41
* inventory_size('enderchest', player()) =&gt; 27 // enderchest
* inventory_size(x,y,z) =&gt; 27 // chest * inventory_size(x,y,z) =&gt; 27 // chest
* inventory_size(block(pos)) =&gt; 5 // hopper * inventory_size(block(pos)) =&gt; 5 // hopper
* </pre> * </pre>
@@ -1585,7 +1587,7 @@ public class CarpetExpression
} }
private void syncPlayerInventory(NBTSerializableValue.InventoryLocator inventory, int int_1) private void syncPlayerInventory(NBTSerializableValue.InventoryLocator inventory, int int_1)
{ {
if (inventory.owner instanceof ServerPlayerEntity) if (inventory.owner instanceof ServerPlayerEntity && !inventory.isEnder)
{ {
ServerPlayerEntity player = (ServerPlayerEntity) inventory.owner; ServerPlayerEntity player = (ServerPlayerEntity) inventory.owner;
player.networkHandler.sendPacket(new GuiSlotUpdateS2CPacket( player.networkHandler.sendPacket(new GuiSlotUpdateS2CPacket(
@@ -11,7 +11,6 @@ import net.minecraft.block.ChestBlock;
import net.minecraft.block.InventoryProvider; import net.minecraft.block.InventoryProvider;
import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.ChestBlockEntity; import net.minecraft.block.entity.ChestBlockEntity;
import net.minecraft.block.entity.HopperBlockEntity;
import net.minecraft.command.arguments.ItemStackArgument; import net.minecraft.command.arguments.ItemStackArgument;
import net.minecraft.command.arguments.ItemStringReader; import net.minecraft.command.arguments.ItemStringReader;
import net.minecraft.command.arguments.NbtPathArgumentType; import net.minecraft.command.arguments.NbtPathArgumentType;
@@ -32,7 +31,6 @@ import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box; import net.minecraft.util.math.Box;
import net.minecraft.world.World;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
@@ -201,6 +199,17 @@ public class NBTSerializableValue extends Value implements ContainerValueInterfa
return null; return null;
return new InventoryLocator(pos, pos, inv, offset + 1); return new InventoryLocator(pos, pos, inv, offset + 1);
} }
else if (v1.getString().equalsIgnoreCase("enderchest"))
{
Value v2 = params.get(1 + offset).evalValue(c);
if (!(v2 instanceof EntityValue) || !(((EntityValue) v2).getEntity() instanceof PlayerEntity))
{
throw new InternalExpressionException("enderchest inventory requires player argument");
}
PlayerEntity e = (PlayerEntity)((EntityValue) v2).getEntity();
inv = e.getEnderChestInventory();
return new InventoryLocator(e, e.getBlockPos(), inv, offset + 2, true);
}
BlockPos pos = new BlockPos( BlockPos pos = new BlockPos(
NumericValue.asNumber(v1).getDouble(), NumericValue.asNumber(v1).getDouble(),
NumericValue.asNumber(params.get(1 + offset).evalValue(c)).getDouble(), NumericValue.asNumber(params.get(1 + offset).evalValue(c)).getDouble(),
@@ -516,12 +525,19 @@ public class NBTSerializableValue extends Value implements ContainerValueInterfa
public BlockPos position; public BlockPos position;
public Inventory inventory; public Inventory inventory;
public int offset; public int offset;
public boolean isEnder;
InventoryLocator(Object owner, BlockPos pos, Inventory i, int o) InventoryLocator(Object owner, BlockPos pos, Inventory i, int o)
{
this(owner, pos, i, o, false);
}
InventoryLocator(Object owner, BlockPos pos, Inventory i, int o, boolean isEnder)
{ {
this.owner = owner; this.owner = owner;
position = pos; position = pos;
inventory = i; inventory = i;
offset = o; offset = o;
this.isEnder = isEnder;
} }
} }