mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-04 05:54:43 +01:00
refactor Items
This commit is contained in:
parent
f659231e34
commit
96435cfc76
8 changed files with 72 additions and 58 deletions
|
@ -4,8 +4,8 @@ import java.util.List;
|
||||||
|
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
import org.bukkit.craftbukkit.CraftServer;
|
import org.bukkit.craftbukkit.CraftServer;
|
||||||
|
import org.bukkit.craftbukkit.entity.CraftItem;
|
||||||
import org.bukkit.craftbukkit.TrigMath;
|
import org.bukkit.craftbukkit.TrigMath;
|
||||||
import org.bukkit.craftbukkit.entity.CraftItemDrop;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
|
@ -223,7 +223,7 @@ public abstract class EntityHuman extends EntityLiving {
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
Player player = (Player)this.getBukkitEntity();
|
Player player = (Player)this.getBukkitEntity();
|
||||||
CraftServer server = ((WorldServer)world).getServer();
|
CraftServer server = ((WorldServer)world).getServer();
|
||||||
CraftItemDrop drop = new CraftItemDrop(server, entityitem);
|
CraftItem drop = new CraftItem(server, entityitem);
|
||||||
PlayerDropItemEvent event = new PlayerDropItemEvent(player, drop);
|
PlayerDropItemEvent event = new PlayerDropItemEvent(player, drop);
|
||||||
server.getPluginManager().callEvent(event);
|
server.getPluginManager().callEvent(event);
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@ public class ItemBlock extends Item {
|
||||||
world.setTypeId(i, j, k, 20);
|
world.setTypeId(i, j, k, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
world.setTypeIdAndData(i, j, k, replacedBlockState.getTypeId(), replacedBlockState.getData().getData());
|
world.setTypeIdAndData(i, j, k, replacedBlockState.getTypeId(), replacedBlockState.getRawData());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -330,8 +330,8 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
|
||||||
// if we are destroying either a redstone wire with a current greater than 0 or
|
// if we are destroying either a redstone wire with a current greater than 0 or
|
||||||
// a redstone torch that is on, then we should notify plugins that this block has
|
// a redstone torch that is on, then we should notify plugins that this block has
|
||||||
// returned to a current value of 0 (since it will once the redstone is destroyed)
|
// returned to a current value of 0 (since it will once the redstone is destroyed)
|
||||||
if ((blockId == Block.REDSTONE_WIRE.id && block.getData() > 0) || blockId == Block.REDSTONE_TORCH_ON.id) {
|
if ((blockId == Block.REDSTONE_WIRE.id && block.getRawData() > 0) || blockId == Block.REDSTONE_TORCH_ON.id) {
|
||||||
server.getPluginManager().callEvent( new BlockRedstoneEvent(block, (blockId == Block.REDSTONE_WIRE.id ? block.getData() : 15), 0));
|
server.getPluginManager().callEvent( new BlockRedstoneEvent(block, (blockId == Block.REDSTONE_WIRE.id ? block.getRawData() : 15), 0));
|
||||||
}
|
}
|
||||||
event = new BlockDamageEvent(Type.BLOCK_DAMAGED, block, BlockDamageLevel.BROKEN, player);
|
event = new BlockDamageEvent(Type.BLOCK_DAMAGED, block, BlockDamageLevel.BROKEN, player);
|
||||||
} else {
|
} else {
|
||||||
|
@ -364,8 +364,8 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
|
||||||
// if we are destroying either a redstone wire with a current greater than 0 or
|
// if we are destroying either a redstone wire with a current greater than 0 or
|
||||||
// a redstone torch that is on, then we should notify plugins that this block has
|
// a redstone torch that is on, then we should notify plugins that this block has
|
||||||
// returned to a current value of 0 (since it will once the redstone is destroyed)
|
// returned to a current value of 0 (since it will once the redstone is destroyed)
|
||||||
if ((blockId == Block.REDSTONE_WIRE.id && block.getData() > 0) || blockId == Block.REDSTONE_TORCH_ON.id) {
|
if ((blockId == Block.REDSTONE_WIRE.id && block.getRawData() > 0) || blockId == Block.REDSTONE_TORCH_ON.id) {
|
||||||
server.getPluginManager().callEvent( new BlockRedstoneEvent(block, (blockId == Block.REDSTONE_WIRE.id ? block.getData() : 15), 0));
|
server.getPluginManager().callEvent( new BlockRedstoneEvent(block, (blockId == Block.REDSTONE_WIRE.id ? block.getRawData() : 15), 0));
|
||||||
}
|
}
|
||||||
event = new BlockDamageEvent(Type.BLOCK_DAMAGED, block, BlockDamageLevel.BROKEN, player);
|
event = new BlockDamageEvent(Type.BLOCK_DAMAGED, block, BlockDamageLevel.BROKEN, player);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -7,7 +7,6 @@ import org.bukkit.entity.Entity;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import net.minecraft.server.*;
|
import net.minecraft.server.*;
|
||||||
|
|
||||||
|
@ -15,7 +14,6 @@ import org.bukkit.entity.Arrow;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Boat;
|
import org.bukkit.entity.Boat;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.entity.ItemDrop;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.bukkit.BlockChangeDelegate;
|
import org.bukkit.BlockChangeDelegate;
|
||||||
|
@ -212,7 +210,7 @@ public class CraftWorld implements World {
|
||||||
return world;
|
return world;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemDrop dropItem(Location loc, ItemStack item) {
|
public org.bukkit.entity.Item dropItem(Location loc, ItemStack item) {
|
||||||
net.minecraft.server.ItemStack stack = new net.minecraft.server.ItemStack(
|
net.minecraft.server.ItemStack stack = new net.minecraft.server.ItemStack(
|
||||||
item.getTypeId(),
|
item.getTypeId(),
|
||||||
item.getAmount(),
|
item.getAmount(),
|
||||||
|
@ -223,10 +221,10 @@ public class CraftWorld implements World {
|
||||||
world.a(entity);
|
world.a(entity);
|
||||||
//TODO this is inconsistent with how Entity.getBukkitEntity() works.
|
//TODO this is inconsistent with how Entity.getBukkitEntity() works.
|
||||||
// However, this entity is not at the moment backed by a server entity class so it may be left.
|
// However, this entity is not at the moment backed by a server entity class so it may be left.
|
||||||
return new CraftItemDrop(world.getServer(), entity);
|
return new CraftItem(world.getServer(), entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemDrop dropItemNaturally(Location loc, ItemStack item) {
|
public org.bukkit.entity.Item dropItemNaturally(Location loc, ItemStack item) {
|
||||||
double xs = world.l.nextFloat() * 0.7F + (1.0F - 0.7F) * 0.5D;
|
double xs = world.l.nextFloat() * 0.7F + (1.0F - 0.7F) * 0.5D;
|
||||||
double ys = world.l.nextFloat() * 0.7F + (1.0F - 0.7F) * 0.5D;
|
double ys = world.l.nextFloat() * 0.7F + (1.0F - 0.7F) * 0.5D;
|
||||||
double zs = world.l.nextFloat() * 0.7F + (1.0F - 0.7F) * 0.5D;
|
double zs = world.l.nextFloat() * 0.7F + (1.0F - 0.7F) * 0.5D;
|
||||||
|
|
|
@ -4,14 +4,11 @@ package org.bukkit.craftbukkit.block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.Location;
|
|
||||||
|
|
||||||
import net.minecraft.server.BiomeBase;
|
import net.minecraft.server.BiomeBase;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.craftbukkit.CraftChunk;
|
import org.bukkit.craftbukkit.CraftChunk;
|
||||||
import org.bukkit.craftbukkit.block.CraftBlockState;
|
|
||||||
import org.bukkit.craftbukkit.block.CraftSign;
|
|
||||||
import org.bukkit.util.BlockVector;
|
import org.bukkit.util.BlockVector;
|
||||||
|
|
||||||
public class CraftBlock implements Block {
|
public class CraftBlock implements Block {
|
||||||
|
@ -99,7 +96,7 @@ public class CraftBlock implements Block {
|
||||||
*
|
*
|
||||||
* @return block specific metadata
|
* @return block specific metadata
|
||||||
*/
|
*/
|
||||||
public byte getData() {
|
public byte getRawData() {
|
||||||
return (byte) chunk.getHandle().b(this.x & 0xF, this.y & 0x7F, this.z & 0xF);
|
return (byte) chunk.getHandle().b(this.x & 0xF, this.y & 0x7F, this.z & 0xF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,6 +258,25 @@ public class CraftBlock implements Block {
|
||||||
return BlockFace.SELF;
|
return BlockFace.SELF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int blockFaceToNotch(BlockFace face) {
|
||||||
|
switch(face) {
|
||||||
|
case DOWN:
|
||||||
|
return 0;
|
||||||
|
case UP:
|
||||||
|
return 1;
|
||||||
|
case EAST:
|
||||||
|
return 2;
|
||||||
|
case WEST:
|
||||||
|
return 3;
|
||||||
|
case NORTH:
|
||||||
|
return 4;
|
||||||
|
case SOUTH:
|
||||||
|
return 5;
|
||||||
|
default:
|
||||||
|
return 7; //Good as anything here, but technically invalid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public BlockState getState() {
|
public BlockState getState() {
|
||||||
Material material = getType();
|
Material material = getType();
|
||||||
|
@ -331,4 +347,17 @@ public class CraftBlock implements Block {
|
||||||
public boolean equals( Object o ) {
|
public boolean equals( Object o ) {
|
||||||
return this == o;
|
return this == o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isBlockFacePowered(BlockFace face) {
|
||||||
|
return chunk.getHandle().d.j(x, y, z, blockFaceToNotch(face));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBlockFaceIndirectlyPowered(BlockFace face) {
|
||||||
|
return chunk.getHandle().d.j(x, y, z, blockFaceToNotch(face));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public byte getData() {
|
||||||
|
return getRawData();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
package org.bukkit.craftbukkit.block;
|
package org.bukkit.craftbukkit.block;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
@ -29,7 +30,7 @@ public class CraftBlockState implements BlockState {
|
||||||
this.light = block.getLightLevel();
|
this.light = block.getLightLevel();
|
||||||
this.chunk = (CraftChunk)block.getChunk();
|
this.chunk = (CraftChunk)block.getChunk();
|
||||||
|
|
||||||
createData(block.getData());
|
createData(block.getRawData());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -83,8 +84,6 @@ public class CraftBlockState implements BlockState {
|
||||||
* @param data New block specific metadata
|
* @param data New block specific metadata
|
||||||
*/
|
*/
|
||||||
public void setData(final MaterialData data) {
|
public void setData(final MaterialData data) {
|
||||||
world.getHandle().c(x, y, z, data.getData());
|
|
||||||
|
|
||||||
Material mat = getType();
|
Material mat = getType();
|
||||||
|
|
||||||
if ((mat == null) || (mat.getData() == null)) {
|
if ((mat == null) || (mat.getData() == null)) {
|
||||||
|
@ -122,11 +121,11 @@ public class CraftBlockState implements BlockState {
|
||||||
*
|
*
|
||||||
* @param type Type-Id to change this block to
|
* @param type Type-Id to change this block to
|
||||||
*/
|
*/
|
||||||
public void setTypeId(final int type) {
|
public boolean setTypeId(final int type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
world.getHandle().e(x, y, z, type);
|
|
||||||
|
|
||||||
createData((byte)0);
|
createData((byte)0);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -176,7 +175,7 @@ public class CraftBlockState implements BlockState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
block.setData(data.getData());
|
block.setData(getRawData());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -190,4 +189,16 @@ public class CraftBlockState implements BlockState {
|
||||||
this.data = mat.getNewData(data);
|
this.data = mat.getNewData(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public byte getRawData() {
|
||||||
|
return data.getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location getLocation() {
|
||||||
|
return new Location(world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(byte data) {
|
||||||
|
createData(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,26 @@
|
||||||
package org.bukkit.craftbukkit.entity;
|
package org.bukkit.craftbukkit.entity;
|
||||||
|
|
||||||
import net.minecraft.server.EntityItem;
|
import net.minecraft.server.EntityItem;
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.CraftServer;
|
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.craftbukkit.CraftServer;
|
||||||
|
|
||||||
public class CraftItem extends CraftEntity implements Item {
|
public class CraftItem extends CraftEntity implements Item {
|
||||||
|
private EntityItem item;
|
||||||
|
|
||||||
public CraftItem(CraftServer server, EntityItem entity) {
|
public CraftItem(CraftServer server, EntityItem entity) {
|
||||||
super(server, entity);
|
super(server, entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemStack getItemStack() {
|
||||||
|
return new CraftItemStack(item.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItemStack(ItemStack stack) {
|
||||||
|
item.a = new net.minecraft.server.ItemStack(stack.getTypeId(), stack.getAmount(), stack.getDurability());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "CraftItem";
|
return "CraftItem";
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
package org.bukkit.craftbukkit.entity;
|
|
||||||
|
|
||||||
import net.minecraft.server.EntityItem;
|
|
||||||
import org.bukkit.entity.ItemDrop;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.craftbukkit.CraftServer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents an item drop.
|
|
||||||
*
|
|
||||||
* @author sk89q
|
|
||||||
*/
|
|
||||||
public class CraftItemDrop extends CraftEntity implements ItemDrop {
|
|
||||||
private EntityItem item;
|
|
||||||
|
|
||||||
public CraftItemDrop(CraftServer server, EntityItem entity) {
|
|
||||||
super(server, entity);
|
|
||||||
this.item = entity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemStack getItemStack() {
|
|
||||||
return new CraftItemStack(item.a);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setItemStack(ItemStack stack) {
|
|
||||||
item.a = new net.minecraft.server.ItemStack(stack.getTypeId(), stack.getAmount(), stack.getDurability());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "CraftItemDrop{" + "item=" + item + '}';
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue