Skip to content

Commit

Permalink
Use new metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
fullwall committed Apr 28, 2024
1 parent 194198a commit efd3ec5
Show file tree
Hide file tree
Showing 16 changed files with 81 additions and 37 deletions.
32 changes: 17 additions & 15 deletions main/src/main/java/net/citizensnpcs/trait/SleepTrait.java
Expand Up @@ -2,9 +2,11 @@

import org.bukkit.Location;
import org.bukkit.block.Bed;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.entity.Villager;

import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.persistence.Persist;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
Expand Down Expand Up @@ -36,30 +38,22 @@ public void run() {
}
return;
}
if (SUPPORT_BLOCKDATA == null) {
try {
SUPPORT_BLOCKDATA = true;
at.getBlock().getBlockData();
} catch (NoSuchMethodError e) {
SUPPORT_BLOCKDATA = false;
}
}
if (npc.getEntity() instanceof Player) {
Player player = (Player) npc.getEntity();
if (!SUPPORT_BLOCKSTATE) {
NMS.sleep(player, true);
} else {
npc.data().set(NPC.Metadata.ENTITY_POSE, "SLEEPING");
if (SUPPORT_BLOCKDATA) {
try {
if (SUPPORT_BLOCKDATA && at.getBlock().getBlockData() instanceof Bed
|| at.getBlock().getState() instanceof Bed) {
if (at.getBlock().getBlockData() instanceof Bed || at.getBlock().getState() instanceof Bed) {
player.sleep(at, true);
} else {
NMS.sleep(player, true);
}
} catch (Throwable t) {
SUPPORT_BLOCKSTATE = false;
SUPPORT_BLOCKDATA = false;
NMS.sleep(player, true);
}
} else {
NMS.sleep(player, true);
}
sleeping = true;
} else if (npc.getEntity() instanceof Villager) {
Expand All @@ -73,6 +67,7 @@ public void setSleeping(Location at) {
}

private void wakeup() {
npc.data().remove(NPC.Metadata.ENTITY_POSE);
if (npc.getEntity() instanceof Player) {
NMS.sleep((Player) npc.getEntity(), false);
} else if (npc.getEntity() instanceof Villager) {
Expand All @@ -82,5 +77,12 @@ private void wakeup() {
}

private static Boolean SUPPORT_BLOCKDATA = null;
private static boolean SUPPORT_BLOCKSTATE = true;
static {
try {
Block.class.getMethod("getBlockData");
SUPPORT_BLOCKDATA = true;
} catch (NoSuchMethodException | SecurityException e) {
SUPPORT_BLOCKDATA = false;
}
}
}
6 changes: 5 additions & 1 deletion main/src/main/java/net/citizensnpcs/util/NMSBridge.java
Expand Up @@ -40,7 +40,9 @@
import net.citizensnpcs.api.util.EntityDim;
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.MirrorTrait;
import net.citizensnpcs.trait.SneakTrait;
import net.citizensnpcs.trait.versioned.ArmadilloTrait.ArmadilloState;
import net.citizensnpcs.trait.versioned.CamelTrait.CamelPose;
import net.citizensnpcs.trait.versioned.SnifferTrait.SnifferState;
Expand Down Expand Up @@ -262,7 +264,9 @@ public default void setPolarBearRearing(Entity entity, boolean rearing) {
public void setSitting(Tameable tameable, boolean sitting);

public default void setSneaking(Entity entity, boolean sneaking) {
if (entity instanceof Player) {
if (entity instanceof NPCHolder) {
((NPCHolder) entity).getNPC().getOrAddTrait(SneakTrait.class).setSneaking(sneaking);
} else if (entity instanceof Player) {
((Player) entity).setSneaking(sneaking);
}
}
Expand Down
Expand Up @@ -47,6 +47,7 @@
import net.minecraft.server.v1_14_R1.Entity;
import net.minecraft.server.v1_14_R1.EntityHuman;
import net.minecraft.server.v1_14_R1.EntityPlayer;
import net.minecraft.server.v1_14_R1.EntityPose;
import net.minecraft.server.v1_14_R1.EnumGamemode;
import net.minecraft.server.v1_14_R1.EnumItemSlot;
import net.minecraft.server.v1_14_R1.EnumProtocolDirection;
Expand Down Expand Up @@ -357,7 +358,11 @@ public void playerTick() {
}
}
}
dB();
if (npc.data().has(NPC.Metadata.ENTITY_POSE)) {
setPose(EntityPose.valueOf(npc.data().get(NPC.Metadata.ENTITY_POSE)));
} else {
dB();
}
}

public void setMoveDestination(double x, double y, double z, double speed) {
Expand Down
Expand Up @@ -1500,9 +1500,10 @@ public void shutdown() {
}

@Override
public void sleep(Player player, boolean sleep) {
public void sleep(org.bukkit.entity.Player entity, boolean sleep) {
EntityPose pose = sleep ? EntityPose.SLEEPING : EntityPose.STANDING;
try {
ENTITY_SETPOSE_METHOD.invoke(getHandle(player), sleep ? EntityPose.SLEEPING : EntityPose.STANDING);
ENTITY_SETPOSE.invoke(getHandle(entity), pose);
} catch (Throwable e) {
e.printStackTrace();
}
Expand Down
Expand Up @@ -46,6 +46,7 @@
import net.minecraft.server.v1_15_R1.Entity;
import net.minecraft.server.v1_15_R1.EntityHuman;
import net.minecraft.server.v1_15_R1.EntityPlayer;
import net.minecraft.server.v1_15_R1.EntityPose;
import net.minecraft.server.v1_15_R1.EnumGamemode;
import net.minecraft.server.v1_15_R1.EnumItemSlot;
import net.minecraft.server.v1_15_R1.EnumProtocolDirection;
Expand Down Expand Up @@ -403,7 +404,11 @@ public void tick() {
}
}
}
dX();
if (npc.data().has(NPC.Metadata.ENTITY_POSE)) {
setPose(EntityPose.valueOf(npc.data().get(NPC.Metadata.ENTITY_POSE)));
} else {
dX();
}
}

public void updateAI() {
Expand Down
Expand Up @@ -1549,9 +1549,10 @@ public void shutdown() {
}

@Override
public void sleep(Player player, boolean sleep) {
public void sleep(org.bukkit.entity.Player entity, boolean sleep) {
EntityPose pose = sleep ? EntityPose.SLEEPING : EntityPose.STANDING;
try {
ENTITY_SETPOSE_METHOD.invoke(getHandle(player), sleep ? EntityPose.SLEEPING : EntityPose.STANDING);
ENTITY_SETPOSE.invoke(getHandle(entity), pose);
} catch (Throwable e) {
e.printStackTrace();
}
Expand Down
Expand Up @@ -45,6 +45,7 @@
import net.minecraft.server.v1_16_R3.Entity;
import net.minecraft.server.v1_16_R3.EntityHuman;
import net.minecraft.server.v1_16_R3.EntityPlayer;
import net.minecraft.server.v1_16_R3.EntityPose;
import net.minecraft.server.v1_16_R3.EnumGamemode;
import net.minecraft.server.v1_16_R3.EnumItemSlot;
import net.minecraft.server.v1_16_R3.EnumProtocolDirection;
Expand Down Expand Up @@ -368,7 +369,11 @@ public void tick() {
}
}
}
eu();
if (npc.data().has(NPC.Metadata.ENTITY_POSE)) {
setPose(EntityPose.valueOf(npc.data().get(NPC.Metadata.ENTITY_POSE)));
} else {
eu();
}
}

private void updatePackets(boolean navigating) {
Expand Down
Expand Up @@ -1573,9 +1573,10 @@ public void shutdown() {
}

@Override
public void sleep(Player player, boolean sleep) {
public void sleep(org.bukkit.entity.Player entity, boolean sleep) {
EntityPose pose = sleep ? EntityPose.SLEEPING : EntityPose.STANDING;
try {
ENTITY_SETPOSE_METHOD.invoke(getHandle(player), sleep ? EntityPose.SLEEPING : EntityPose.STANDING);
ENTITY_SETPOSE_METHOD.invoke(getHandle(entity), pose);
} catch (Throwable e) {
e.printStackTrace();
}
Expand Down
Expand Up @@ -48,6 +48,7 @@
import net.minecraft.stats.ServerStatsCounter;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
Expand Down Expand Up @@ -161,7 +162,11 @@ public void doTick() {
entity.playerTouch(this);
}
}
updatePlayerPose();
if (npc.data().has(NPC.Metadata.ENTITY_POSE)) {
setPose(Pose.valueOf(npc.data().get(NPC.Metadata.ENTITY_POSE)));
} else {
updatePlayerPose();
}
}

@Override
Expand Down
Expand Up @@ -1567,8 +1567,8 @@ public void shutdown() {
}

@Override
public void sleep(org.bukkit.entity.Player player, boolean sleeping) {
getHandle(player).setPose(sleeping ? Pose.SLEEPING : Pose.STANDING);
public void sleep(org.bukkit.entity.Player entity, boolean sleep) {
getHandle(entity).setPose(sleep ? Pose.SLEEPING : Pose.STANDING);
}

@Override
Expand Down
Expand Up @@ -49,6 +49,7 @@
import net.minecraft.stats.ServerStatsCounter;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
Expand Down Expand Up @@ -162,7 +163,11 @@ public void doTick() {
entity.playerTouch(this);
}
}
updatePlayerPose();
if (npc.data().has(NPC.Metadata.ENTITY_POSE)) {
setPose(Pose.valueOf(npc.data().get(NPC.Metadata.ENTITY_POSE)));
} else {
updatePlayerPose();
}
}

@Override
Expand Down
Expand Up @@ -1575,8 +1575,8 @@ public void shutdown() {
}

@Override
public void sleep(org.bukkit.entity.Player player, boolean sleeping) {
getHandle(player).setPose(sleeping ? Pose.SLEEPING : Pose.STANDING);
public void sleep(org.bukkit.entity.Player entity, boolean sleep) {
getHandle(entity).setPose(sleep ? Pose.SLEEPING : Pose.STANDING);
}

@Override
Expand Down
Expand Up @@ -49,6 +49,7 @@
import net.minecraft.tags.TagKey;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
Expand Down Expand Up @@ -155,7 +156,11 @@ public void doTick() {
entity.playerTouch(this);
}
}
updatePlayerPose();
if (npc.data().has(NPC.Metadata.ENTITY_POSE)) {
setPose(Pose.valueOf(npc.data().get(NPC.Metadata.ENTITY_POSE)));
} else {
updatePlayerPose();
}
}

@Override
Expand Down
Expand Up @@ -1774,8 +1774,8 @@ public void shutdown() {
}

@Override
public void sleep(org.bukkit.entity.Player player, boolean sleeping) {
getHandle(player).setPose(sleeping ? Pose.SLEEPING : Pose.STANDING);
public void sleep(org.bukkit.entity.Player entity, boolean sleep) {
getHandle(entity).setPose(sleep ? Pose.SLEEPING : Pose.STANDING);
}

@Override
Expand Down
Expand Up @@ -49,6 +49,7 @@
import net.minecraft.tags.TagKey;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
Expand Down Expand Up @@ -157,7 +158,11 @@ public void doTick() {
entity.playerTouch(this);
}
}
updatePlayerPose();
if (npc.data().has(NPC.Metadata.ENTITY_POSE)) {
setPose(Pose.valueOf(npc.data().get(NPC.Metadata.ENTITY_POSE)));
} else {
updatePlayerPose();
}
}

@Override
Expand Down
Expand Up @@ -1770,8 +1770,8 @@ public void shutdown() {
}

@Override
public void sleep(org.bukkit.entity.Player player, boolean sleeping) {
getHandle(player).setPose(sleeping ? Pose.SLEEPING : Pose.STANDING);
public void sleep(org.bukkit.entity.Player entity, boolean sleep) {
getHandle(entity).setPose(sleep ? Pose.SLEEPING : Pose.STANDING);
}

@Override
Expand Down

0 comments on commit efd3ec5

Please sign in to comment.