mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-05 02:22:12 +01:00
SPIGOT-7422, #1228: Add API to set sherds on decorated pots
By: Parker Hawke <hawkeboyz2@hotmail.com>
This commit is contained in:
parent
25413e80a1
commit
4d235919d6
1 changed files with 51 additions and 0 deletions
|
@ -1,9 +1,15 @@
|
|||
package org.bukkit.craftbukkit.block;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.block.entity.DecoratedPotBlockEntity;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.DecoratedPot;
|
||||
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
|
@ -14,6 +20,51 @@ public class CraftDecoratedPot extends CraftBlockEntityState<DecoratedPotBlockEn
|
|||
super(world, tileEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSherd(Side face, Material sherd) {
|
||||
Preconditions.checkArgument(face != null, "face must not be null");
|
||||
Preconditions.checkArgument(sherd == null || sherd == Material.BRICK || Tag.ITEMS_DECORATED_POT_SHERDS.isTagged(sherd), "sherd is not a valid sherd material: %s", sherd);
|
||||
|
||||
Item sherdItem = (sherd != null) ? CraftMagicNumbers.getItem(sherd) : Items.BRICK;
|
||||
DecoratedPotBlockEntity.a decorations = getSnapshot().getDecorations(); // PAIL rename Decorations
|
||||
|
||||
switch (face) {
|
||||
case BACK -> getSnapshot().decorations = new DecoratedPotBlockEntity.a(sherdItem, decorations.left(), decorations.right(), decorations.front());
|
||||
case LEFT -> getSnapshot().decorations = new DecoratedPotBlockEntity.a(decorations.back(), sherdItem, decorations.right(), decorations.front());
|
||||
case RIGHT -> getSnapshot().decorations = new DecoratedPotBlockEntity.a(decorations.back(), decorations.left(), sherdItem, decorations.front());
|
||||
case FRONT -> getSnapshot().decorations = new DecoratedPotBlockEntity.a(decorations.back(), decorations.left(), decorations.right(), sherdItem);
|
||||
default -> throw new IllegalArgumentException("Unexpected value: " + face);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Material getSherd(Side face) {
|
||||
Preconditions.checkArgument(face != null, "face must not be null");
|
||||
|
||||
DecoratedPotBlockEntity.a decorations = getSnapshot().getDecorations(); // PAIL rename Decorations
|
||||
Item sherdItem = switch (face) {
|
||||
case BACK -> decorations.back();
|
||||
case LEFT -> decorations.left();
|
||||
case RIGHT -> decorations.right();
|
||||
case FRONT -> decorations.front();
|
||||
default -> throw new IllegalArgumentException("Unexpected value: " + face);
|
||||
};
|
||||
|
||||
return CraftMagicNumbers.getMaterial(sherdItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Side, Material> getSherds() {
|
||||
DecoratedPotBlockEntity.a decorations = getSnapshot().getDecorations(); // PAIL rename Decorations
|
||||
|
||||
Map<Side, Material> sherds = new EnumMap<>(Side.class);
|
||||
sherds.put(Side.BACK, CraftMagicNumbers.getMaterial(decorations.back()));
|
||||
sherds.put(Side.LEFT, CraftMagicNumbers.getMaterial(decorations.left()));
|
||||
sherds.put(Side.RIGHT, CraftMagicNumbers.getMaterial(decorations.right()));
|
||||
sherds.put(Side.FRONT, CraftMagicNumbers.getMaterial(decorations.front()));
|
||||
return sherds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Material> getShards() {
|
||||
return getSnapshot().getDecorations().sorted().map(CraftMagicNumbers::getMaterial).collect(Collectors.toUnmodifiableList());
|
||||
|
|
Loading…
Reference in a new issue