#703: Add piglin bartering API

By: Lars Dormans <lars.dormans@live.nl>
This commit is contained in:
CraftBukkit/Spigot
2021-05-28 08:59:21 +10:00
parent 07f924343f
commit 4929e2a1d9
4 changed files with 283 additions and 9 deletions

View File

@@ -1,9 +1,18 @@
package org.bukkit.craftbukkit.entity;
import com.google.common.base.Preconditions;
import java.util.Collections;
import java.util.Set;
import java.util.stream.Collectors;
import net.minecraft.world.entity.monster.piglin.EntityPiglin;
import net.minecraft.world.item.Item;
import org.bukkit.Material;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Piglin;
import org.bukkit.inventory.Inventory;
public class CraftPiglin extends CraftPiglinAbstract implements Piglin {
@@ -21,6 +30,53 @@ public class CraftPiglin extends CraftPiglinAbstract implements Piglin {
getHandle().cannotHunt = flag;
}
@Override
public boolean addBarterMaterial(Material material) {
Preconditions.checkArgument(material != null, "material cannot be null");
Item item = CraftMagicNumbers.getItem(material);
return getHandle().allowedBarterItems.add(item);
}
@Override
public boolean removeBarterMaterial(Material material) {
Preconditions.checkArgument(material != null, "material cannot be null");
Item item = CraftMagicNumbers.getItem(material);
return getHandle().allowedBarterItems.remove(item);
}
@Override
public boolean addMaterialOfInterest(Material material) {
Preconditions.checkArgument(material != null, "material cannot be null");
Item item = CraftMagicNumbers.getItem(material);
return getHandle().interestItems.add(item);
}
@Override
public boolean removeMaterialOfInterest(Material material) {
Preconditions.checkArgument(material != null, "material cannot be null");
Item item = CraftMagicNumbers.getItem(material);
return getHandle().interestItems.remove(item);
}
@Override
public Set<Material> getInterestList() {
return Collections.unmodifiableSet(getHandle().interestItems.stream().map(CraftMagicNumbers::getMaterial).collect(Collectors.toSet()));
}
@Override
public Set<Material> getBarterList() {
return Collections.unmodifiableSet(getHandle().allowedBarterItems.stream().map(CraftMagicNumbers::getMaterial).collect(Collectors.toSet()));
}
@Override
public Inventory getInventory() {
return new CraftInventory(getHandle().bu);
}
@Override
public EntityPiglin getHandle() {
return (EntityPiglin) super.getHandle();

View File

@@ -42,6 +42,7 @@ import net.minecraft.world.entity.monster.EntityIllagerWizard;
import net.minecraft.world.entity.monster.EntityMonster;
import net.minecraft.world.entity.monster.EntitySlime;
import net.minecraft.world.entity.monster.EntityStrider;
import net.minecraft.world.entity.monster.piglin.EntityPiglin;
import net.minecraft.world.entity.npc.EntityVillager;
import net.minecraft.world.entity.npc.NPC;
import net.minecraft.world.entity.player.EntityHuman;
@@ -109,6 +110,7 @@ import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Pig;
import org.bukkit.entity.PigZombie;
import org.bukkit.entity.Piglin;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Raider;
@@ -178,6 +180,7 @@ import org.bukkit.event.entity.ItemMergeEvent;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.entity.LingeringPotionSplashEvent;
import org.bukkit.event.entity.PigZapEvent;
import org.bukkit.event.entity.PiglinBarterEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.entity.PlayerLeashEntityEvent;
import org.bukkit.event.entity.PotionSplashEvent;
@@ -1599,4 +1602,10 @@ public class CraftEventFactory {
return event;
}
public static PiglinBarterEvent callPiglinBarterEvent(EntityPiglin piglin, List<ItemStack> outcome, ItemStack input) {
PiglinBarterEvent event = new PiglinBarterEvent((Piglin) piglin.getBukkitEntity(), CraftItemStack.asBukkitCopy(input), outcome.stream().map(CraftItemStack::asBukkitCopy).collect(Collectors.toList()));
Bukkit.getPluginManager().callEvent(event);
return event;
}
}