mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-11-22 02:25:57 +01:00
Add back compat for attribute
This commit is contained in:
parent
1579aa0e9e
commit
8878c238c0
@ -26,10 +26,10 @@ import org.bukkit.GameMode;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.Registry;
|
||||||
import org.bukkit.Rotation;
|
import org.bukkit.Rotation;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.attribute.Attribute;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -420,12 +420,13 @@ public class NPCCommands {
|
|||||||
public void attribute(CommandContext args, CommandSender sender, NPC npc,
|
public void attribute(CommandContext args, CommandSender sender, NPC npc,
|
||||||
@Arg(value = 1, completionsProvider = OptionalAttributeCompletions.class) String attribute,
|
@Arg(value = 1, completionsProvider = OptionalAttributeCompletions.class) String attribute,
|
||||||
@Arg(2) Double value) {
|
@Arg(2) Double value) {
|
||||||
|
|
||||||
AttributeTrait trait = npc.getOrAddTrait(AttributeTrait.class);
|
AttributeTrait trait = npc.getOrAddTrait(AttributeTrait.class);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
trait.setDefaultAttribute(Attribute.valueOf(attribute));
|
trait.setDefaultAttribute(Registry.ATTRIBUTE.get(SpigotUtil.getKey(attribute)));
|
||||||
Messaging.sendTr(sender, Messages.ATTRIBUTE_RESET, attribute);
|
Messaging.sendTr(sender, Messages.ATTRIBUTE_RESET, attribute);
|
||||||
} else {
|
} else {
|
||||||
trait.setAttributeValue(Attribute.valueOf(attribute), value);
|
trait.setAttributeValue(Registry.ATTRIBUTE.get(SpigotUtil.getKey(attribute)), value);
|
||||||
Messaging.sendTr(sender, Messages.ATTRIBUTE_SET, attribute, value);
|
Messaging.sendTr(sender, Messages.ATTRIBUTE_SET, attribute, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.Registry;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
@ -45,6 +45,7 @@ import net.citizensnpcs.api.trait.trait.MobType;
|
|||||||
import net.citizensnpcs.api.trait.trait.Spawned;
|
import net.citizensnpcs.api.trait.trait.Spawned;
|
||||||
import net.citizensnpcs.api.util.DataKey;
|
import net.citizensnpcs.api.util.DataKey;
|
||||||
import net.citizensnpcs.api.util.Messaging;
|
import net.citizensnpcs.api.util.Messaging;
|
||||||
|
import net.citizensnpcs.api.util.SpigotUtil;
|
||||||
import net.citizensnpcs.npc.ai.CitizensNavigator;
|
import net.citizensnpcs.npc.ai.CitizensNavigator;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
||||||
import net.citizensnpcs.trait.AttributeTrait;
|
import net.citizensnpcs.trait.AttributeTrait;
|
||||||
@ -398,8 +399,8 @@ public class CitizensNPC extends AbstractNPC {
|
|||||||
entity.setRemoveWhenFarAway(false);
|
entity.setRemoveWhenFarAway(false);
|
||||||
|
|
||||||
if (type == EntityType.PLAYER || Util.isHorse(type)) {
|
if (type == EntityType.PLAYER || Util.isHorse(type)) {
|
||||||
if (SUPPORT_ATTRIBUTES && !hasTrait(AttributeTrait.class)
|
if (SUPPORT_ATTRIBUTES && !hasTrait(AttributeTrait.class) || !getTrait(AttributeTrait.class)
|
||||||
|| !getTrait(AttributeTrait.class).hasAttribute(Attribute.GENERIC_STEP_HEIGHT)) {
|
.hasAttribute(Registry.ATTRIBUTE.get(SpigotUtil.getKey("step_height")))) {
|
||||||
NMS.setStepHeight(entity, 1);
|
NMS.setStepHeight(entity, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import net.citizensnpcs.api.trait.TraitName;
|
|||||||
@TraitName("attributetrait")
|
@TraitName("attributetrait")
|
||||||
public class AttributeTrait extends Trait {
|
public class AttributeTrait extends Trait {
|
||||||
@Persist(keyType = Attribute.class)
|
@Persist(keyType = Attribute.class)
|
||||||
private final Map<Attribute, Double> attributes = Maps.newEnumMap(Attribute.class);
|
private final Map<Attribute, Double> attributes = Maps.newHashMap();
|
||||||
|
|
||||||
public AttributeTrait() {
|
public AttributeTrait() {
|
||||||
super("attributetrait");
|
super("attributetrait");
|
||||||
|
@ -38,7 +38,6 @@ public class Controllable extends Trait {
|
|||||||
private BuiltInControls controls;
|
private BuiltInControls controls;
|
||||||
@Persist
|
@Persist
|
||||||
private boolean enabled = true;
|
private boolean enabled = true;
|
||||||
private ControllableInput input;
|
|
||||||
@Persist("owner_required")
|
@Persist("owner_required")
|
||||||
private boolean ownerRequired;
|
private boolean ownerRequired;
|
||||||
|
|
||||||
@ -132,7 +131,7 @@ public class Controllable extends Trait {
|
|||||||
if (npc.getNavigator().isNavigating() || passengers.size() == 0 || !(passengers.get(0) instanceof Player))
|
if (npc.getNavigator().isNavigating() || passengers.size() == 0 || !(passengers.get(0) instanceof Player))
|
||||||
return;
|
return;
|
||||||
Player player = (Player) passengers.get(0);
|
Player player = (Player) passengers.get(0);
|
||||||
input = new ControllableInput();
|
ControllableInput input = new ControllableInput();
|
||||||
if (SUPPORTS_PLAYER_INPUT_EVENT) {
|
if (SUPPORTS_PLAYER_INPUT_EVENT) {
|
||||||
input.forward = player.getCurrentInput().isForward() ? 1 : player.getCurrentInput().isBackward() ? -1 : 0;
|
input.forward = player.getCurrentInput().isForward() ? 1 : player.getCurrentInput().isBackward() ? -1 : 0;
|
||||||
input.horizontal = player.getCurrentInput().isLeft() ? 1 : player.getCurrentInput().isRight() ? -1 : 0;
|
input.horizontal = player.getCurrentInput().isLeft() ? 1 : player.getCurrentInput().isRight() ? -1 : 0;
|
||||||
@ -404,10 +403,8 @@ public class Controllable extends Trait {
|
|||||||
yaw = Math.toRadians(yaw);
|
yaw = Math.toRadians(yaw);
|
||||||
Vector vel = handle.getVelocity();
|
Vector vel = handle.getVelocity();
|
||||||
double oldSpeed = Math.sqrt(vel.getX() * vel.getX() + vel.getZ() * vel.getZ());
|
double oldSpeed = Math.sqrt(vel.getX() * vel.getX() + vel.getZ() * vel.getZ());
|
||||||
double nxsin = -Math.sin(yaw);
|
|
||||||
double xcos = Math.cos(yaw);
|
|
||||||
if (input.forward > 0) {
|
if (input.forward > 0) {
|
||||||
vel = vel.setX(nxsin * speed * speedMod).setZ(xcos * speed * speedMod);
|
vel = vel.setX(-Math.sin(yaw) * speed * speedMod).setZ(Math.cos(yaw) * speed * speedMod);
|
||||||
}
|
}
|
||||||
vel.add(new Vector(Math.sin(yaw + Math.PI / 2), 0D, -Math.cos(yaw + Math.PI / 2))
|
vel.add(new Vector(Math.sin(yaw + Math.PI / 2), 0D, -Math.cos(yaw + Math.PI / 2))
|
||||||
.multiply(speedMod * Setting.CONTROLLABLE_GROUND_DIRECTION_MODIFIER.asDouble() * input.horizontal));
|
.multiply(speedMod * Setting.CONTROLLABLE_GROUND_DIRECTION_MODIFIER.asDouble() * input.horizontal));
|
||||||
|
@ -17,7 +17,7 @@ import org.bukkit.Color;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Particle;
|
import org.bukkit.Particle;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.Registry;
|
||||||
import org.bukkit.attribute.AttributeInstance;
|
import org.bukkit.attribute.AttributeInstance;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.AreaEffectCloud;
|
import org.bukkit.entity.AreaEffectCloud;
|
||||||
@ -918,7 +918,8 @@ public class HologramTrait extends Trait {
|
|||||||
disp.setBackgroundColor(color);
|
disp.setBackgroundColor(color);
|
||||||
}
|
}
|
||||||
if (SpigotUtil.getVersion()[1] >= 21 && base.getEntity() instanceof LivingEntity) {
|
if (SpigotUtil.getVersion()[1] >= 21 && base.getEntity() instanceof LivingEntity) {
|
||||||
AttributeInstance inst = ((LivingEntity) base.getEntity()).getAttribute(Attribute.GENERIC_SCALE);
|
AttributeInstance inst = ((LivingEntity) base.getEntity())
|
||||||
|
.getAttribute(Registry.ATTRIBUTE.get(SpigotUtil.getKey("scale")));
|
||||||
if (inst != null) {
|
if (inst != null) {
|
||||||
Transformation tf = disp.getTransformation();
|
Transformation tf = disp.getTransformation();
|
||||||
tf.getScale().set(inst.getValue());
|
tf.getScale().set(inst.getValue());
|
||||||
|
@ -5,7 +5,7 @@ import java.util.List;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.Registry;
|
||||||
import org.bukkit.boss.BarColor;
|
import org.bukkit.boss.BarColor;
|
||||||
import org.bukkit.boss.BarFlag;
|
import org.bukkit.boss.BarFlag;
|
||||||
import org.bukkit.boss.BarStyle;
|
import org.bukkit.boss.BarStyle;
|
||||||
@ -33,6 +33,7 @@ import net.citizensnpcs.api.trait.Trait;
|
|||||||
import net.citizensnpcs.api.trait.TraitName;
|
import net.citizensnpcs.api.trait.TraitName;
|
||||||
import net.citizensnpcs.api.util.Messaging;
|
import net.citizensnpcs.api.util.Messaging;
|
||||||
import net.citizensnpcs.api.util.Placeholders;
|
import net.citizensnpcs.api.util.Placeholders;
|
||||||
|
import net.citizensnpcs.api.util.SpigotUtil;
|
||||||
import net.citizensnpcs.util.NMS;
|
import net.citizensnpcs.util.NMS;
|
||||||
import net.citizensnpcs.util.Util;
|
import net.citizensnpcs.util.Util;
|
||||||
|
|
||||||
@ -142,11 +143,8 @@ public class BossBarTrait extends Trait {
|
|||||||
LivingEntity entity = (LivingEntity) npc.getEntity();
|
LivingEntity entity = (LivingEntity) npc.getEntity();
|
||||||
double maxHealth = entity.getMaxHealth();
|
double maxHealth = entity.getMaxHealth();
|
||||||
if (SUPPORT_ATTRIBUTES) {
|
if (SUPPORT_ATTRIBUTES) {
|
||||||
try {
|
maxHealth = entity.getAttribute(Registry.ATTRIBUTE.get(SpigotUtil.getKey("max_health")))
|
||||||
maxHealth = entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue();
|
.getValue();
|
||||||
} catch (Throwable t) {
|
|
||||||
SUPPORT_ATTRIBUTES = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
bar.setProgress(entity.getHealth() / maxHealth);
|
bar.setProgress(entity.getHealth() / maxHealth);
|
||||||
}
|
}
|
||||||
@ -277,4 +275,11 @@ public class BossBarTrait extends Trait {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean SUPPORT_ATTRIBUTES = true;
|
private static boolean SUPPORT_ATTRIBUTES = true;
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
Class.forName("org.bukkit.attribute.Attribute");
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
SUPPORT_ATTRIBUTES = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,9 @@ import java.util.stream.Collectors;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Registry;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.attribute.Attributable;
|
import org.bukkit.attribute.Attributable;
|
||||||
import org.bukkit.attribute.Attribute;
|
|
||||||
import org.bukkit.attribute.AttributeInstance;
|
import org.bukkit.attribute.AttributeInstance;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
@ -61,6 +61,7 @@ import net.citizensnpcs.api.npc.NPC;
|
|||||||
import net.citizensnpcs.api.util.BoundingBox;
|
import net.citizensnpcs.api.util.BoundingBox;
|
||||||
import net.citizensnpcs.api.util.EntityDim;
|
import net.citizensnpcs.api.util.EntityDim;
|
||||||
import net.citizensnpcs.api.util.Messaging;
|
import net.citizensnpcs.api.util.Messaging;
|
||||||
|
import net.citizensnpcs.api.util.SpigotUtil;
|
||||||
import net.citizensnpcs.api.util.SpigotUtil.InventoryViewAPI;
|
import net.citizensnpcs.api.util.SpigotUtil.InventoryViewAPI;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
@ -128,9 +129,9 @@ public class NMS {
|
|||||||
Consumer<NPCKnockbackEvent> cb) {
|
Consumer<NPCKnockbackEvent> cb) {
|
||||||
if (npc.getEntity() == null)
|
if (npc.getEntity() == null)
|
||||||
return;
|
return;
|
||||||
if (SUPPORT_KNOCKBACK_RESISTANCE && npc.getEntity() instanceof Attributable) {
|
if (SUPPORTS_ATTRIBUTABLE && npc.getEntity() instanceof Attributable) {
|
||||||
AttributeInstance attribute = ((Attributable) npc.getEntity())
|
AttributeInstance attribute = ((Attributable) npc.getEntity())
|
||||||
.getAttribute(Attribute.GENERIC_KNOCKBACK_RESISTANCE);
|
.getAttribute(Registry.ATTRIBUTE.get(SpigotUtil.getKey("knockback_resistance")));
|
||||||
if (attribute != null) {
|
if (attribute != null) {
|
||||||
strength *= 1 - attribute.getValue();
|
strength *= 1 - attribute.getValue();
|
||||||
}
|
}
|
||||||
@ -506,6 +507,10 @@ public class NMS {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static float getForwardBackwardMovement(org.bukkit.entity.Entity bukkitEntity) {
|
||||||
|
return BRIDGE.getForwardBackwardMovement(bukkitEntity);
|
||||||
|
}
|
||||||
|
|
||||||
public static MethodHandle getGetter(Class<?> clazz, String name) {
|
public static MethodHandle getGetter(Class<?> clazz, String name) {
|
||||||
return getGetter(clazz, name, true);
|
return getGetter(clazz, name, true);
|
||||||
}
|
}
|
||||||
@ -528,10 +533,6 @@ public class NMS {
|
|||||||
return BRIDGE.getHeadYaw(entity);
|
return BRIDGE.getHeadYaw(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float getForwardBackwardMovement(org.bukkit.entity.Entity bukkitEntity) {
|
|
||||||
return BRIDGE.getForwardBackwardMovement(bukkitEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static float getJumpPower(NPC npc, float original) {
|
public static float getJumpPower(NPC npc, float original) {
|
||||||
if (npc == null)
|
if (npc == null)
|
||||||
return original;
|
return original;
|
||||||
@ -674,10 +675,6 @@ public class NMS {
|
|||||||
return BRIDGE.getVehicle(entity);
|
return BRIDGE.getVehicle(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float getXZMovement(org.bukkit.entity.Entity bukkitEntity) {
|
|
||||||
return BRIDGE.getXZMovement(bukkitEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Collection<Player> getViewingPlayers(org.bukkit.entity.Entity entity) {
|
public static Collection<Player> getViewingPlayers(org.bukkit.entity.Entity entity) {
|
||||||
return BRIDGE.getViewingPlayers(entity);
|
return BRIDGE.getViewingPlayers(entity);
|
||||||
}
|
}
|
||||||
@ -686,6 +683,10 @@ public class NMS {
|
|||||||
return BRIDGE.getWidth(entity);
|
return BRIDGE.getWidth(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static float getXZMovement(org.bukkit.entity.Entity bukkitEntity) {
|
||||||
|
return BRIDGE.getXZMovement(bukkitEntity);
|
||||||
|
}
|
||||||
|
|
||||||
public static float getYaw(Entity entity) {
|
public static float getYaw(Entity entity) {
|
||||||
return BRIDGE.getYaw(entity);
|
return BRIDGE.getYaw(entity);
|
||||||
}
|
}
|
||||||
@ -1047,7 +1048,7 @@ public class NMS {
|
|||||||
private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup();
|
private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup();
|
||||||
private static Field MODIFIERS_FIELD;
|
private static Field MODIFIERS_FIELD;
|
||||||
private static boolean PAPER_KNOCKBACK_EVENT_EXISTS = true;
|
private static boolean PAPER_KNOCKBACK_EVENT_EXISTS = true;
|
||||||
private static boolean SUPPORT_KNOCKBACK_RESISTANCE = true;
|
private static boolean SUPPORTS_ATTRIBUTABLE = true;
|
||||||
private static boolean SUPPORTS_FIND_PROFILES_BY_NAME = true;
|
private static boolean SUPPORTS_FIND_PROFILES_BY_NAME = true;
|
||||||
private static MethodHandle UNSAFE_FIELD_OFFSET;
|
private static MethodHandle UNSAFE_FIELD_OFFSET;
|
||||||
private static MethodHandle UNSAFE_PUT_BOOLEAN;
|
private static MethodHandle UNSAFE_PUT_BOOLEAN;
|
||||||
@ -1065,9 +1066,9 @@ public class NMS {
|
|||||||
PAPER_KNOCKBACK_EVENT_EXISTS = false;
|
PAPER_KNOCKBACK_EVENT_EXISTS = false;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Class.forName("org.bukkit.attribute.Attribute").getField("GENERIC_KNOCKBACK_RESISTANCE");
|
Class.forName("org.bukkit.attribute.Attributable");
|
||||||
} catch (Exception e) {
|
} catch (ClassNotFoundException e) {
|
||||||
SUPPORT_KNOCKBACK_RESISTANCE = false;
|
SUPPORTS_ATTRIBUTABLE = false;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
GameProfileRepository.class.getMethod("findProfilesByNames", String[].class, ProfileLookupCallback.class);
|
GameProfileRepository.class.getMethod("findProfilesByNames", String[].class, ProfileLookupCallback.class);
|
||||||
|
Loading…
Reference in New Issue
Block a user