mirror of
https://github.com/Minestom/Minestom.git
synced 2024-12-27 03:27:56 +01:00
Custom blocks can block item interaction, prevents blocks being placed when opening containers
This commit is contained in:
parent
6d9ac0b35d
commit
85da9203b1
@ -25,8 +25,8 @@ public class StoneBlock extends CustomBlock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInteract(Player player, Player.Hand hand, BlockPosition blockPosition, Data data) {
|
public boolean onInteract(Player player, Player.Hand hand, BlockPosition blockPosition, Data data) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,8 +33,8 @@ public class UpdatableBlockDemo extends CustomBlock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInteract(Player player, Player.Hand hand, BlockPosition blockPosition, Data data) {
|
public boolean onInteract(Player player, Player.Hand hand, BlockPosition blockPosition, Data data) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -8,11 +8,25 @@ public class PlayerBlockInteractEvent extends CancellableEvent {
|
|||||||
private BlockPosition blockPosition;
|
private BlockPosition blockPosition;
|
||||||
private Player.Hand hand;
|
private Player.Hand hand;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this interaction block the normal item use?
|
||||||
|
* True for containers which open an inventory instead of letting blocks be placed
|
||||||
|
*/
|
||||||
|
private boolean blocksItemUse;
|
||||||
|
|
||||||
public PlayerBlockInteractEvent(BlockPosition blockPosition, Player.Hand hand) {
|
public PlayerBlockInteractEvent(BlockPosition blockPosition, Player.Hand hand) {
|
||||||
this.blockPosition = blockPosition;
|
this.blockPosition = blockPosition;
|
||||||
this.hand = hand;
|
this.hand = hand;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isBlockingItemUse() {
|
||||||
|
return blocksItemUse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBlockingItemUse(boolean blocks) {
|
||||||
|
this.blocksItemUse = blocks;
|
||||||
|
}
|
||||||
|
|
||||||
public BlockPosition getBlockPosition() {
|
public BlockPosition getBlockPosition() {
|
||||||
return blockPosition;
|
return blockPosition;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,16 @@ public abstract class CustomBlock {
|
|||||||
|
|
||||||
public abstract void onDestroy(Instance instance, BlockPosition blockPosition, Data data);
|
public abstract void onDestroy(Instance instance, BlockPosition blockPosition, Data data);
|
||||||
|
|
||||||
public abstract void onInteract(Player player, Player.Hand hand, BlockPosition blockPosition, Data data);
|
/**
|
||||||
|
* Handles interactions with this block. Can also block normal item use (containers should block when opening the
|
||||||
|
* menu, this prevents the player from placing a block when opening it for instance)
|
||||||
|
* @param player the player interacting
|
||||||
|
* @param hand the hand used to interact
|
||||||
|
* @param blockPosition the position of this block
|
||||||
|
* @param data the data at this position
|
||||||
|
* @return true if this block blocks normal item use, false otherwise
|
||||||
|
*/
|
||||||
|
public abstract boolean onInteract(Player player, Player.Hand hand, BlockPosition blockPosition, Data data);
|
||||||
|
|
||||||
public abstract UpdateOption getUpdateOption();
|
public abstract UpdateOption getUpdateOption();
|
||||||
|
|
||||||
|
@ -42,10 +42,17 @@ public class BlockPlacementListener {
|
|||||||
CustomBlock customBlock = instance.getCustomBlock(blockPosition);
|
CustomBlock customBlock = instance.getCustomBlock(blockPosition);
|
||||||
if (customBlock != null) {
|
if (customBlock != null) {
|
||||||
Data data = instance.getBlockData(blockPosition);
|
Data data = instance.getBlockData(blockPosition);
|
||||||
customBlock.onInteract(player, hand, blockPosition, data);
|
boolean blocksItem = customBlock.onInteract(player, hand, blockPosition, data);
|
||||||
|
if(blocksItem) {
|
||||||
|
playerBlockInteractEvent.setBlockingItemUse(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if(playerBlockInteractEvent.isBlockingItemUse()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Check if item at hand is a block
|
// Check if item at hand is a block
|
||||||
ItemStack usedItem = hand == Player.Hand.MAIN ? playerInventory.getItemInMainHand() : playerInventory.getItemInOffHand();
|
ItemStack usedItem = hand == Player.Hand.MAIN ? playerInventory.getItemInMainHand() : playerInventory.getItemInOffHand();
|
||||||
Material material = Material.fromId(usedItem.getMaterialId());
|
Material material = Material.fromId(usedItem.getMaterialId());
|
||||||
|
Loading…
Reference in New Issue
Block a user