mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-25 12:05:53 +01:00
1262 lines
54 KiB
Diff
1262 lines
54 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
|
|
Date: Mon, 21 Jun 2021 23:56:07 -0400
|
|
Subject: [PATCH] Missing Entity API
|
|
|
|
== AT ==
|
|
public net.minecraft.world.entity.animal.Fox isDefending()Z
|
|
public net.minecraft.world.entity.animal.Fox setDefending(Z)V
|
|
public net.minecraft.world.entity.animal.Fox setFaceplanted(Z)V
|
|
public net.minecraft.world.entity.animal.Panda getEatCounter()I
|
|
public net.minecraft.world.entity.animal.Panda setEatCounter(I)V
|
|
public net.minecraft.world.entity.animal.Bee isRolling()Z
|
|
public net.minecraft.world.entity.animal.Bee setRolling(Z)V
|
|
public net.minecraft.world.entity.animal.Bee numCropsGrownSincePollination
|
|
public net.minecraft.world.entity.animal.Bee ticksWithoutNectarSinceExitingHive
|
|
public net.minecraft.world.entity.monster.piglin.Piglin isChargingCrossbow()Z
|
|
public net.minecraft.world.entity.ambient.Bat targetPosition
|
|
public net.minecraft.world.entity.monster.Ravager attackTick
|
|
public net.minecraft.world.entity.monster.Ravager stunnedTick
|
|
public net.minecraft.world.entity.monster.Ravager roarTick
|
|
public net.minecraft.world.entity.vehicle.MinecartTNT explode(D)V
|
|
public net.minecraft.world.entity.vehicle.MinecartTNT fuse
|
|
public net.minecraft.world.entity.monster.Endermite life
|
|
public net.minecraft.world.entity.projectile.AbstractArrow soundEvent
|
|
public net.minecraft.world.entity.monster.Phantom anchorPoint
|
|
public net.minecraft.world.entity.npc.WanderingTrader getWanderTarget()Lnet/minecraft/core/BlockPos;
|
|
public net.minecraft.world.entity.animal.AbstractSchoolingFish leader
|
|
public net.minecraft.world.entity.animal.AbstractSchoolingFish schoolSize
|
|
public net.minecraft.world.entity.animal.Rabbit moreCarrotTicks
|
|
public net.minecraft.world.entity.AreaEffectCloud ownerUUID
|
|
|
|
Co-authored-by: Nassim Jahnke <nassim@njahnke.dev>
|
|
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Co-authored-by: William Blake Galbreath <blake.galbreath@gmail.com>
|
|
Co-authored-by: SoSeDiK <mrsosedik@gmail.com>
|
|
Co-authored-by: booky10 <boooky10@gmail.com>
|
|
Co-authored-by: Amin <amin.haddou@frg.wwschool.de>
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
|
|
index f80a6ad7638453348ee82ea00b166a3aac029142..a08c00b8c0488d18be5e182f7892e5ab71d12247 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
|
|
@@ -164,7 +164,7 @@ public class MobGoalHelper {
|
|
bukkitMap.put(net.minecraft.world.entity.monster.Endermite.class, Endermite.class);
|
|
bukkitMap.put(net.minecraft.world.entity.monster.Evoker.class, Evoker.class);
|
|
bukkitMap.put(AbstractFish.class, Fish.class);
|
|
- bukkitMap.put(AbstractSchoolingFish.class, Fish.class); // close enough
|
|
+ bukkitMap.put(AbstractSchoolingFish.class, io.papermc.paper.entity.SchoolableFish.class);
|
|
bukkitMap.put(FlyingMob.class, Flying.class);
|
|
bukkitMap.put(net.minecraft.world.entity.animal.Fox.class, Fox.class);
|
|
bukkitMap.put(net.minecraft.world.entity.monster.Ghast.class, Ghast.class);
|
|
diff --git a/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java b/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..41bf71d116ffc5431586ce54abba7f8def6c1dcf
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java
|
|
@@ -0,0 +1,52 @@
|
|
+package io.papermc.paper.entity;
|
|
+
|
|
+import net.minecraft.world.entity.animal.AbstractSchoolingFish;
|
|
+import org.bukkit.craftbukkit.CraftServer;
|
|
+import org.bukkit.craftbukkit.entity.CraftFish;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+public class PaperSchoolableFish extends CraftFish implements SchoolableFish {
|
|
+
|
|
+ public PaperSchoolableFish(CraftServer server, AbstractSchoolingFish entity) {
|
|
+ super(server, entity);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public AbstractSchoolingFish getHandle() {
|
|
+ return (AbstractSchoolingFish) super.getHandle();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void startFollowing(@NotNull SchoolableFish fish) {
|
|
+ if (this.getHandle().isFollower()) { // If following a fish already, properly remove the old one
|
|
+ this.stopFollowing();
|
|
+ }
|
|
+
|
|
+ this.getHandle().startFollowing(((PaperSchoolableFish) fish).getHandle());
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void stopFollowing() {
|
|
+ this.getHandle().stopFollowing();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getSchoolSize() {
|
|
+ return this.getHandle().schoolSize;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getMaxSchoolSize() {
|
|
+ return this.getHandle().getMaxSchoolSize();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public SchoolableFish getSchoolLeader() {
|
|
+ AbstractSchoolingFish leader = this.getHandle().leader;
|
|
+ if (leader == null) {
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ return (SchoolableFish) leader.getBukkitEntity();
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/AbstractSchoolingFish.java b/src/main/java/net/minecraft/world/entity/animal/AbstractSchoolingFish.java
|
|
index 39ed3ca76d6b64ef3917280ec822721cc02afada..86b437836cb4b1f6e8ca9acd5f1f93b925cf9e51 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/AbstractSchoolingFish.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/AbstractSchoolingFish.java
|
|
@@ -52,6 +52,7 @@ public abstract class AbstractSchoolingFish extends AbstractFish {
|
|
}
|
|
|
|
public void stopFollowing() {
|
|
+ if (this.leader == null) return; // Avoid NPE, plugins can now set the leader and certain fish goals might cause this method to be called
|
|
this.leader.removeFollower();
|
|
this.leader = null;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
|
|
index 41f5b4fc4a4b7d2a54b08869d4afa450f34caf91..63678ff2e40d2ba0a5e97539394b18f97368f8cf 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
|
|
@@ -546,11 +546,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
|
|
this.setFlag(4, hasStung);
|
|
}
|
|
|
|
+ public net.kyori.adventure.util.TriState rollingOverride = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Rolling override
|
|
public boolean isRolling() {
|
|
return this.getFlag(2);
|
|
}
|
|
|
|
public void setRolling(boolean nearTarget) {
|
|
+ nearTarget = rollingOverride.toBooleanOrElse(nearTarget); // Paper - Rolling override
|
|
this.setFlag(2, nearTarget);
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
|
|
index 71a08510a928d4570822282bb31f14013ec3834a..4aeab90e778629c355189dfe79c39c4b21f5f5ac 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
|
|
@@ -44,6 +44,7 @@ public class Tadpole extends AbstractFish {
|
|
public int age;
|
|
protected static final ImmutableList<SensorType<? extends Sensor<? super Tadpole>>> SENSOR_TYPES = ImmutableList.of(SensorType.NEAREST_LIVING_ENTITIES, SensorType.NEAREST_PLAYERS, SensorType.HURT_BY, SensorType.FROG_TEMPTATIONS);
|
|
protected static final ImmutableList<MemoryModuleType<?>> MEMORY_TYPES = ImmutableList.of(MemoryModuleType.LOOK_TARGET, MemoryModuleType.NEAREST_VISIBLE_LIVING_ENTITIES, MemoryModuleType.WALK_TARGET, MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE, MemoryModuleType.PATH, MemoryModuleType.NEAREST_VISIBLE_ADULT, MemoryModuleType.TEMPTATION_COOLDOWN_TICKS, MemoryModuleType.IS_TEMPTED, MemoryModuleType.TEMPTING_PLAYER, MemoryModuleType.BREED_TARGET, MemoryModuleType.IS_PANICKING);
|
|
+ public boolean ageLocked; // Paper
|
|
|
|
public Tadpole(EntityType<? extends AbstractFish> type, Level world) {
|
|
super(type, world);
|
|
@@ -94,7 +95,7 @@ public class Tadpole extends AbstractFish {
|
|
@Override
|
|
public void aiStep() {
|
|
super.aiStep();
|
|
- if (!this.level().isClientSide) {
|
|
+ if (!this.level().isClientSide && !this.ageLocked) { // Paper
|
|
this.setAge(this.age + 1);
|
|
}
|
|
|
|
@@ -104,12 +105,14 @@ public class Tadpole extends AbstractFish {
|
|
public void addAdditionalSaveData(CompoundTag nbt) {
|
|
super.addAdditionalSaveData(nbt);
|
|
nbt.putInt("Age", this.age);
|
|
+ nbt.putBoolean("AgeLocked", this.ageLocked); // Paper
|
|
}
|
|
|
|
@Override
|
|
public void readAdditionalSaveData(CompoundTag nbt) {
|
|
super.readAdditionalSaveData(nbt);
|
|
this.setAge(nbt.getInt("Age"));
|
|
+ this.ageLocked = nbt.getBoolean("AgeLocked"); // Paper
|
|
}
|
|
|
|
@Nullable
|
|
@@ -162,6 +165,7 @@ public class Tadpole extends AbstractFish {
|
|
CompoundTag nbttagcompound = stack.getOrCreateTag();
|
|
|
|
nbttagcompound.putInt("Age", this.getAge());
|
|
+ nbttagcompound.putBoolean("AgeLocked", this.ageLocked); // Paper
|
|
}
|
|
|
|
@Override
|
|
@@ -171,6 +175,7 @@ public class Tadpole extends AbstractFish {
|
|
this.setAge(nbt.getInt("Age"));
|
|
}
|
|
|
|
+ this.ageLocked = nbt.getBoolean("AgeLocked"); // Paper
|
|
}
|
|
|
|
@Override
|
|
@@ -205,6 +210,7 @@ public class Tadpole extends AbstractFish {
|
|
}
|
|
|
|
private void ageUp(int seconds) {
|
|
+ if (this.ageLocked) return; // Paper
|
|
this.setAge(this.age + seconds * 20);
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
|
|
index 9f46eb8417ad19e6f1bbf369f4c6b94fdb915f5b..a974b57dfb007d14194c566421216003ffb0c5d6 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
|
|
@@ -698,6 +698,15 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,
|
|
|
|
}
|
|
|
|
+ // Paper Start - Horse API
|
|
+ public void setMouthOpen(boolean open) {
|
|
+ this.setFlag(FLAG_OPEN_MOUTH, open);
|
|
+ }
|
|
+ public boolean isMouthOpen() {
|
|
+ return this.getFlag(FLAG_OPEN_MOUTH);
|
|
+ }
|
|
+ // Paper End - Horse API
|
|
+
|
|
@Override
|
|
public InteractionResult mobInteract(Player player, InteractionHand hand) {
|
|
if (!this.isVehicle() && !this.isBaby()) {
|
|
@@ -740,6 +749,11 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,
|
|
this.setFlag(16, eatingGrass);
|
|
}
|
|
|
|
+ // Paper Start - Horse API
|
|
+ public void setForceStanding(boolean standing) {
|
|
+ this.setFlag(FLAG_STANDING, standing);
|
|
+ }
|
|
+ // Paper End - Horse API
|
|
public void setStanding(boolean angry) {
|
|
if (angry) {
|
|
this.setEating(false);
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
|
|
index edbb933d1f6f7fc6432f7a8b074c5dc20f47adfb..91fb62807b3c5600c83d4dc8d3fadf36e94e2133 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
|
|
@@ -74,7 +74,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder<Llama.V
|
|
@Nullable
|
|
private Llama caravanHead;
|
|
@Nullable
|
|
- private Llama caravanTail;
|
|
+ public Llama caravanTail; // Paper
|
|
|
|
public Llama(EntityType<? extends Llama> type, Level world) {
|
|
super(type, world);
|
|
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
|
index c23f05f0d951e0036fe2cf524989747fe236730b..cd59500565a305757872aaf41b03b49ffc005af5 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
|
@@ -84,6 +84,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
|
|
return entityliving.getMobType() != MobType.UNDEAD && entityliving.attackable();
|
|
};
|
|
private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0D).selector(WitherBoss.LIVING_ENTITY_SELECTOR);
|
|
+ // Paper start
|
|
+ private boolean canPortal = false;
|
|
+
|
|
+ public void setCanTravelThroughPortals(boolean canPortal) { this.canPortal = canPortal; }
|
|
+ // Paper end
|
|
|
|
public WitherBoss(EntityType<? extends WitherBoss> type, Level world) {
|
|
super(type, world);
|
|
@@ -595,7 +600,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
|
|
|
|
@Override
|
|
public boolean canChangeDimensions() {
|
|
- return false;
|
|
+ return super.canChangeDimensions() && canPortal; // Paper
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
|
|
index 8e72958dec9d4eb35330b72e057733a268e83745..decd59f7104ba26145e2150c3b8e5e0404d31885 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
|
|
@@ -457,6 +457,16 @@ public class EnderMan extends Monster implements NeutralMob {
|
|
this.entityData.set(EnderMan.DATA_STARED_AT, true);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public void setCreepy(boolean creepy) {
|
|
+ this.entityData.set(EnderMan.DATA_CREEPY, creepy);
|
|
+ }
|
|
+
|
|
+ public void setHasBeenStaredAt(boolean hasBeenStaredAt) {
|
|
+ this.entityData.set(EnderMan.DATA_STARED_AT, hasBeenStaredAt);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public boolean requiresCustomPersistence() {
|
|
return super.requiresCustomPersistence() || this.getCarriedBlock() != null;
|
|
diff --git a/src/main/java/net/minecraft/world/entity/monster/Ghast.java b/src/main/java/net/minecraft/world/entity/monster/Ghast.java
|
|
index e398a7d5c560b1d94b21fe3241365ef8592d9fc8..c135bc245f59a1af706f98b9d140dee77016b12f 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java
|
|
@@ -67,6 +67,12 @@ public class Ghast extends FlyingMob implements Enemy {
|
|
return this.explosionPower;
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public void setExplosionPower(int explosionPower) {
|
|
+ this.explosionPower = explosionPower;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
protected boolean shouldDespawnInPeaceful() {
|
|
return true;
|
|
diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
|
|
index c043f63ff861ccb0194fc8cf102c27af5bcfe491..d4ac3e566b47cfc8688bcc2ab08385b6de4693f8 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
|
|
@@ -201,6 +201,12 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {
|
|
}
|
|
|
|
public void startConverting(@Nullable UUID uuid, int delay) {
|
|
+ // Paper start - missing entity behaviour api - converting without entity event
|
|
+ this.startConverting(uuid, delay, true);
|
|
+ }
|
|
+
|
|
+ public void startConverting(@Nullable UUID uuid, int delay, boolean broadcastEntityEvent) {
|
|
+ // Paper end - missing entity behaviour api - converting without entity event
|
|
this.conversionStarter = uuid;
|
|
this.villagerConversionTime = delay;
|
|
this.getEntityData().set(ZombieVillager.DATA_CONVERTING_ID, true);
|
|
@@ -208,7 +214,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {
|
|
this.removeEffect(MobEffects.WEAKNESS, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.CONVERSION);
|
|
this.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, delay, Math.min(this.level().getDifficulty().getId() - 1, 0)), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.CONVERSION);
|
|
// CraftBukkit end
|
|
- this.level().broadcastEntityEvent(this, (byte) 16);
|
|
+ if (broadcastEntityEvent) this.level().broadcastEntityEvent(this, (byte) 16); // Paper - missing entity behaviour api - converting without entity event
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownTrident.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownTrident.java
|
|
index 61d4877b4f74362e38104bfeacb7d66534ad798e..454dd67920826b8b62c2654abfd43fc08c2648e4 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/ThrownTrident.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownTrident.java
|
|
@@ -105,6 +105,20 @@ public class ThrownTrident extends AbstractArrow {
|
|
return (Boolean) this.entityData.get(ThrownTrident.ID_FOIL);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public void setFoil(boolean foil) {
|
|
+ this.entityData.set(ThrownTrident.ID_FOIL, foil);
|
|
+ }
|
|
+
|
|
+ public int getLoyalty() {
|
|
+ return this.entityData.get(ThrownTrident.ID_LOYALTY);
|
|
+ }
|
|
+
|
|
+ public void setLoyalty(byte loyalty) {
|
|
+ this.entityData.set(ThrownTrident.ID_LOYALTY, loyalty);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Nullable
|
|
@Override
|
|
protected EntityHitResult findHitEntity(Vec3 currentPosition, Vec3 nextPosition) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
|
|
index c3a26a55f46737a470448c6554d6827b1d6fc89c..c0186224fd64d70770a0e16752d17c0870121d8f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
|
|
@@ -829,14 +829,19 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
|
|
} else if (Phantom.class.isAssignableFrom(clazz)) {
|
|
entity = net.minecraft.world.entity.EntityType.PHANTOM.create(world);
|
|
} else if (Fish.class.isAssignableFrom(clazz)) {
|
|
- if (Cod.class.isAssignableFrom(clazz)) {
|
|
- entity = net.minecraft.world.entity.EntityType.COD.create(world);
|
|
+ // Paper start - Schooling Fish API
|
|
+ if (io.papermc.paper.entity.SchoolableFish.class.isAssignableFrom(clazz)) {
|
|
+ if (Cod.class.isAssignableFrom(clazz)) {
|
|
+ entity = net.minecraft.world.entity.EntityType.COD.create(world);
|
|
+ } else if (Salmon.class.isAssignableFrom(clazz)) {
|
|
+ entity = net.minecraft.world.entity.EntityType.SALMON.create(world);
|
|
+ } else if (TropicalFish.class.isAssignableFrom(clazz)) {
|
|
+ entity = net.minecraft.world.entity.EntityType.TROPICAL_FISH.create(world);
|
|
+ }
|
|
+ // Paper stop
|
|
} else if (PufferFish.class.isAssignableFrom(clazz)) {
|
|
entity = net.minecraft.world.entity.EntityType.PUFFERFISH.create(world);
|
|
- } else if (Salmon.class.isAssignableFrom(clazz)) {
|
|
- entity = net.minecraft.world.entity.EntityType.SALMON.create(world);
|
|
- } else if (TropicalFish.class.isAssignableFrom(clazz)) {
|
|
- entity = net.minecraft.world.entity.EntityType.TROPICAL_FISH.create(world);
|
|
+ // Paper - remove old fish impl
|
|
} else if (Tadpole.class.isAssignableFrom(clazz)) {
|
|
entity = net.minecraft.world.entity.EntityType.TADPOLE.create(world);
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
|
|
index 264b3fb45c47fbb6be78262838a5c0438860915f..f9cd595ec28f0284d11bae6bfc5bf92d56526ef9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
|
|
@@ -114,4 +114,36 @@ public abstract class CraftAbstractHorse extends CraftAnimals implements Abstrac
|
|
public AbstractHorseInventory getInventory() {
|
|
return new CraftSaddledInventory(getHandle().inventory);
|
|
}
|
|
+
|
|
+ // Paper start - Horse API
|
|
+ @Override
|
|
+ public boolean isEatingGrass() {
|
|
+ return this.getHandle().isEating();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setEatingGrass(boolean eating) {
|
|
+ this.getHandle().setEating(eating);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isRearing() {
|
|
+ return this.getHandle().isStanding();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setRearing(boolean rearing) {
|
|
+ this.getHandle().setForceStanding(rearing);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isEating() {
|
|
+ return this.getHandle().isMouthOpen();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setEating(boolean eating) {
|
|
+ this.getHandle().setMouthOpen(eating);
|
|
+ }
|
|
+ // Paper end - Horse API
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
|
|
index 35580198ee9ea566dd2643a707653512c6cd938f..a46b2dfb2f1c0c7c3b55d81fc881e481348f98b8 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
|
|
@@ -244,4 +244,17 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud
|
|
this.getHandle().setOwner(null);
|
|
}
|
|
}
|
|
+
|
|
+ // Paper start - owner API
|
|
+ @Override
|
|
+ public java.util.UUID getOwnerUniqueId() {
|
|
+ return this.getHandle().ownerUUID;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setOwnerUniqueId(final java.util.UUID ownerUuid) {
|
|
+ this.getHandle().setOwner(null);
|
|
+ this.getHandle().ownerUUID = ownerUuid;
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java
|
|
index b0a3531476f5a05ae846b68d825eddc35ebddea9..1bb72f28085f3885bec068b586ec222111044884 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java
|
|
@@ -27,4 +27,25 @@ public class CraftBat extends CraftAmbient implements Bat {
|
|
public void setAwake(boolean state) {
|
|
this.getHandle().setResting(!state);
|
|
}
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public org.bukkit.Location getTargetLocation() {
|
|
+ net.minecraft.core.BlockPos pos = this.getHandle().targetPosition;
|
|
+ if (pos == null) {
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ return io.papermc.paper.util.MCUtil.toLocation(this.getHandle().level(), pos);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setTargetLocation(org.bukkit.Location location) {
|
|
+ net.minecraft.core.BlockPos pos = null;
|
|
+ if (location != null) {
|
|
+ pos = io.papermc.paper.util.MCUtil.toBlockPosition(location);
|
|
+ }
|
|
+
|
|
+ this.getHandle().targetPosition = pos;
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java
|
|
index cfff1be6a4a4936a2dadb2590abc3d33c123d048..3dac93b0ab5d5acf5b33dc4b0efed60319eb657b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java
|
|
@@ -86,4 +86,42 @@ public class CraftBee extends CraftAnimals implements Bee {
|
|
public void setCannotEnterHiveTicks(int ticks) {
|
|
this.getHandle().setStayOutOfHiveCountdown(ticks);
|
|
}
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public void setRollingOverride(net.kyori.adventure.util.TriState rolling) {
|
|
+ this.getHandle().rollingOverride = rolling;
|
|
+
|
|
+ this.getHandle().setRolling(this.getHandle().isRolling()); // Refresh rolling state
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isRolling() {
|
|
+ return this.getRollingOverride().toBooleanOrElse(this.getHandle().isRolling());
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public net.kyori.adventure.util.TriState getRollingOverride() {
|
|
+ return this.getHandle().rollingOverride;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setCropsGrownSincePollination(int crops) {
|
|
+ this.getHandle().numCropsGrownSincePollination = crops;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getCropsGrownSincePollination() {
|
|
+ return this.getHandle().numCropsGrownSincePollination;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setTicksSincePollination(int ticks) {
|
|
+ this.getHandle().ticksWithoutNectarSinceExitingHive = ticks;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getTicksSincePollination() {
|
|
+ return this.getHandle().ticksWithoutNectarSinceExitingHive;
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java
|
|
index 94be7d7d88b38d73592a6a76ee9b9b755ba6c588..6c9531c018be29b5794d047b50007fde1b50b494 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java
|
|
@@ -64,4 +64,26 @@ public class CraftCat extends CraftTameableAnimal implements Cat {
|
|
.byId(bukkit.ordinal());
|
|
}
|
|
}
|
|
+
|
|
+ // Paper Start - More cat api
|
|
+ @Override
|
|
+ public void setLyingDown(boolean lyingDown) {
|
|
+ this.getHandle().setLying(lyingDown);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isLyingDown() {
|
|
+ return this.getHandle().isLying();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setHeadUp(boolean headUp) {
|
|
+ this.getHandle().setRelaxStateOne(headUp);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isHeadUp() {
|
|
+ return this.getHandle().isRelaxStateOne();
|
|
+ }
|
|
+ // Paper End - More cat api
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java
|
|
index 64b75682a936e071353707f7615d6ff512fd617d..96f6e2fd9c6b20d34122abfe5c7fba732502d5a0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java
|
|
@@ -18,4 +18,26 @@ public class CraftChicken extends CraftAnimals implements Chicken {
|
|
public String toString() {
|
|
return "CraftChicken";
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean isChickenJockey() {
|
|
+ return this.getHandle().isChickenJockey();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setIsChickenJockey(boolean isChickenJockey) {
|
|
+ this.getHandle().setChickenJockey(isChickenJockey);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getEggLayTime() {
|
|
+ return this.getHandle().eggTime;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setEggLayTime(int eggLayTime) {
|
|
+ this.getHandle().eggTime = eggLayTime;
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java
|
|
index fa0bf7db880063427ba12df1df1c72240fff93e9..63e6b07e3b159c74d9ef17be20b5ab43d07f0f5f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java
|
|
@@ -3,7 +3,7 @@ package org.bukkit.craftbukkit.entity;
|
|
import org.bukkit.craftbukkit.CraftServer;
|
|
import org.bukkit.entity.Cod;
|
|
|
|
-public class CraftCod extends CraftFish implements Cod {
|
|
+public class CraftCod extends io.papermc.paper.entity.PaperSchoolableFish implements Cod { // Paper - School Fish API
|
|
|
|
public CraftCod(CraftServer server, net.minecraft.world.entity.animal.Cod entity) {
|
|
super(server, entity);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java
|
|
index 21dc209e6f98b6306833b41e2763e746047d5a94..983b9d6ddb58eff297e96e5c8b28ec427efa267d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java
|
|
@@ -40,6 +40,28 @@ public class CraftEnderman extends CraftMonster implements Enderman {
|
|
this.getHandle().setCarriedBlock(blockData == null ? null : ((CraftBlockData) blockData).getState());
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean isScreaming() {
|
|
+ return this.getHandle().isCreepy();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setScreaming(boolean screaming) {
|
|
+ this.getHandle().setCreepy(screaming);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean hasBeenStaredAt() {
|
|
+ return this.getHandle().hasBeenStaredAt();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setHasBeenStaredAt(boolean hasBeenStaredAt) {
|
|
+ this.getHandle().setHasBeenStaredAt(hasBeenStaredAt);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public EnderMan getHandle() {
|
|
return (EnderMan) this.entity;
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java
|
|
index fc0f0e841dc974d080e1abb9bbafb5165801131f..d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java
|
|
@@ -28,4 +28,15 @@ public class CraftEndermite extends CraftMonster implements Endermite {
|
|
public void setPlayerSpawned(boolean playerSpawned) {
|
|
// Nop
|
|
}
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public void setLifetimeTicks(int ticks) {
|
|
+ this.getHandle().life = ticks;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getLifetimeTicks() {
|
|
+ return this.getHandle().life;
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
index d270d9ca6f1dea0ad4e6a919b58b845eebf3dc87..0a29960fca388dd95710bdba19f37fde6be52073 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
@@ -232,10 +232,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
else { return new CraftSquid(server, (Squid) entity); }
|
|
}
|
|
else if (entity instanceof AbstractFish) {
|
|
- if (entity instanceof Cod) { return new CraftCod(server, (Cod) entity); }
|
|
+ // Paper start - Schooling Fish API
|
|
+ if (entity instanceof net.minecraft.world.entity.animal.AbstractSchoolingFish abstractSchoolingFish) {
|
|
+ if (entity instanceof Cod) { return new CraftCod(server, (Cod) entity); }
|
|
+ else if (entity instanceof Salmon) { return new CraftSalmon(server, (Salmon) entity); }
|
|
+ else if (entity instanceof TropicalFish) { return new CraftTropicalFish(server, (TropicalFish) entity); }
|
|
+ else { return new io.papermc.paper.entity.PaperSchoolableFish(server, abstractSchoolingFish); }
|
|
+ }
|
|
+ // Paper end
|
|
else if (entity instanceof Pufferfish) { return new CraftPufferFish(server, (Pufferfish) entity); }
|
|
- else if (entity instanceof Salmon) { return new CraftSalmon(server, (Salmon) entity); }
|
|
- else if (entity instanceof TropicalFish) { return new CraftTropicalFish(server, (TropicalFish) entity); }
|
|
+ // Paper - move fish
|
|
else if (entity instanceof Tadpole) { return new CraftTadpole(server, (Tadpole) entity); }
|
|
else { return new CraftFish(server, (AbstractFish) entity); }
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java
|
|
index 17164811bbcf983bef62c47bc99330074762267b..c455deb4fd2a7684bcc01a8212c362a2375c190b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java
|
|
@@ -113,4 +113,41 @@ public class CraftFox extends CraftAnimals implements Fox {
|
|
public boolean isFaceplanted() {
|
|
return this.getHandle().isFaceplanted();
|
|
}
|
|
+
|
|
+ // Paper start - Add more fox behavior API
|
|
+ @Override
|
|
+ public void setInterested(boolean interested) {
|
|
+ this.getHandle().setIsInterested(interested);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isInterested() {
|
|
+ return this.getHandle().isInterested();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setLeaping(boolean leaping) {
|
|
+ this.getHandle().setIsPouncing(leaping);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isLeaping() {
|
|
+ return this.getHandle().isPouncing();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setDefending(boolean defending) {
|
|
+ this.getHandle().setDefending(defending);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isDefending() {
|
|
+ return this.getHandle().isDefending();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setFaceplanted(boolean faceplanted) {
|
|
+ this.getHandle().setFaceplanted(faceplanted);
|
|
+ }
|
|
+ // Paper end - Add more fox behavior API
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java
|
|
index 2cec61a1bb050c1ef81c5fc3d0afafe9ff29d459..97fa4e1e70203194bd939618b2fad92665af6d59 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java
|
|
@@ -28,4 +28,17 @@ public class CraftGhast extends CraftFlying implements Ghast, CraftEnemy {
|
|
public void setCharging(boolean flag) {
|
|
this.getHandle().setCharging(flag);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getExplosionPower() {
|
|
+ return this.getHandle().getExplosionPower();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setExplosionPower(int explosionPower) {
|
|
+ com.google.common.base.Preconditions.checkArgument(explosionPower >= 0 && explosionPower <= 127, "The explosion power has to be between 0 and 127");
|
|
+ this.getHandle().setExplosionPower(explosionPower);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
|
|
index 9986ac517e11b076a29a8c8e3f480ec286fa5825..0ad16ee7b33582d214dab41eeee378d52c8e38ed 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
|
|
@@ -58,4 +58,36 @@ public class CraftLlama extends CraftChestedHorse implements Llama, com.destroys
|
|
public String toString() {
|
|
return "CraftLlama";
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean inCaravan() {
|
|
+ return this.getHandle().inCaravan();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void joinCaravan(@org.jetbrains.annotations.NotNull Llama llama) {
|
|
+ this.getHandle().joinCaravan(((CraftLlama) llama).getHandle());
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void leaveCaravan() {
|
|
+ this.getHandle().leaveCaravan();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean hasCaravanTail() {
|
|
+ return this.getHandle().hasCaravanTail();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Llama getCaravanHead() {
|
|
+ return this.getHandle().getCaravanHead() == null ? null : (Llama) this.getHandle().getCaravanHead().getBukkitEntity();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Llama getCaravanTail() {
|
|
+ return this.getHandle().caravanTail == null ? null : (Llama) this.getHandle().caravanTail.getBukkitEntity();
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java
|
|
index 17f5684cba9d3ed22d9925d1951520cc4751dfe2..3a3563a1bdbc0d84d973b3a04b50b78b4bc3d379 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java
|
|
@@ -33,4 +33,20 @@ public final class CraftMinecartHopper extends CraftMinecartContainer implements
|
|
public void setEnabled(boolean enabled) {
|
|
((MinecartHopper) this.getHandle()).setEnabled(enabled);
|
|
}
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.vehicle.MinecartHopper getHandle() {
|
|
+ return (net.minecraft.world.entity.vehicle.MinecartHopper) super.getHandle();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getPickupCooldown() {
|
|
+ throw new UnsupportedOperationException("Hopper minecarts don't have cooldowns");
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setPickupCooldown(int cooldown) {
|
|
+ throw new UnsupportedOperationException("Hopper minecarts don't have cooldowns");
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
|
|
index 77cede9c565a3bc404878c9a4028cadc90f6c010..ade11598bee28fea252e3500aaa1daefc506c175 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
|
|
@@ -27,6 +27,28 @@ public class CraftMushroomCow extends CraftCow implements MushroomCow {
|
|
this.getHandle().setVariant(net.minecraft.world.entity.animal.MushroomCow.MushroomType.values()[variant.ordinal()]);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getStewEffectDuration() {
|
|
+ throw new UnsupportedOperationException(); // TODO https://github.com/PaperMC/Paper/issues/9742
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setStewEffectDuration(int duration) {
|
|
+ throw new UnsupportedOperationException(); // TODO https://github.com/PaperMC/Paper/issues/9742
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public org.bukkit.potion.PotionEffectType getStewEffectType() {
|
|
+ throw new UnsupportedOperationException(); // TODO https://github.com/PaperMC/Paper/issues/9742
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setStewEffect(org.bukkit.potion.PotionEffectType type) {
|
|
+ throw new UnsupportedOperationException(); // TODO https://github.com/PaperMC/Paper/issues/9742
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public String toString() {
|
|
return "CraftMushroomCow";
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java
|
|
index 5467e4a74b70ff57b49d9e6bc686c493178f8511..56f9630dbe5d18d5ec33dc85f6531723022d6a3b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java
|
|
@@ -40,6 +40,32 @@ public class CraftPanda extends CraftAnimals implements Panda {
|
|
public void setHiddenGene(Gene gene) {
|
|
this.getHandle().setHiddenGene(CraftPanda.toNms(gene));
|
|
}
|
|
+ // Paper start - Panda API
|
|
+ @Override
|
|
+ public void setSneezeTicks(int ticks) {
|
|
+ this.getHandle().setSneezeCounter(ticks);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getSneezeTicks() {
|
|
+ return this.getHandle().getSneezeCounter();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setEatingTicks(int ticks) {
|
|
+ this.getHandle().setEatCounter(ticks);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getEatingTicks() {
|
|
+ return this.getHandle().getEatCounter();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setUnhappyTicks(int ticks) {
|
|
+ this.getHandle().setUnhappyCounter(ticks);
|
|
+ }
|
|
+ // Paper end - Panda API
|
|
|
|
@Override
|
|
public boolean isRolling() {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java
|
|
index 9304e201db1ec96d0916aa8ea781f3e4bc7991e6..8338effd39b1709dbe578e247710a8e58d83e3aa 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java
|
|
@@ -44,5 +44,25 @@ public class CraftPhantom extends CraftFlying implements Phantom, CraftEnemy {
|
|
public void setShouldBurnInDay(boolean shouldBurnInDay) {
|
|
getHandle().setShouldBurnInDay(shouldBurnInDay);
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public org.bukkit.Location getAnchorLocation() {
|
|
+ net.minecraft.core.BlockPos pos = this.getHandle().anchorPoint;
|
|
+ if (pos == null) {
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ return io.papermc.paper.util.MCUtil.toLocation(this.getHandle().level(), pos);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setAnchorLocation(org.bukkit.Location location) {
|
|
+ net.minecraft.core.BlockPos pos = null;
|
|
+ if (location != null) {
|
|
+ pos = io.papermc.paper.util.MCUtil.toBlockPosition(location);
|
|
+ }
|
|
+
|
|
+ this.getHandle().anchorPoint = pos;
|
|
+ }
|
|
// Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java
|
|
index 8b9695de6e3411cbcc2f97e4a4e243ec1d1dd076..03e74b29ebf0f9b9a0dbc6ffc872e22a22be20f0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java
|
|
@@ -84,4 +84,37 @@ public class CraftPiglin extends CraftPiglinAbstract implements Piglin, com.dest
|
|
public String toString() {
|
|
return "CraftPiglin";
|
|
}
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public void setChargingCrossbow(boolean chargingCrossbow) {
|
|
+ this.getHandle().setChargingCrossbow(chargingCrossbow);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isChargingCrossbow() {
|
|
+ return this.getHandle().isChargingCrossbow();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setDancing(boolean dancing) {
|
|
+ if (dancing) {
|
|
+ this.getHandle().getBrain().setMemory(net.minecraft.world.entity.ai.memory.MemoryModuleType.DANCING, true);
|
|
+ this.getHandle().getBrain().setMemory(net.minecraft.world.entity.ai.memory.MemoryModuleType.CELEBRATE_LOCATION, this.getHandle().getOnPos());
|
|
+ } else {
|
|
+ this.getHandle().getBrain().eraseMemory(net.minecraft.world.entity.ai.memory.MemoryModuleType.DANCING);
|
|
+ this.getHandle().getBrain().eraseMemory(net.minecraft.world.entity.ai.memory.MemoryModuleType.CELEBRATE_LOCATION);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setDancing(long duration) {
|
|
+ this.getHandle().getBrain().setMemoryWithExpiry(net.minecraft.world.entity.ai.memory.MemoryModuleType.DANCING, true, duration);
|
|
+ this.getHandle().getBrain().setMemoryWithExpiry(net.minecraft.world.entity.ai.memory.MemoryModuleType.CELEBRATE_LOCATION, this.getHandle().getOnPos(), duration);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isDancing() {
|
|
+ return this.getHandle().isDancing();
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java
|
|
index c7aec6f28e5d3546235b30f6b1112440a76163c5..fe075cfdf3097d6cb768e71b8cc360abb8eaf367 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java
|
|
@@ -17,4 +17,16 @@ public class CraftPolarBear extends CraftAnimals implements PolarBear {
|
|
public String toString() {
|
|
return "CraftPolarBear";
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean isStanding() {
|
|
+ return this.getHandle().isStanding();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setStanding(boolean standing) {
|
|
+ this.getHandle().setStanding(standing);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
|
|
index be20d5a3d5914683f40dc4a585b08a2f55616580..eb7e2902dc134847711284dd2af8abda7627c7ab 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
|
|
@@ -30,4 +30,15 @@ public class CraftRabbit extends CraftAnimals implements Rabbit {
|
|
public void setRabbitType(Type type) {
|
|
this.getHandle().setVariant(net.minecraft.world.entity.animal.Rabbit.Variant.values()[type.ordinal()]);
|
|
}
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public void setMoreCarrotTicks(int ticks) {
|
|
+ this.getHandle().moreCarrotTicks = ticks;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getMoreCarrotTicks() {
|
|
+ return this.getHandle().moreCarrotTicks;
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java
|
|
index cae59f77c704a5b9515dc4917ed5fdc89631ecfb..09796ce15658e3f7c223a265a547a51ee729ed40 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java
|
|
@@ -18,4 +18,35 @@ public class CraftRavager extends CraftRaider implements Ravager {
|
|
public String toString() {
|
|
return "CraftRavager";
|
|
}
|
|
+ // Paper start - Missing Entity Behavior
|
|
+ @Override
|
|
+ public int getAttackTicks() {
|
|
+ return this.getHandle().getAttackTick();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setAttackTicks(int ticks) {
|
|
+ this.getHandle().attackTick = ticks;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getStunnedTicks() {
|
|
+ return this.getHandle().getStunnedTick();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setStunnedTicks(int ticks) {
|
|
+ this.getHandle().stunnedTick = ticks;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getRoarTicks() {
|
|
+ return this.getHandle().getRoarTick();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setRoarTicks(int ticks) {
|
|
+ this.getHandle().roarTick = ticks;
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java
|
|
index b8140aa25a25870259b5644091c6643da1e14b54..d4d8ce60098c74508e2de9541bf6534988779764 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java
|
|
@@ -3,7 +3,7 @@ package org.bukkit.craftbukkit.entity;
|
|
import org.bukkit.craftbukkit.CraftServer;
|
|
import org.bukkit.entity.Salmon;
|
|
|
|
-public class CraftSalmon extends CraftFish implements Salmon {
|
|
+public class CraftSalmon extends io.papermc.paper.entity.PaperSchoolableFish implements Salmon { // Paper - Schooling Fish API
|
|
|
|
public CraftSalmon(CraftServer server, net.minecraft.world.entity.animal.Salmon entity) {
|
|
super(server, entity);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java
|
|
index 451a9bfd9b9b6945e224f1bb05c7951ed934b4e3..d7c6a0bbc5671ea8f2488230c94df5146a1e98b9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java
|
|
@@ -28,4 +28,15 @@ public class CraftTadpole extends CraftFish implements org.bukkit.entity.Tadpole
|
|
public void setAge(int age) {
|
|
this.getHandle().age = age;
|
|
}
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public void setAgeLock(boolean lock) {
|
|
+ this.getHandle().ageLocked = lock;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean getAgeLock() {
|
|
+ return this.getHandle().ageLocked;
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java
|
|
index 2d1fcbbaba2b88f2c19ae7553d89e50b30cf6581..c628594b981f276acae7b9337100d811f919631b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java
|
|
@@ -31,4 +31,27 @@ public class CraftTrident extends CraftArrow implements Trident {
|
|
public String toString() {
|
|
return "CraftTrident";
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean hasGlint() {
|
|
+ return this.getHandle().isFoil();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setGlint(boolean glint) {
|
|
+ this.getHandle().setFoil(glint);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getLoyaltyLevel() {
|
|
+ return this.getHandle().getLoyalty();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setLoyaltyLevel(int loyaltyLevel) {
|
|
+ com.google.common.base.Preconditions.checkArgument(loyaltyLevel >= 0 && loyaltyLevel <= 127, "The loyalty level has to be between 0 and 127");
|
|
+ this.getHandle().setLoyalty((byte) loyaltyLevel);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
|
|
index e3bde6d1c0e03407af1382a61748470063bb2e18..9e53c30801c700719c78c0fd521fd615c94e02c8 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
|
|
@@ -7,7 +7,7 @@ import org.bukkit.craftbukkit.CraftServer;
|
|
import org.bukkit.entity.TropicalFish;
|
|
import org.bukkit.entity.TropicalFish.Pattern;
|
|
|
|
-public class CraftTropicalFish extends CraftFish implements TropicalFish {
|
|
+public class CraftTropicalFish extends io.papermc.paper.entity.PaperSchoolableFish implements TropicalFish { // Paper - Schooling Fish API
|
|
|
|
public CraftTropicalFish(CraftServer server, net.minecraft.world.entity.animal.TropicalFish entity) {
|
|
super(server, entity);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
|
|
index 1cfbe9c476f4a254edf3edf4b70696bbaba78558..e9ec3455eabc473e104b5342a615a38c1ac25a4f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
|
|
@@ -29,6 +29,26 @@ public class CraftVex extends CraftMonster implements Vex {
|
|
public void setSummoner(org.bukkit.entity.Mob summoner) {
|
|
getHandle().setOwner(summoner == null ? null : ((CraftMob) summoner).getHandle());
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public boolean hasLimitedLifetime() {
|
|
+ return this.getHandle().hasLimitedLife;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setLimitedLifetime(boolean hasLimitedLifetime) {
|
|
+ this.getHandle().hasLimitedLife = hasLimitedLifetime;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getLimitedLifetimeTicks() {
|
|
+ return this.getHandle().limitedLifeTicks;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setLimitedLifetimeTicks(int ticks) {
|
|
+ this.getHandle().limitedLifeTicks = ticks;
|
|
+ }
|
|
// Paper end
|
|
|
|
@Override
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java
|
|
index e2a0c11867abee6add8775259c54f2052de7b1ad..fd968881eeec6dc5bdf90decc23a2bfc619c410d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java
|
|
@@ -60,13 +60,20 @@ public class CraftVillagerZombie extends CraftZombie implements ZombieVillager {
|
|
|
|
@Override
|
|
public void setConversionTime(int time) {
|
|
+ // Paper start - missing entity behaviour api - converting without entity event
|
|
+ this.setConversionTime(time, true);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setConversionTime(int time, boolean broadcastEntityEvent) {
|
|
+ // Paper stop - missing entity behaviour api - converting without entity event
|
|
if (time < 0) {
|
|
this.getHandle().villagerConversionTime = -1;
|
|
this.getHandle().getEntityData().set(net.minecraft.world.entity.monster.ZombieVillager.DATA_CONVERTING_ID, false);
|
|
this.getHandle().conversionStarter = null;
|
|
this.getHandle().removeEffect(MobEffects.DAMAGE_BOOST, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.CONVERSION);
|
|
} else {
|
|
- this.getHandle().startConverting(null, time);
|
|
+ this.getHandle().startConverting(null, time, broadcastEntityEvent); // Paper - missing entity behaviour api - converting without entity event
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
|
|
index 0e597394a3dd08f022614fc9777302fea581eb55..3cceefa0d6278924a19641a49bdf16bcdacb2233 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
|
|
@@ -49,5 +49,25 @@ public class CraftWanderingTrader extends CraftAbstractVillager implements Wande
|
|
public boolean canDrinkMilk() {
|
|
return getHandle().canDrinkMilk;
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public org.bukkit.Location getWanderingTowards() {
|
|
+ net.minecraft.core.BlockPos pos = this.getHandle().getWanderTarget();
|
|
+ if (pos == null) {
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ return io.papermc.paper.util.MCUtil.toLocation(this.getHandle().level(), pos);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setWanderingTowards(org.bukkit.Location location) {
|
|
+ net.minecraft.core.BlockPos pos = null;
|
|
+ if (location != null) {
|
|
+ pos = io.papermc.paper.util.MCUtil.toBlockPosition(location);
|
|
+ }
|
|
+
|
|
+ this.getHandle().setWanderTarget(pos);
|
|
+ }
|
|
// Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
|
index 794e4fe0a3fbd967f665b2707865c15491370c76..c284eb96a1e330078076cbe61f0f6e2ff4ed89bd 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
|
@@ -37,6 +37,13 @@ public class CraftWarden extends CraftMonster implements org.bukkit.entity.Warde
|
|
return this.getHandle().getAngerManagement().getActiveAnger(((CraftEntity) entity).getHandle());
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getHighestAnger() {
|
|
+ return this.getHandle().getAngerManagement().getActiveAnger(null);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public void increaseAnger(Entity entity, int increase) {
|
|
Preconditions.checkArgument(entity != null, "Entity cannot be null");
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
|
|
index 1113533d281ed159bb735040fb1f913482debf3a..7a8ce6956db56061af93ba9761f5d1057a90bc49 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
|
|
@@ -67,4 +67,36 @@ public class CraftWither extends CraftMonster implements Wither, com.destroystok
|
|
|
|
this.getHandle().setInvulnerableTicks(ticks);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean isCharged() {
|
|
+ return getHandle().isPowered();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getInvulnerableTicks() {
|
|
+ return getHandle().getInvulnerableTicks();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setInvulnerableTicks(int ticks) {
|
|
+ getHandle().setInvulnerableTicks(ticks);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean canTravelThroughPortals() {
|
|
+ return getHandle().canChangeDimensions();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setCanTravelThroughPortals(boolean value) {
|
|
+ getHandle().setCanTravelThroughPortals(value);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void enterInvulnerabilityPhase() {
|
|
+ this.getHandle().makeInvulnerable();
|
|
+ }
|
|
+ // Paper end
|
|
}
|