mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-11-20 02:45:00 +00:00
The block bag fetch/place mapping is now taken from BlockType.getBlockBagItem.
This commit is contained in:
parent
7beac92232
commit
3ed5841863
@ -198,7 +198,7 @@ public class EditSession {
|
|||||||
if (blockBag != null) {
|
if (blockBag != null) {
|
||||||
if (type > 0) {
|
if (type > 0) {
|
||||||
try {
|
try {
|
||||||
blockBag.fetchPlacedBlock(type);
|
blockBag.fetchPlacedBlock(type, 0);
|
||||||
} catch (UnplaceableBlockException e) {
|
} catch (UnplaceableBlockException e) {
|
||||||
return false;
|
return false;
|
||||||
} catch (BlockBagException e) {
|
} catch (BlockBagException e) {
|
||||||
|
@ -34,7 +34,7 @@ public abstract class BlockBag {
|
|||||||
* @param id
|
* @param id
|
||||||
* @param data
|
* @param data
|
||||||
* @throws BlockBagException
|
* @throws BlockBagException
|
||||||
* @deprecated Use {@link BlockBag#storeDroppedBlock(int, int)}
|
* @deprecated Use {@link BlockBag#storeDroppedBlock(int, int)} instead
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void storeDroppedBlock(int id) throws BlockBagException {
|
public void storeDroppedBlock(int id) throws BlockBagException {
|
||||||
@ -61,8 +61,20 @@ public abstract class BlockBag {
|
|||||||
*
|
*
|
||||||
* @param id
|
* @param id
|
||||||
* @throws BlockBagException
|
* @throws BlockBagException
|
||||||
|
* @deprecated Use {@link #fetchPlacedBlock(int,int)} instead
|
||||||
*/
|
*/
|
||||||
public void fetchPlacedBlock(int id) throws BlockBagException {
|
public void fetchPlacedBlock(int id) throws BlockBagException {
|
||||||
|
fetchPlacedBlock(id, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a block as if it was placed by hand.
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @param data TODO
|
||||||
|
* @throws BlockBagException
|
||||||
|
*/
|
||||||
|
public void fetchPlacedBlock(int id, int data) throws BlockBagException {
|
||||||
try {
|
try {
|
||||||
// Blocks that can't be fetched...
|
// Blocks that can't be fetched...
|
||||||
switch (id) {
|
switch (id) {
|
||||||
@ -95,41 +107,37 @@ public abstract class BlockBag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} catch (OutOfBlocksException e) {
|
} catch (OutOfBlocksException e) {
|
||||||
switch (id) {
|
BaseItem placed = BlockType.getBlockBagItem(id, data);
|
||||||
case BlockID.STONE:
|
if (placed == null) throw e; // TODO: check
|
||||||
fetchBlock(BlockID.COBBLESTONE);
|
if (placed.getType() == BlockID.AIR) throw e; // TODO: check
|
||||||
break;
|
|
||||||
|
|
||||||
case BlockID.GRASS:
|
fetchItem(placed);
|
||||||
fetchBlock(BlockID.DIRT);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BlockID.REDSTONE_WIRE:
|
|
||||||
fetchBlock(ItemID.REDSTONE_DUST);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BlockID.REDSTONE_TORCH_OFF:
|
|
||||||
fetchBlock(BlockID.REDSTONE_TORCH_ON);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BlockID.WALL_SIGN:
|
|
||||||
case BlockID.SIGN_POST:
|
|
||||||
fetchBlock(ItemID.SIGN);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a block.
|
* Get a block.
|
||||||
*
|
*
|
||||||
|
* Either this method or fetchItem needs to be overridden
|
||||||
|
*
|
||||||
* @param id
|
* @param id
|
||||||
* @throws BlockBagException
|
* @throws BlockBagException
|
||||||
*/
|
*/
|
||||||
public abstract void fetchBlock(int id) throws BlockBagException;
|
public void fetchBlock(int id) throws BlockBagException {
|
||||||
|
fetchItem(new BaseItem(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a block.
|
||||||
|
*
|
||||||
|
* Either this method or fetchBlock needs to be overridden
|
||||||
|
*
|
||||||
|
* @param item
|
||||||
|
* @throws BlockBagException
|
||||||
|
*/
|
||||||
|
public void fetchItem(BaseItem item) throws BlockBagException {
|
||||||
|
fetchBlock(item.getType());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store a block.
|
* Store a block.
|
||||||
|
@ -71,7 +71,13 @@ public class BukkitPlayerBlockBag extends BlockBag {
|
|||||||
* @param id
|
* @param id
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void fetchBlock(int id) throws BlockBagException {
|
public void fetchItem(BaseItem item) throws BlockBagException {
|
||||||
|
final int id = item.getType();
|
||||||
|
final int damage = item.getDamage();
|
||||||
|
int amount = (item instanceof BaseItemStack) ? ((BaseItemStack) item).getAmount() : 1;
|
||||||
|
assert(amount == 1);
|
||||||
|
boolean usesDamageValue = ItemType.usesDamageValue(id);
|
||||||
|
|
||||||
if (id == BlockID.AIR) {
|
if (id == BlockID.AIR) {
|
||||||
throw new IllegalArgumentException("Can't fetch air block");
|
throw new IllegalArgumentException("Can't fetch air block");
|
||||||
}
|
}
|
||||||
@ -81,32 +87,40 @@ public class BukkitPlayerBlockBag extends BlockBag {
|
|||||||
boolean found = false;
|
boolean found = false;
|
||||||
|
|
||||||
for (int slot = 0; slot < items.length; ++slot) {
|
for (int slot = 0; slot < items.length; ++slot) {
|
||||||
ItemStack item = items[slot];
|
ItemStack bukkitItem = items[slot];
|
||||||
|
|
||||||
if (item == null) continue;
|
if (bukkitItem == null) {
|
||||||
|
continue;
|
||||||
if (item.getTypeId() == id) {
|
|
||||||
int amount = item.getAmount();
|
|
||||||
|
|
||||||
// Unlimited
|
|
||||||
if (amount < 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (amount > 1) {
|
|
||||||
item.setAmount(amount - 1);
|
|
||||||
found = true;
|
|
||||||
} else {
|
|
||||||
items[slot] = null;
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bukkitItem.getTypeId() != id) {
|
||||||
|
// Type id doesn't fit
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usesDamageValue && bukkitItem.getDurability() != damage) {
|
||||||
|
// Damage value doesn't fit.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int currentAmount = bukkitItem.getAmount();
|
||||||
|
if (currentAmount < 0) {
|
||||||
|
// Unlimited
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentAmount > 1) {
|
||||||
|
bukkitItem.setAmount(currentAmount - 1);
|
||||||
|
found = true;
|
||||||
|
} else {
|
||||||
|
items[slot] = null;
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found) {
|
if (!found) {
|
||||||
} else {
|
|
||||||
throw new OutOfBlocksException();
|
throw new OutOfBlocksException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user