Merge pull request #105 from D3v1s0m/2.X

Properties and build fix
This commit is contained in:
Pyr 2023-10-28 17:25:45 +02:00 committed by GitHub
commit 781d81cf7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 3 deletions

@ -10,7 +10,7 @@ public interface PropertyHolder {
* Method used to get the value of a property from a property holder
*
* @param key Unique key representing a property
* @return The value associated with the provided property key & this holder
* @return The value associated with the provided property key and this holder
* @param <T> The type of the property value
*/
<T> T getProperty(EntityProperty<T> key);

@ -127,6 +127,8 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
register(new DummyProperty<>("look_distance", configManager.getConfig().lookPropertyDistance()));
register(new DummyProperty<>("view_distance", configManager.getConfig().viewDistance()));
register(new DummyProperty<>("permission_required", false));
register(new GlowProperty(packetFactory));
register(new BitsetProperty("fire", 0, 0x01));
register(new BitsetProperty("invisible", 0, 0x20));
@ -274,6 +276,13 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
register(new BitsetProperty("is_retracting_spikes", guardianIndex++, 0x02, false, legacyBooleans));
linkProperties("is_elder", "is_retracting_spikes");
// TODO: add guardian beam target
} else {
int guardianIndex;
if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) guardianIndex = 16;
else if (ver.isNewerThanOrEquals(ServerVersion.V_1_15)) guardianIndex = 15;
else if (ver.isNewerThanOrEquals(ServerVersion.V_1_14)) guardianIndex = 14;
else guardianIndex = 12;
register(new BooleanProperty("is_retracting_spikes", guardianIndex, false, false));
}
// Horse

@ -115,7 +115,7 @@ public class NpcTypeImpl implements NpcType {
public NpcTypeImpl build() {
ServerVersion version = PacketEvents.getAPI().getServerManager().getVersion();
addProperties("fire", "invisible", "silent", "look", "look_distance", "view_distance",
"potion_color", "potion_ambient", "display_name");
"potion_color", "potion_ambient", "display_name", "permission_required");
if (!type.equals(EntityTypes.PLAYER)) addProperties("dinnerbone");
// TODO: make this look nicer after completing the rest of the properties
if (version.isNewerThanOrEquals(ServerVersion.V_1_9)) addProperties("glow");
@ -161,6 +161,9 @@ public class NpcTypeImpl implements NpcType {
if (EntityTypes.isTypeInstanceOf(type, EntityTypes.ABSTRACT_TAMEABLE_ANIMAL)) {
addProperties("tamed", "sitting");
}
if (EntityTypes.isTypeInstanceOf(type, EntityTypes.GUARDIAN)) {
addProperties("is_retracting_spikes");
}
return new NpcTypeImpl(name, type, hologramOffset, new HashSet<>(allowedProperties), defaultProperties);
}
}

@ -97,7 +97,7 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry {
register(builder(p, "guardian", EntityTypes.GUARDIAN)
.setHologramOffset(-1.125)
.addProperties("is_elder", "is_retracting_spikes"));
.addProperties("is_elder"));
register(builder(p, "horse", EntityTypes.HORSE)
.setHologramOffset(-0.375)

@ -30,6 +30,7 @@ public class NpcProcessorTask extends BukkitRunnable {
EntityPropertyImpl<Integer> viewDistanceProperty = propertyRegistry.getByName("view_distance", Integer.class); // Not sure why this is an Integer, but it is
EntityPropertyImpl<LookType> lookProperty = propertyRegistry.getByName("look", LookType.class);
EntityPropertyImpl<Double> lookDistanceProperty = propertyRegistry.getByName("look_distance", Double.class);
EntityPropertyImpl<Boolean> permissionRequiredProperty = propertyRegistry.getByName("permission_required", Boolean.class);
double lookDistance;
for (NpcEntryImpl entry : npcRegistry.getProcessable()) {
NpcImpl npc = entry.getNpc();
@ -39,11 +40,16 @@ public class NpcProcessorTask extends BukkitRunnable {
Player closest = null;
LookType lookType = npc.getProperty(lookProperty);
lookDistance = NumberConversions.square(npc.getProperty(lookDistanceProperty));
boolean permissionRequired = npc.getProperty(permissionRequiredProperty);
for (Player player : Bukkit.getOnlinePlayers()) {
if (!player.getWorld().equals(npc.getWorld())) {
if (npc.isVisibleTo(player)) npc.hide(player);
continue;
}
if (permissionRequired && !player.hasPermission("znpcsplus.npc." + entry.getId())) {
if (npc.isVisibleTo(player)) npc.hide(player);
continue;
}
double distance = player.getLocation().distanceSquared(npc.getBukkitLocation());
// visibility