From 669b413938803154372d53289d1697b2982ab1c3 Mon Sep 17 00:00:00 2001 From: Jishuna Date: Sat, 14 Dec 2024 11:39:26 +1100 Subject: [PATCH] #1518: Add API methods to Vault --- .../bukkit/craftbukkit/block/CraftVault.java | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftVault.java b/src/main/java/org/bukkit/craftbukkit/block/CraftVault.java index bfee49828..ad882e1aa 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftVault.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftVault.java @@ -1,18 +1,30 @@ package org.bukkit.craftbukkit.block; +import com.google.common.base.Preconditions; +import java.util.Optional; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.trialspawner.PlayerDetector; import net.minecraft.world.level.block.entity.vault.VaultBlockEntity; +import net.minecraft.world.level.block.entity.vault.VaultConfig; +import net.minecraft.world.level.storage.loot.LootTable; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Vault; +import org.bukkit.craftbukkit.CraftLootTable; +import org.bukkit.craftbukkit.inventory.CraftItemStack; public class CraftVault extends CraftBlockEntityState implements Vault { + private final CraftVaultConfiguration config; public CraftVault(World world, VaultBlockEntity tileEntity) { super(world, tileEntity); + this.config = new CraftVaultConfiguration(tileEntity.getConfig()); } protected CraftVault(CraftVault state, Location location) { super(state, location); + this.config = state.config; } @Override @@ -24,4 +36,87 @@ public class CraftVault extends CraftBlockEntityState implemen public CraftVault copy(Location location) { return new CraftVault(this, location); } + + @Override + public double getActivationRange() { + return config.activationRange; + } + + @Override + public void setActivationRange(double range) { + config.activationRange = range; + } + + @Override + public double getDeactivationRange() { + return config.deactivationRange; + } + + @Override + public void setDeactivationRange(double range) { + config.deactivationRange = range; + } + + @Override + public org.bukkit.loot.LootTable getLootTable() { + return CraftLootTable.minecraftToBukkit(config.lootTable); + } + + @Override + public void setLootTable(org.bukkit.loot.LootTable lootTable) { + Preconditions.checkArgument(lootTable != null, "LootTable cannot be null"); + config.lootTable = CraftLootTable.bukkitToMinecraft(lootTable); + } + + @Override + public org.bukkit.loot.LootTable getDisplayLootTable() { + return config.overrideLootTableToDisplay.map(CraftLootTable::minecraftToBukkit).orElse(null); + } + + @Override + public void setDisplayLootTable(org.bukkit.loot.LootTable lootTable) { + config.overrideLootTableToDisplay = Optional.ofNullable(CraftLootTable.bukkitToMinecraft(lootTable)); + } + + @Override + public org.bukkit.inventory.ItemStack getKeyItem() { + return CraftItemStack.asBukkitCopy(config.keyItem); + } + + @Override + public void setKeyItem(org.bukkit.inventory.ItemStack keyItem) { + Preconditions.checkArgument(keyItem != null, "Key item cannot be null"); + config.keyItem = CraftItemStack.asNMSCopy(keyItem); + } + + @Override + protected void applyTo(VaultBlockEntity tileEntity) { + super.applyTo(tileEntity); + + tileEntity.setConfig(this.config.toMinecraft()); + } + + static class CraftVaultConfiguration { + private ResourceKey lootTable; + private double activationRange; + private double deactivationRange; + private ItemStack keyItem; + private Optional> overrideLootTableToDisplay; + private PlayerDetector playerDetector; + private net.minecraft.world.level.block.entity.trialspawner.PlayerDetector.a entitySelector; + + private CraftVaultConfiguration(VaultConfig minecraft) { + this.lootTable = minecraft.lootTable(); + this.activationRange = minecraft.activationRange(); + this.deactivationRange = minecraft.deactivationRange(); + this.keyItem = minecraft.keyItem(); + this.overrideLootTableToDisplay = minecraft.overrideLootTableToDisplay(); + this.playerDetector = minecraft.playerDetector(); + this.entitySelector = minecraft.entitySelector(); + } + + private VaultConfig toMinecraft() { + return new VaultConfig(lootTable, activationRange, deactivationRange, keyItem, overrideLootTableToDisplay, playerDetector, entitySelector); + } + } }