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.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.Rotation;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -420,12 +420,13 @@ public class NPCCommands {
|
||||
public void attribute(CommandContext args, CommandSender sender, NPC npc,
|
||||
@Arg(value = 1, completionsProvider = OptionalAttributeCompletions.class) String attribute,
|
||||
@Arg(2) Double value) {
|
||||
|
||||
AttributeTrait trait = npc.getOrAddTrait(AttributeTrait.class);
|
||||
if (value == null) {
|
||||
trait.setDefaultAttribute(Attribute.valueOf(attribute));
|
||||
trait.setDefaultAttribute(Registry.ATTRIBUTE.get(SpigotUtil.getKey(attribute)));
|
||||
Messaging.sendTr(sender, Messages.ATTRIBUTE_RESET, attribute);
|
||||
} else {
|
||||
trait.setAttributeValue(Attribute.valueOf(attribute), value);
|
||||
trait.setAttributeValue(Registry.ATTRIBUTE.get(SpigotUtil.getKey(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.Location;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
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.util.DataKey;
|
||||
import net.citizensnpcs.api.util.Messaging;
|
||||
import net.citizensnpcs.api.util.SpigotUtil;
|
||||
import net.citizensnpcs.npc.ai.CitizensNavigator;
|
||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
||||
import net.citizensnpcs.trait.AttributeTrait;
|
||||
@ -398,8 +399,8 @@ public class CitizensNPC extends AbstractNPC {
|
||||
entity.setRemoveWhenFarAway(false);
|
||||
|
||||
if (type == EntityType.PLAYER || Util.isHorse(type)) {
|
||||
if (SUPPORT_ATTRIBUTES && !hasTrait(AttributeTrait.class)
|
||||
|| !getTrait(AttributeTrait.class).hasAttribute(Attribute.GENERIC_STEP_HEIGHT)) {
|
||||
if (SUPPORT_ATTRIBUTES && !hasTrait(AttributeTrait.class) || !getTrait(AttributeTrait.class)
|
||||
.hasAttribute(Registry.ATTRIBUTE.get(SpigotUtil.getKey("step_height")))) {
|
||||
NMS.setStepHeight(entity, 1);
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ import net.citizensnpcs.api.trait.TraitName;
|
||||
@TraitName("attributetrait")
|
||||
public class AttributeTrait extends Trait {
|
||||
@Persist(keyType = Attribute.class)
|
||||
private final Map<Attribute, Double> attributes = Maps.newEnumMap(Attribute.class);
|
||||
private final Map<Attribute, Double> attributes = Maps.newHashMap();
|
||||
|
||||
public AttributeTrait() {
|
||||
super("attributetrait");
|
||||
|
@ -38,7 +38,6 @@ public class Controllable extends Trait {
|
||||
private BuiltInControls controls;
|
||||
@Persist
|
||||
private boolean enabled = true;
|
||||
private ControllableInput input;
|
||||
@Persist("owner_required")
|
||||
private boolean ownerRequired;
|
||||
|
||||
@ -132,7 +131,7 @@ public class Controllable extends Trait {
|
||||
if (npc.getNavigator().isNavigating() || passengers.size() == 0 || !(passengers.get(0) instanceof Player))
|
||||
return;
|
||||
Player player = (Player) passengers.get(0);
|
||||
input = new ControllableInput();
|
||||
ControllableInput input = new ControllableInput();
|
||||
if (SUPPORTS_PLAYER_INPUT_EVENT) {
|
||||
input.forward = player.getCurrentInput().isForward() ? 1 : player.getCurrentInput().isBackward() ? -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);
|
||||
Vector vel = handle.getVelocity();
|
||||
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) {
|
||||
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))
|
||||
.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.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.attribute.AttributeInstance;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.AreaEffectCloud;
|
||||
@ -918,7 +918,8 @@ public class HologramTrait extends Trait {
|
||||
disp.setBackgroundColor(color);
|
||||
}
|
||||
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) {
|
||||
Transformation tf = disp.getTransformation();
|
||||
tf.getScale().set(inst.getValue());
|
||||
|
@ -5,7 +5,7 @@ import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
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.util.Messaging;
|
||||
import net.citizensnpcs.api.util.Placeholders;
|
||||
import net.citizensnpcs.api.util.SpigotUtil;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
import net.citizensnpcs.util.Util;
|
||||
|
||||
@ -142,11 +143,8 @@ public class BossBarTrait extends Trait {
|
||||
LivingEntity entity = (LivingEntity) npc.getEntity();
|
||||
double maxHealth = entity.getMaxHealth();
|
||||
if (SUPPORT_ATTRIBUTES) {
|
||||
try {
|
||||
maxHealth = entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue();
|
||||
} catch (Throwable t) {
|
||||
SUPPORT_ATTRIBUTES = false;
|
||||
}
|
||||
maxHealth = entity.getAttribute(Registry.ATTRIBUTE.get(SpigotUtil.getKey("max_health")))
|
||||
.getValue();
|
||||
}
|
||||
bar.setProgress(entity.getHealth() / maxHealth);
|
||||
}
|
||||
@ -277,4 +275,11 @@ public class BossBarTrait extends Trait {
|
||||
}
|
||||
|
||||
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.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.attribute.Attributable;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.attribute.AttributeInstance;
|
||||
import org.bukkit.block.Block;
|
||||
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.EntityDim;
|
||||
import net.citizensnpcs.api.util.Messaging;
|
||||
import net.citizensnpcs.api.util.SpigotUtil;
|
||||
import net.citizensnpcs.api.util.SpigotUtil.InventoryViewAPI;
|
||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||
@ -128,9 +129,9 @@ public class NMS {
|
||||
Consumer<NPCKnockbackEvent> cb) {
|
||||
if (npc.getEntity() == null)
|
||||
return;
|
||||
if (SUPPORT_KNOCKBACK_RESISTANCE && npc.getEntity() instanceof Attributable) {
|
||||
if (SUPPORTS_ATTRIBUTABLE && npc.getEntity() instanceof Attributable) {
|
||||
AttributeInstance attribute = ((Attributable) npc.getEntity())
|
||||
.getAttribute(Attribute.GENERIC_KNOCKBACK_RESISTANCE);
|
||||
.getAttribute(Registry.ATTRIBUTE.get(SpigotUtil.getKey("knockback_resistance")));
|
||||
if (attribute != null) {
|
||||
strength *= 1 - attribute.getValue();
|
||||
}
|
||||
@ -506,6 +507,10 @@ public class NMS {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static float getForwardBackwardMovement(org.bukkit.entity.Entity bukkitEntity) {
|
||||
return BRIDGE.getForwardBackwardMovement(bukkitEntity);
|
||||
}
|
||||
|
||||
public static MethodHandle getGetter(Class<?> clazz, String name) {
|
||||
return getGetter(clazz, name, true);
|
||||
}
|
||||
@ -528,10 +533,6 @@ public class NMS {
|
||||
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) {
|
||||
if (npc == null)
|
||||
return original;
|
||||
@ -674,10 +675,6 @@ public class NMS {
|
||||
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) {
|
||||
return BRIDGE.getViewingPlayers(entity);
|
||||
}
|
||||
@ -686,6 +683,10 @@ public class NMS {
|
||||
return BRIDGE.getWidth(entity);
|
||||
}
|
||||
|
||||
public static float getXZMovement(org.bukkit.entity.Entity bukkitEntity) {
|
||||
return BRIDGE.getXZMovement(bukkitEntity);
|
||||
}
|
||||
|
||||
public static float getYaw(Entity entity) {
|
||||
return BRIDGE.getYaw(entity);
|
||||
}
|
||||
@ -1047,7 +1048,7 @@ public class NMS {
|
||||
private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup();
|
||||
private static Field MODIFIERS_FIELD;
|
||||
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 MethodHandle UNSAFE_FIELD_OFFSET;
|
||||
private static MethodHandle UNSAFE_PUT_BOOLEAN;
|
||||
@ -1065,9 +1066,9 @@ public class NMS {
|
||||
PAPER_KNOCKBACK_EVENT_EXISTS = false;
|
||||
}
|
||||
try {
|
||||
Class.forName("org.bukkit.attribute.Attribute").getField("GENERIC_KNOCKBACK_RESISTANCE");
|
||||
} catch (Exception e) {
|
||||
SUPPORT_KNOCKBACK_RESISTANCE = false;
|
||||
Class.forName("org.bukkit.attribute.Attributable");
|
||||
} catch (ClassNotFoundException e) {
|
||||
SUPPORTS_ATTRIBUTABLE = false;
|
||||
}
|
||||
try {
|
||||
GameProfileRepository.class.getMethod("findProfilesByNames", String[].class, ProfileLookupCallback.class);
|
||||
|
Loading…
Reference in New Issue
Block a user