SPIGOT-5603: Use LootContext#lootingModifier in CraftLootTable

This commit is contained in:
konsolas 2020-04-08 17:11:22 +10:00 committed by md_5
parent 5838285d60
commit f7d6ad53ee

View File

@ -9,7 +9,8 @@ import net.minecraft.server.DamageSource;
import net.minecraft.server.Entity; import net.minecraft.server.Entity;
import net.minecraft.server.EntityHuman; import net.minecraft.server.EntityHuman;
import net.minecraft.server.IInventory; import net.minecraft.server.IInventory;
import net.minecraft.server.LootContextParameterSets; import net.minecraft.server.LootContextParameter;
import net.minecraft.server.LootContextParameterSet;
import net.minecraft.server.LootContextParameters; import net.minecraft.server.LootContextParameters;
import net.minecraft.server.LootTable; import net.minecraft.server.LootTable;
import net.minecraft.server.LootTableInfo; import net.minecraft.server.LootTableInfo;
@ -89,10 +90,28 @@ public class CraftLootTable implements org.bukkit.loot.LootTable {
builder.set(LootContextParameters.KILLER_ENTITY, nmsKiller); builder.set(LootContextParameters.KILLER_ENTITY, nmsKiller);
// If there is a player killer, damage source should reflect that in case loot tables use that information // If there is a player killer, damage source should reflect that in case loot tables use that information
builder.set(LootContextParameters.DAMAGE_SOURCE, DamageSource.playerAttack(nmsKiller)); builder.set(LootContextParameters.DAMAGE_SOURCE, DamageSource.playerAttack(nmsKiller));
builder.set(LootContextParameters.LAST_DAMAGE_PLAYER, nmsKiller); // SPIGOT-5603 - Set minecraft:killed_by_player
}
// SPIGOT-5603 - Use LootContext#lootingModifier
if (context.getLootingModifier() != LootContext.DEFAULT_LOOT_MODIFIER) {
builder.set(LootContextParameters.LOOTING_MOD, context.getLootingModifier());
} }
} }
return builder.build(getHandle().getLootContextParameterSet()); // SPIGOT-5603 - Avoid IllegalArgumentException in LootTableInfo#build()
LootContextParameterSet.a nmsBuilder = new LootContextParameterSet.a(); // PAIL rename Builder
for (LootContextParameter<?> param : getHandle().getLootContextParameterSet().a()) { // PAIL rename required
nmsBuilder.a(param); // PAIL rename addRequired
}
for (LootContextParameter<?> param : getHandle().getLootContextParameterSet().b()) { // PAIL rename optional
if (!getHandle().getLootContextParameterSet().a().contains(param)) { // PAIL rename required
nmsBuilder.b(param); // PAIL rename addOptional
}
}
nmsBuilder.b(LootContextParameters.LOOTING_MOD); // PAIL rename addOptional
return builder.build(nmsBuilder.a()); // PAIL rename build
} }
@Override @Override