Add LootTable to BlockDispenseLootEvent (#12917)
This commit is contained in:
+8
-2
@@ -16,7 +16,12 @@
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@@ -233,6 +_,19 @@
|
||||
@@ -229,10 +_,24 @@
|
||||
}
|
||||
|
||||
public void ejectReward(ServerLevel level, BlockPos pos, ResourceKey<LootTable> lootTable) {
|
||||
- LootTable lootTable1 = level.getServer().reloadableRegistries().getLootTable(lootTable);
|
||||
+ LootTable lootTable1 = level.getServer().reloadableRegistries().getLootTable(lootTable); final LootTable sourceLootTable = lootTable1; // Paper - obfhelper
|
||||
LootParams lootParams = new LootParams.Builder(level).create(LootContextParamSets.EMPTY);
|
||||
ObjectArrayList<ItemStack> randomItems = lootTable1.getRandomItems(lootParams);
|
||||
if (!randomItems.isEmpty()) {
|
||||
@@ -25,7 +30,8 @@
|
||||
+ level,
|
||||
+ pos,
|
||||
+ null,
|
||||
+ randomItems
|
||||
+ randomItems,
|
||||
+ sourceLootTable
|
||||
+ );
|
||||
+ if (spawnerDispenseLootEvent.isCancelled()) {
|
||||
+ return;
|
||||
|
||||
+3
-2
@@ -1,12 +1,13 @@
|
||||
--- a/net/minecraft/world/level/block/entity/vault/VaultBlockEntity.java
|
||||
+++ b/net/minecraft/world/level/block/entity/vault/VaultBlockEntity.java
|
||||
@@ -257,7 +_,12 @@
|
||||
@@ -257,7 +_,13 @@
|
||||
if (!list.isEmpty()) {
|
||||
player.awardStat(Stats.ITEM_USED.get(stack.getItem()));
|
||||
stack.consume(config.keyItem().getCount(), player);
|
||||
- unlock(level, state, pos, config, serverData, sharedData, list);
|
||||
+ // CraftBukkit start
|
||||
+ org.bukkit.event.block.BlockDispenseLootEvent vaultDispenseLootEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockDispenseLootEvent(level, pos, player, list);
|
||||
+ LootTable sourceLootTable = level.getServer().reloadableRegistries().getLootTable(config.lootTable());
|
||||
+ org.bukkit.event.block.BlockDispenseLootEvent vaultDispenseLootEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockDispenseLootEvent(level, pos, player, list, sourceLootTable);
|
||||
+ if (vaultDispenseLootEvent.isCancelled()) return;
|
||||
+ list = vaultDispenseLootEvent.getDispensedLoot().stream().map(org.bukkit.craftbukkit.inventory.CraftItemStack::asNMSCopy).toList();
|
||||
+ // CraftBukkit end
|
||||
|
||||
@@ -1700,10 +1700,10 @@ public class CraftEventFactory {
|
||||
return event;
|
||||
}
|
||||
|
||||
public static BlockDispenseLootEvent callBlockDispenseLootEvent(ServerLevel level, BlockPos pos, net.minecraft.world.entity.player.Player player, List<ItemStack> rewardLoot) {
|
||||
public static BlockDispenseLootEvent callBlockDispenseLootEvent(ServerLevel level, BlockPos pos, net.minecraft.world.entity.player.Player player, List<ItemStack> rewardLoot, LootTable lootTable) {
|
||||
List<org.bukkit.inventory.ItemStack> craftItemStacks = rewardLoot.stream().map(CraftItemStack::asBukkitCopy).collect(Collectors.toList());
|
||||
|
||||
BlockDispenseLootEvent event = new BlockDispenseLootEvent((player == null) ? null : (Player) player.getBukkitEntity(), CraftBlock.at(level, pos), craftItemStacks);
|
||||
BlockDispenseLootEvent event = new BlockDispenseLootEvent((player == null) ? null : (Player) player.getBukkitEntity(), CraftBlock.at(level, pos), craftItemStacks, lootTable.craftLootTable);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
return event;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user