mirror of
https://github.com/filoghost/HolographicDisplays.git
synced 2025-03-11 06:03:32 +01:00
Start working on 1.13
This commit is contained in:
parent
0f92653f49
commit
7f8d0dc6c0
@ -76,6 +76,11 @@
|
||||
<artifactId>holographicdisplays-nms-v1_12_r1</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>holographicdisplays-nms-v1_13_r1</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
@ -3,26 +3,26 @@ package com.gmail.filoghost.holographicdisplays.nms.interfaces;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
// TODO: javadocs
|
||||
public interface FancyMessage {
|
||||
|
||||
public FancyMessage color(final ChatColor color);
|
||||
FancyMessage color(final ChatColor color);
|
||||
|
||||
public FancyMessage style(final ChatColor... styles);
|
||||
|
||||
public FancyMessage file(final String path);
|
||||
|
||||
public FancyMessage link(final String url);
|
||||
|
||||
public FancyMessage suggest(final String command);
|
||||
|
||||
public FancyMessage command(final String command);
|
||||
|
||||
public FancyMessage tooltip(final String text);
|
||||
FancyMessage style(final ChatColor... styles);
|
||||
|
||||
public FancyMessage then(final Object obj);
|
||||
|
||||
public String toJSONString();
|
||||
|
||||
public void send(Player player);
|
||||
|
||||
FancyMessage file(final String path);
|
||||
|
||||
FancyMessage link(final String url);
|
||||
|
||||
FancyMessage suggest(final String command);
|
||||
|
||||
FancyMessage command(final String command);
|
||||
|
||||
FancyMessage tooltip(final String text);
|
||||
|
||||
FancyMessage then(final Object obj);
|
||||
|
||||
String toJSONString();
|
||||
|
||||
void send(Player player);
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.interfaces.entity;
|
||||
|
||||
public interface NMSArmorStand extends NMSNameable {
|
||||
|
||||
}
|
||||
|
@ -1,8 +1,11 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.interfaces.entity;
|
||||
|
||||
public interface NMSCanMount extends NMSEntityBase {
|
||||
|
||||
// Sets the passenger of this entity through NMS.
|
||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase);
|
||||
|
||||
|
||||
/**
|
||||
* Sets the passenger of this entity through NMS.
|
||||
*
|
||||
* @param vehicleBase the new passenger.
|
||||
*/
|
||||
void setPassengerOfNMS(NMSEntityBase vehicleBase);
|
||||
}
|
||||
|
@ -6,26 +6,53 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
* An interface to represent a custom NMS entity being part of a hologram.
|
||||
*/
|
||||
public interface NMSEntityBase {
|
||||
|
||||
// Returns the linked CraftHologramLine, all the entities are part of a piece. Should never be null.
|
||||
public HologramLine getHologramLine();
|
||||
|
||||
// Sets if the entity should tick or not.
|
||||
public void setLockTick(boolean lock);
|
||||
|
||||
// Sets the location through NMS.
|
||||
public void setLocationNMS(double x, double y, double z);
|
||||
|
||||
// Returns if the entity is dead through NMS.
|
||||
public boolean isDeadNMS();
|
||||
|
||||
// Kills the entity through NMS.
|
||||
public void killEntityNMS();
|
||||
|
||||
// The entity ID.
|
||||
public int getIdNMS();
|
||||
|
||||
// Returns the bukkit entity.
|
||||
public org.bukkit.entity.Entity getBukkitEntityNMS();
|
||||
/**
|
||||
* Returns the linked HologramLine, all the entities are part of a piece.
|
||||
*
|
||||
* @return the hologram line, should never be null.
|
||||
*/
|
||||
HologramLine getHologramLine();
|
||||
|
||||
/**
|
||||
* Sets if the entity should tick or not.
|
||||
*
|
||||
* @param lock if the entity should tick or not.
|
||||
*/
|
||||
void setLockTick(boolean lock);
|
||||
|
||||
/**
|
||||
* Sets the entity location through NMS.
|
||||
*
|
||||
* @param x the new x coordinate.
|
||||
* @param y the new y coordinate.
|
||||
* @param z the new z coordinate.
|
||||
*/
|
||||
void setLocationNMS(double x, double y, double z);
|
||||
|
||||
/**
|
||||
* Returns if the entity is dead through NMS.
|
||||
*
|
||||
* @return true if the entity is dead, false otherwise.
|
||||
*/
|
||||
boolean isDeadNMS();
|
||||
|
||||
/**
|
||||
* Kills the entity through NMS.
|
||||
*/
|
||||
void killEntityNMS();
|
||||
|
||||
/**
|
||||
* Returns the entity ID through NMS.
|
||||
*
|
||||
* @return true if the entity is dead, false otherwise.
|
||||
*/
|
||||
int getIdNMS();
|
||||
|
||||
/**
|
||||
* Returns the bukkit Entity.
|
||||
*
|
||||
* @return the bukkit Entity instance.
|
||||
*/
|
||||
org.bukkit.entity.Entity getBukkitEntityNMS();
|
||||
}
|
||||
|
@ -1,11 +1,18 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.interfaces.entity;
|
||||
|
||||
public interface NMSNameable extends NMSEntityBase {
|
||||
|
||||
// Sets a custom name for this entity.
|
||||
public void setCustomNameNMS(String name);
|
||||
|
||||
// Returns the custom name of this entity.
|
||||
public String getCustomNameNMS();
|
||||
|
||||
|
||||
/**
|
||||
* Sets a custom name for this entity.
|
||||
*
|
||||
* @param name the new entity custom name.
|
||||
*/
|
||||
void setCustomNameNMS(String name);
|
||||
|
||||
/**
|
||||
* Returns the custom name of this entity.
|
||||
*
|
||||
* @return the entity custom name.
|
||||
*/
|
||||
String getCustomNameNMS();
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
<module>v1_10_R1</module>
|
||||
<module>v1_11_R1</module>
|
||||
<module>v1_12_R1</module>
|
||||
<module>v1_13_R1</module>
|
||||
<module>Aggregated</module>
|
||||
</modules>
|
||||
|
||||
|
@ -33,7 +33,7 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
super(world);
|
||||
super.persistent = true;
|
||||
super.collides = false;
|
||||
a(0.0F, 0.0F);
|
||||
setSize(0.0F, 0.0F);
|
||||
setSize(1);
|
||||
setInvisible(true);
|
||||
this.parentPiece = parentPiece;
|
||||
|
@ -29,7 +29,7 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
super(world);
|
||||
super.persistent = true;
|
||||
super.collides = false;
|
||||
a(0.0F, 0.0F);
|
||||
setSize(0.0F, 0.0F);
|
||||
setSize(1, false);
|
||||
setInvisible(true);
|
||||
this.parentPiece = parentPiece;
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_12_R1;
|
||||
|
||||
import net.minecraft.server.v1_12_R1.*;
|
||||
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
@ -7,21 +8,6 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorSta
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
|
||||
import net.minecraft.server.v1_12_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_12_R1.DamageSource;
|
||||
import net.minecraft.server.v1_12_R1.EntityArmorStand;
|
||||
import net.minecraft.server.v1_12_R1.EntityHuman;
|
||||
import net.minecraft.server.v1_12_R1.EntityPlayer;
|
||||
import net.minecraft.server.v1_12_R1.EnumHand;
|
||||
import net.minecraft.server.v1_12_R1.EnumInteractionResult;
|
||||
import net.minecraft.server.v1_12_R1.EnumItemSlot;
|
||||
import net.minecraft.server.v1_12_R1.ItemStack;
|
||||
import net.minecraft.server.v1_12_R1.NBTTagCompound;
|
||||
import net.minecraft.server.v1_12_R1.PacketPlayOutEntityTeleport;
|
||||
import net.minecraft.server.v1_12_R1.SoundEffect;
|
||||
import net.minecraft.server.v1_12_R1.Vec3D;
|
||||
import net.minecraft.server.v1_12_R1.World;
|
||||
|
||||
public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorStand {
|
||||
|
||||
private boolean lockTick;
|
||||
|
@ -29,7 +29,7 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
super(world);
|
||||
super.persistent = true;
|
||||
super.collides = false;
|
||||
a(0.0F, 0.0F);
|
||||
setSize(0.0F, 0.0F);
|
||||
setSize(1, false);
|
||||
setInvisible(true);
|
||||
this.parentPiece = parentPiece;
|
||||
|
42
NMS/v1_13_R1/pom.xml
Normal file
42
NMS/v1_13_R1/pom.xml
Normal file
@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>com.gmail.filoghost.holographicdisplays</groupId>
|
||||
<artifactId>holographicdisplays-nms</artifactId>
|
||||
<version>2.2.7-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>holographicdisplays-nms-v1_13_r1</artifactId>
|
||||
|
||||
<name>HolographicDisplaysNMSv1_13_R1</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>holographicdisplays-nms-interfaces</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>holographicdisplays-utils</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>${spigot-api.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>1.13-pre7-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,224 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
||||
|
||||
import org.bukkit.EntityEffect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftArmorStand;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.util.EulerAngle;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Non interactive version of the CraftArmorStand entity.
|
||||
*/
|
||||
public class CraftNMSArmorStand extends CraftArmorStand {
|
||||
|
||||
public CraftNMSArmorStand(CraftServer server, EntityNMSArmorStand entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle CraftEntity methods.
|
||||
*/
|
||||
|
||||
// Make the armour stand not removable. Very important to override.
|
||||
@Override
|
||||
public void remove() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVelocity(Vector vel) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Location loc) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Entity entity) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Location loc, TeleportCause cause) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Entity entity, TeleportCause cause) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFireTicks(int ticks) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setPassenger(Entity entity) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean eject() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean leaveVehicle() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playEffect(EntityEffect effect) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCustomName(String name) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCustomNameVisible(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGlowing(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGravity(boolean gravity) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInvulnerable(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMomentum(Vector value) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSilent(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTicksLived(int value) {
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle CraftLivingEntity methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public boolean addPotionEffect(PotionEffect effect) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addPotionEffect(PotionEffect effect, boolean param) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addPotionEffects(Collection<PotionEffect> effects) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRemoveWhenFarAway(boolean remove) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAI(boolean ai) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCanPickupItems(boolean pickup) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollidable(boolean collidable) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGliding(boolean gliding) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setLeashHolder(Entity holder) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle CraftArmourStand methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void setArms(boolean arms) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBasePlate(boolean basePlate) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBodyPose(EulerAngle pose) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBoots(ItemStack item) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChestplate(ItemStack item) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHelmet(ItemStack item) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemInHand(ItemStack item) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeadPose(EulerAngle pose) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLeftArmPose(EulerAngle pose) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLeftLegPose(EulerAngle pose) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLeggings(ItemStack item) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRightArmPose(EulerAngle pose) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRightLegPose(EulerAngle pose) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSmall(boolean small) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisible(boolean visible) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMarker(boolean marker) {
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
||||
|
||||
import org.bukkit.EntityEffect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftItem;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
/**
|
||||
* Non interactive version of the CraftItem entity.
|
||||
*/
|
||||
public class CraftNMSItem extends CraftItem {
|
||||
|
||||
public CraftNMSItem(CraftServer server, EntityNMSItem entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle CraftEntity methods.
|
||||
*/
|
||||
|
||||
// Make the item not removable. Very important to override.
|
||||
@Override
|
||||
public void remove() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVelocity(Vector vel) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Location loc) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Entity entity) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Location loc, TeleportCause cause) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Entity entity, TeleportCause cause) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFireTicks(int ticks) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setPassenger(Entity entity) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean eject() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean leaveVehicle() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playEffect(EntityEffect effect) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCustomName(String name) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCustomNameVisible(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGlowing(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGravity(boolean gravity) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInvulnerable(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMomentum(Vector value) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSilent(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTicksLived(int value) {
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle CraftItem methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void setItemStack(ItemStack stack) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPickupDelay(int delay) {
|
||||
}
|
||||
}
|
@ -0,0 +1,162 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
||||
|
||||
import org.bukkit.EntityEffect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftSlime;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Non interactive version of the CraftSlime entity.
|
||||
*/
|
||||
public class CraftNMSSlime extends CraftSlime {
|
||||
|
||||
public CraftNMSSlime(CraftServer server, EntityNMSSlime entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle CraftEntity methods.
|
||||
*/
|
||||
|
||||
// Make the slime not removable. Very important to override.
|
||||
@Override
|
||||
public void remove() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVelocity(Vector vel) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Location loc) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Entity entity) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Location loc, TeleportCause cause) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean teleport(Entity entity, TeleportCause cause) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFireTicks(int ticks) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setPassenger(Entity entity) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean eject() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean leaveVehicle() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playEffect(EntityEffect effect) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCustomName(String name) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCustomNameVisible(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGlowing(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGravity(boolean gravity) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInvulnerable(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMomentum(Vector value) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSilent(boolean flag) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTicksLived(int value) {
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle CraftLivingEntity methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public boolean addPotionEffect(PotionEffect effect) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addPotionEffect(PotionEffect effect, boolean param) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addPotionEffects(Collection<PotionEffect> effects) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRemoveWhenFarAway(boolean remove) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAI(boolean ai) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCanPickupItems(boolean pickup) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollidable(boolean collidable) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGliding(boolean gliding) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setLeashHolder(Entity holder) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle CraftSlime methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void setSize(int size) {
|
||||
}
|
||||
}
|
@ -0,0 +1,242 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||
import net.minecraft.server.v1_13_R1.*;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.util.CraftChatMessage;
|
||||
|
||||
/**
|
||||
* Non interactive version of the EntityArmorStand entity.
|
||||
*/
|
||||
public class EntityNMSArmorStand extends EntityArmorStand implements NMSArmorStand {
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
|
||||
public EntityNMSArmorStand(World world, HologramLine parentPiece) {
|
||||
super(world);
|
||||
super.setInvisible(true);
|
||||
super.setSmall(true);
|
||||
super.setArms(false);
|
||||
super.setNoGravity(true);
|
||||
super.setBasePlate(true);
|
||||
super.setMarker(true);
|
||||
super.collides = false;
|
||||
this.parentPiece = parentPiece;
|
||||
forceSetBoundingBox(new NullBoundingBox());
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the armour stand bounding box.
|
||||
*
|
||||
* @param boundingBox the new bounding box.
|
||||
*/
|
||||
public void forceSetBoundingBox(AxisAlignedBB boundingBox) {
|
||||
super.a(boundingBox);
|
||||
}
|
||||
|
||||
/*
|
||||
* Implement NMSEntityBase methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public HologramLine getHologramLine() {
|
||||
return parentPiece;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLockTick(boolean lock) {
|
||||
lockTick = lock;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocationNMS(double x, double y, double z) {
|
||||
super.setPosition(x, y, z);
|
||||
|
||||
// Send a teleport packet to update the position.
|
||||
PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport(this);
|
||||
|
||||
for (EntityHuman human : super.world.players) {
|
||||
if (human instanceof EntityPlayer) {
|
||||
EntityPlayer player = (EntityPlayer) human;
|
||||
|
||||
double distanceSquared = Utils.square(player.locX - super.locX) + Utils.square(player.locZ - super.locZ);
|
||||
if (distanceSquared < 8192 && player.playerConnection != null) {
|
||||
player.playerConnection.sendPacket(teleportPacket);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDeadNMS() {
|
||||
return super.dead;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void killEntityNMS() {
|
||||
super.dead = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIdNMS() {
|
||||
// Return the real ID without filtering the caller method.
|
||||
return super.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
/*
|
||||
* Implement NMSNameable methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void setCustomNameNMS(String name) {
|
||||
if (name != null && name.length() > 300) {
|
||||
name = name.substring(0, 300);
|
||||
}
|
||||
super.setCustomName(CraftChatMessage.fromStringOrNull(name));
|
||||
super.setCustomNameVisible(name != null && !name.isEmpty());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCustomNameNMS() {
|
||||
IChatBaseComponent customName = super.getCustomName();
|
||||
if (customName == null) {
|
||||
return null;
|
||||
}
|
||||
return CraftChatMessage.fromComponent(customName);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle vanilla Entity methods.
|
||||
*/
|
||||
|
||||
// Return the non interactive bukkit entity.
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (super.bukkitEntity == null) {
|
||||
super.bukkitEntity = new CraftNMSArmorStand(super.world.getServer(), this);
|
||||
}
|
||||
return super.bukkitEntity;
|
||||
}
|
||||
|
||||
// Do not save EntityArmourStand NBT data.
|
||||
@Override
|
||||
public void b(NBTTagCompound nbttagcompound) {
|
||||
}
|
||||
|
||||
// Do not save Entity ID data.
|
||||
@Override
|
||||
public boolean c(NBTTagCompound nbttagcompound) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Do not save Entity NBT data.
|
||||
@Override
|
||||
public NBTTagCompound save(NBTTagCompound nbttagcompound) {
|
||||
return nbttagcompound;
|
||||
}
|
||||
|
||||
// Do not load Entity NBT data.
|
||||
@Override
|
||||
public void f(NBTTagCompound nbttagcompound) {
|
||||
}
|
||||
|
||||
// Do not load EntityArmourStand NBT data.
|
||||
@Override
|
||||
public void a(NBTTagCompound nbttagcompound) {
|
||||
}
|
||||
|
||||
/*
|
||||
* The field Entity.invulnerable is private.
|
||||
* It's only used while saving NBTTags, but since the entity would be killed
|
||||
* on chunk unload, we prefer to override isInvulnerable().
|
||||
*/
|
||||
@Override
|
||||
public boolean isInvulnerable(DamageSource source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Prevent entity collisions.
|
||||
@Override
|
||||
public boolean isCollidable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent custom name changing.
|
||||
@Override
|
||||
public void setCustomName(IChatBaseComponent customName) {
|
||||
}
|
||||
|
||||
// Prevent custom name visibility changing.
|
||||
@Override
|
||||
public void setCustomNameVisible(boolean visible) {
|
||||
}
|
||||
|
||||
// Prevent armour stand being equipped by players interaction.
|
||||
@Override
|
||||
public EnumInteractionResult a(EntityHuman human, Vec3D vec3d, EnumHand hand) {
|
||||
return EnumInteractionResult.PASS;
|
||||
}
|
||||
|
||||
// Prevent armour stand being equipped via Entity method.
|
||||
@Override
|
||||
public boolean c(int i, ItemStack item) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent armour stand being equipped via EntityLiving method.
|
||||
@Override
|
||||
public void setSlot(EnumItemSlot slot, ItemStack item) {
|
||||
}
|
||||
|
||||
// Prevent armour stand bounding box changing.
|
||||
@Override
|
||||
public void a(AxisAlignedBB boundingBox) {
|
||||
}
|
||||
|
||||
// Inject fake id for movement packets.
|
||||
@Override
|
||||
public int getId() {
|
||||
StackTraceElement element = ReflectionUtils.getStackTraceElement(2);
|
||||
if (element != null && element.getFileName() != null && element.getFileName().equals("EntityTrackerEntry.java") && 158 < element.getLineNumber() && element.getLineNumber() < 168) {
|
||||
// Then this method is being called when creating a new movement packet, we return a fake ID!
|
||||
return -1;
|
||||
}
|
||||
|
||||
return super.getId();
|
||||
}
|
||||
|
||||
// Filter inactive ticks.
|
||||
@Override
|
||||
public void inactiveTick() {
|
||||
if (!lockTick) {
|
||||
super.inactiveTick();
|
||||
}
|
||||
}
|
||||
|
||||
// Filter ticks.
|
||||
@Override
|
||||
public void tick() {
|
||||
if (!lockTick) {
|
||||
super.tick();
|
||||
}
|
||||
}
|
||||
|
||||
// Remove sounds.
|
||||
@Override
|
||||
public void a(SoundEffect soundeffect, float f, float f1) {
|
||||
}
|
||||
|
||||
// Prevent being killed.
|
||||
@Override
|
||||
public void die() {
|
||||
}
|
||||
}
|
@ -0,0 +1,229 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.ItemLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ItemUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import net.minecraft.server.v1_13_R1.*;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class EntityNMSItem extends EntityItem implements NMSItem {
|
||||
|
||||
private boolean lockTick;
|
||||
private ItemLine parentPiece;
|
||||
private ItemPickupManager itemPickupManager;
|
||||
|
||||
public EntityNMSItem(World world, ItemLine piece, ItemPickupManager itemPickupManager) {
|
||||
super(world);
|
||||
super.pickupDelay = 32767; // Lock the item pickup delay, also prevents entities from picking up the item.
|
||||
this.parentPiece = piece;
|
||||
this.itemPickupManager = itemPickupManager;
|
||||
}
|
||||
|
||||
/*
|
||||
* Implement NMSEntityBase methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public ItemLine getHologramLine() {
|
||||
return parentPiece;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLockTick(boolean lock) {
|
||||
lockTick = lock;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocationNMS(double x, double y, double z) {
|
||||
super.setPosition(x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDeadNMS() {
|
||||
return super.dead;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void killEntityNMS() {
|
||||
super.dead = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIdNMS() {
|
||||
return super.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
||||
return getBukkitEntity();
|
||||
}
|
||||
|
||||
/*
|
||||
* Implement NMSCanMount methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
||||
if (!(vehicleBase instanceof Entity)) {
|
||||
// It should never dismount.
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = (Entity) vehicleBase;
|
||||
try {
|
||||
if (super.getVehicle() != null) {
|
||||
super.getVehicle().passengers.remove(this);
|
||||
}
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ax", entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
} catch (Exception ex) {
|
||||
DebugHandler.handleDebugException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Implement NMSItem methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void setItemStackNMS(org.bukkit.inventory.ItemStack stack) {
|
||||
ItemStack newItem = CraftItemStack.asNMSCopy(stack);
|
||||
|
||||
if (newItem == null) {
|
||||
newItem = new ItemStack(Blocks.BEDROCK);
|
||||
}
|
||||
|
||||
if (newItem.getTag() == null) {
|
||||
newItem.setTag(new NBTTagCompound());
|
||||
}
|
||||
NBTTagCompound display = newItem.getTag().getCompound("display"); // Returns a new NBTTagCompound if not existing
|
||||
if (!newItem.getTag().hasKey("display")) {
|
||||
newItem.getTag().set("display", display);
|
||||
}
|
||||
|
||||
NBTTagList tagList = new NBTTagList();
|
||||
tagList.add(new NBTTagString(ItemUtils.ANTISTACK_LORE)); // Antistack lore
|
||||
display.set("Lore", tagList);
|
||||
|
||||
newItem.setCount(1);
|
||||
setItemStack(newItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void allowPickup(boolean pickup) {
|
||||
if (pickup) {
|
||||
super.pickupDelay = 0;
|
||||
} else {
|
||||
super.pickupDelay = 32767;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getRawItemStack() {
|
||||
return super.getItemStack();
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle vanilla Entity methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (super.bukkitEntity == null) {
|
||||
super.bukkitEntity = new CraftNMSItem(super.world.getServer(), this);
|
||||
}
|
||||
return super.bukkitEntity;
|
||||
}
|
||||
|
||||
// Do not save EntityItem NBT data.
|
||||
@Override
|
||||
public void b(NBTTagCompound nbttagcompound) {
|
||||
}
|
||||
|
||||
// Do not save Entity ID data.
|
||||
@Override
|
||||
public boolean c(NBTTagCompound nbttagcompound) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Do not save Entity NBT data.
|
||||
@Override
|
||||
public NBTTagCompound save(NBTTagCompound nbttagcompound) {
|
||||
return nbttagcompound;
|
||||
}
|
||||
|
||||
// Do not load Entity NBT data.
|
||||
@Override
|
||||
public void f(NBTTagCompound nbttagcompound) {
|
||||
}
|
||||
|
||||
// Do not load EntityItem NBT data.
|
||||
@Override
|
||||
public void a(NBTTagCompound nbttagcompound) {
|
||||
}
|
||||
|
||||
/*
|
||||
* The field Entity.invulnerable is private.
|
||||
* It's only used while saving NBTTags, but since the entity would be killed
|
||||
* on chunk unload, we prefer to override isInvulnerable().
|
||||
*/
|
||||
@Override
|
||||
public boolean isInvulnerable(DamageSource source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollidable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Filter inactive ticks.
|
||||
@Override
|
||||
public void inactiveTick() {
|
||||
if (!lockTick) {
|
||||
super.inactiveTick();
|
||||
}
|
||||
}
|
||||
|
||||
// Filter ticks.
|
||||
@Override
|
||||
public void tick() {
|
||||
// So it won't get removed.
|
||||
ticksLived = 0;
|
||||
|
||||
if (!lockTick) {
|
||||
super.tick();
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent being killed.
|
||||
@Override
|
||||
public void die() {
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle vanilla EntityItem methods.
|
||||
*/
|
||||
|
||||
// Handle item pickup request. Called when a player is near the item entity.
|
||||
@Override
|
||||
public void d(EntityHuman human) {
|
||||
if (human.locY < super.locY - 1.5 || human.locY > super.locY + 1.0) {
|
||||
// Too low or too high, it's a bit weird.
|
||||
return;
|
||||
}
|
||||
|
||||
if (parentPiece.getPickupHandler() != null && human instanceof EntityPlayer) {
|
||||
itemPickupManager.handleItemLinePickup((Player) human.getBukkitEntity(), parentPiece.getPickupHandler(), parentPiece.getParent());
|
||||
// It is never added to the inventory.
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,221 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import net.minecraft.server.v1_13_R1.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftEntity;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
|
||||
/**
|
||||
* Non interactive version of the EntitySlime entity.
|
||||
*/
|
||||
public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
|
||||
private boolean lockTick;
|
||||
private HologramLine parentPiece;
|
||||
|
||||
public EntityNMSSlime(World world, HologramLine parentPiece) {
|
||||
super(world);
|
||||
super.persistent = true;
|
||||
super.collides = false;
|
||||
setSize(0.0F, 0.0F); // Set the entity size
|
||||
setSize(1, false); // Set the slime size
|
||||
setInvisible(true);
|
||||
this.parentPiece = parentPiece;
|
||||
forceSetBoundingBox(new NullBoundingBox());
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the armour stand bounding box.
|
||||
*
|
||||
* @param boundingBox the new bounding box.
|
||||
*/
|
||||
public void forceSetBoundingBox(AxisAlignedBB boundingBox) {
|
||||
super.a(boundingBox);
|
||||
}
|
||||
|
||||
/*
|
||||
* Implement NMSEntityBase methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public HologramLine getHologramLine() {
|
||||
return parentPiece;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLockTick(boolean lock) {
|
||||
lockTick = lock;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocationNMS(double x, double y, double z) {
|
||||
super.setPosition(x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDeadNMS() {
|
||||
return super.dead;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void killEntityNMS() {
|
||||
super.dead = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIdNMS() {
|
||||
return super.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
||||
return getBukkitEntity();
|
||||
}
|
||||
|
||||
/*
|
||||
* Implement NMSCanMount methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
||||
if (!(vehicleBase instanceof Entity)) {
|
||||
// It should never dismount.
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = (Entity) vehicleBase;
|
||||
try {
|
||||
if (super.getVehicle() != null) {
|
||||
super.getVehicle().passengers.remove(this);
|
||||
}
|
||||
|
||||
ReflectionUtils.setPrivateField(Entity.class, this, "ax", entity);
|
||||
entity.passengers.clear();
|
||||
entity.passengers.add(this);
|
||||
} catch (Exception ex) {
|
||||
DebugHandler.handleDebugException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle vanilla Entity methods.
|
||||
*/
|
||||
|
||||
// Do not save EntitySlime NBT data.
|
||||
@Override
|
||||
public void b(NBTTagCompound nbttagcompound) {
|
||||
}
|
||||
|
||||
// Do not save Entity ID data.
|
||||
@Override
|
||||
public boolean c(NBTTagCompound nbttagcompound) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Do not save Entity NBT data.
|
||||
@Override
|
||||
public NBTTagCompound save(NBTTagCompound nbttagcompound) {
|
||||
return nbttagcompound;
|
||||
}
|
||||
|
||||
// Do not load Entity NBT data.
|
||||
@Override
|
||||
public void f(NBTTagCompound nbttagcompound) {
|
||||
}
|
||||
|
||||
// Do not load EntityArmourStand NBT data.
|
||||
@Override
|
||||
public void a(NBTTagCompound nbttagcompound) {
|
||||
}
|
||||
|
||||
// Prevent armour stand bounding box changing.
|
||||
@Override
|
||||
public void a(AxisAlignedBB boundingBox) {
|
||||
// Do not change it!
|
||||
}
|
||||
|
||||
// Filter inactive ticks.
|
||||
@Override
|
||||
public void inactiveTick() {
|
||||
// Check inactive ticks.
|
||||
|
||||
if (!lockTick) {
|
||||
super.inactiveTick();
|
||||
}
|
||||
}
|
||||
|
||||
// Filter ticks.
|
||||
@Override
|
||||
public void tick() {
|
||||
// So it won't get removed automatically.
|
||||
ticksLived = 0;
|
||||
|
||||
if (!lockTick) {
|
||||
super.tick();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The field Entity.invulnerable is private.
|
||||
* It's only used while saving NBTTags, but since the entity would be killed
|
||||
* on chunk unload, we prefer to override isInvulnerable().
|
||||
*/
|
||||
@Override
|
||||
public boolean isInvulnerable(DamageSource source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Prevent entity collisions.
|
||||
@Override
|
||||
public boolean isCollidable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent custom name changing.
|
||||
@Override
|
||||
public void setCustomName(IChatBaseComponent customName) {
|
||||
}
|
||||
|
||||
// Prevent custom name visibility changing.
|
||||
@Override
|
||||
public void setCustomNameVisible(boolean visible) {
|
||||
}
|
||||
|
||||
// Remove sounds.
|
||||
@Override
|
||||
public void a(SoundEffect soundeffect, float f, float f1) {
|
||||
}
|
||||
|
||||
// Prevent being killed.
|
||||
@Override
|
||||
public void die() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (super.bukkitEntity == null) {
|
||||
super.bukkitEntity = new CraftNMSSlime(super.world.getServer(), this);
|
||||
}
|
||||
return super.bukkitEntity;
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle EntityLiving methods.
|
||||
*/
|
||||
|
||||
@Override
|
||||
public boolean damageEntity(DamageSource damageSource, float amount) {
|
||||
if (damageSource instanceof EntityDamageSource) {
|
||||
EntityDamageSource entityDamageSource = (EntityDamageSource) damageSource;
|
||||
if (entityDamageSource.getEntity() instanceof EntityPlayer) {
|
||||
Bukkit.getPluginManager().callEvent(new PlayerInteractEntityEvent(((EntityPlayer) entityDamageSource.getEntity()).getBukkitEntity(), getBukkitEntity())); // Bukkit takes care of the exceptions
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,165 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.FancyMessage;
|
||||
import com.google.gson.stream.JsonWriter;
|
||||
import net.minecraft.server.v1_13_R1.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_13_R1.PacketPlayOutChat;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class FancyMessageImpl implements FancyMessage {
|
||||
|
||||
private List<MessagePart> messageParts;
|
||||
|
||||
public FancyMessageImpl(String firstPartText) {
|
||||
messageParts = new ArrayList<>();
|
||||
messageParts.add(new MessagePart(firstPartText));
|
||||
}
|
||||
|
||||
@Override
|
||||
public FancyMessageImpl color(ChatColor color) {
|
||||
if (!color.isColor()) {
|
||||
throw new IllegalArgumentException(color.name() + " is not a color");
|
||||
}
|
||||
latest().color = color;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FancyMessageImpl style(ChatColor... styles) {
|
||||
for (ChatColor style : styles) {
|
||||
if (!style.isFormat()) {
|
||||
throw new IllegalArgumentException(style.name() + " is not a style");
|
||||
}
|
||||
}
|
||||
latest().styles = styles;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FancyMessageImpl file(String path) {
|
||||
onClick("open_file", path);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FancyMessageImpl link(String url) {
|
||||
onClick("open_url", url);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FancyMessageImpl suggest(String command) {
|
||||
onClick("suggest_command", command);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FancyMessageImpl command(String command) {
|
||||
onClick("run_command", command);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FancyMessageImpl tooltip(String text) {
|
||||
onHover("show_text", text);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FancyMessageImpl then(Object obj) {
|
||||
messageParts.add(new MessagePart(obj.toString()));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toJSONString() {
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
JsonWriter json = new JsonWriter(stringWriter);
|
||||
|
||||
try {
|
||||
if (messageParts.size() == 1) {
|
||||
latest().writeJson(json);
|
||||
} else {
|
||||
json.beginObject().name("text").value("").name("extra").beginArray();
|
||||
for (MessagePart part : messageParts) {
|
||||
part.writeJson(json);
|
||||
}
|
||||
json.endArray().endObject();
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("invalid message");
|
||||
}
|
||||
return stringWriter.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutChat(IChatBaseComponent.ChatSerializer.a(toJSONString())));
|
||||
}
|
||||
|
||||
private MessagePart latest() {
|
||||
return messageParts.get(messageParts.size() - 1);
|
||||
}
|
||||
|
||||
private void onClick(String name, String data) {
|
||||
MessagePart latest = latest();
|
||||
latest.clickActionName = name;
|
||||
latest.clickActionData = data;
|
||||
}
|
||||
|
||||
private void onHover(String name, String data) {
|
||||
MessagePart latest = latest();
|
||||
latest.hoverActionName = name;
|
||||
latest.hoverActionData = data;
|
||||
}
|
||||
|
||||
static class MessagePart {
|
||||
|
||||
public ChatColor color = null;
|
||||
public ChatColor[] styles = null;
|
||||
public String clickActionName = null;
|
||||
public String clickActionData = null;
|
||||
public String hoverActionName = null;
|
||||
public String hoverActionData = null;
|
||||
public final String text;
|
||||
|
||||
public MessagePart(final String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public JsonWriter writeJson(final JsonWriter json) throws IOException {
|
||||
json.beginObject().name("text").value(text);
|
||||
if (color != null) {
|
||||
json.name("color").value(color.name().toLowerCase());
|
||||
}
|
||||
if (styles != null) {
|
||||
for (final ChatColor style : styles) {
|
||||
json.name(style == ChatColor.UNDERLINE ? "underlined" : style.name().toLowerCase()).value(true);
|
||||
}
|
||||
}
|
||||
if (clickActionName != null && clickActionData != null) {
|
||||
json.name("clickEvent")
|
||||
.beginObject()
|
||||
.name("action").value(clickActionName)
|
||||
.name("value").value(clickActionData)
|
||||
.endObject();
|
||||
}
|
||||
if (hoverActionName != null && hoverActionData != null) {
|
||||
json.name("hoverEvent")
|
||||
.beginObject()
|
||||
.name("action").value(hoverActionName)
|
||||
.name("value").value(hoverActionData)
|
||||
.endObject();
|
||||
}
|
||||
return json.endObject();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,148 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.ItemLine;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.FancyMessage;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.*;
|
||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||
import com.gmail.filoghost.holographicdisplays.util.VersionUtils;
|
||||
import net.minecraft.server.v1_13_R1.*;
|
||||
import org.apache.commons.lang.NotImplementedException;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.CraftChunk;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.CraftWorld;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftEntity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class NmsManagerImpl implements NMSManager {
|
||||
|
||||
private Method validateEntityMethod;
|
||||
|
||||
@Override
|
||||
public void setup() throws Exception {
|
||||
validateEntityMethod = World.class.getDeclaredMethod("b", Entity.class);
|
||||
validateEntityMethod.setAccessible(true);
|
||||
|
||||
registerCustomEntity(EntityNMSSlime.class, 55);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void registerCustomEntity(Class<? extends Entity> entityClass, int id) throws Exception {
|
||||
if (VersionUtils.isForgeServer()) {
|
||||
throw new UnsupportedOperationException("Forge based servers are not supported");
|
||||
} else {
|
||||
// Use reflection to get the RegistryID of entities.
|
||||
RegistryID<Class<? extends Entity>> registryID = (RegistryID<Class<? extends Entity>>) ReflectionUtils.getPrivateField(RegistryMaterials.class, EntityTypes.REGISTRY, "a");
|
||||
Object[] idToClassMap = (Object[]) ReflectionUtils.getPrivateField(RegistryID.class, registryID, "d");
|
||||
|
||||
// Save the the ID -> entity class mapping before the registration.
|
||||
Object oldValue = idToClassMap[id];
|
||||
|
||||
// Register the entity class.
|
||||
registryID.a(entityClass, id);
|
||||
|
||||
// Restore the ID -> entity class mapping.
|
||||
idToClassMap[id] = oldValue;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public NMSHorse spawnNMSHorse(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
||||
throw new NotImplementedException("Method can only be used on 1.7 or lower");
|
||||
}
|
||||
|
||||
@Override
|
||||
public NMSWitherSkull spawnNMSWitherSkull(org.bukkit.World bukkitWorld, double x, double y, double z, HologramLine parentPiece) {
|
||||
throw new NotImplementedException("Method can only be used on 1.7 or lower");
|
||||
}
|
||||
|
||||
@Override
|
||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||
EntityNMSItem customItem = new EntityNMSItem(nmsWorld, parentPiece, itemPickupManager);
|
||||
customItem.setLocationNMS(x, y, z);
|
||||
customItem.setItemStackNMS(stack);
|
||||
if (!addEntityToWorld(nmsWorld, customItem)) {
|
||||
DebugHandler.handleSpawnFail(parentPiece);
|
||||
}
|
||||
return customItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityNMSSlime spawnNMSSlime(org.bukkit.World bukkitWorld, double x, double y, double z, HologramLine parentPiece) {
|
||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||
EntityNMSSlime touchSlime = new EntityNMSSlime(nmsWorld, parentPiece);
|
||||
touchSlime.setLocationNMS(x, y, z);
|
||||
if (!addEntityToWorld(nmsWorld, touchSlime)) {
|
||||
DebugHandler.handleSpawnFail(parentPiece);
|
||||
}
|
||||
return touchSlime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NMSArmorStand spawnNMSArmorStand(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
||||
WorldServer nmsWorld = ((CraftWorld) world).getHandle();
|
||||
EntityNMSArmorStand invisibleArmorStand = new EntityNMSArmorStand(nmsWorld, parentPiece);
|
||||
invisibleArmorStand.setLocationNMS(x, y, z);
|
||||
if (!addEntityToWorld(nmsWorld, invisibleArmorStand)) {
|
||||
DebugHandler.handleSpawnFail(parentPiece);
|
||||
}
|
||||
return invisibleArmorStand;
|
||||
}
|
||||
|
||||
private boolean addEntityToWorld(WorldServer nmsWorld, Entity nmsEntity) {
|
||||
Validator.isTrue(Bukkit.isPrimaryThread(), "Async entity add");
|
||||
|
||||
final int chunkX = MathHelper.floor(nmsEntity.locX / 16.0);
|
||||
final int chunkZ = MathHelper.floor(nmsEntity.locZ / 16.0);
|
||||
|
||||
if (!nmsWorld.getChunkProviderServer().isLoaded(chunkX, chunkZ)) {
|
||||
// This should never happen
|
||||
nmsEntity.dead = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
nmsWorld.getChunkAt(chunkX, chunkZ).a(nmsEntity);
|
||||
nmsWorld.entityList.add(nmsEntity);
|
||||
|
||||
try {
|
||||
validateEntityMethod.invoke(nmsWorld, nmsEntity);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNMSEntityBase(org.bukkit.entity.Entity bukkitEntity) {
|
||||
return ((CraftEntity) bukkitEntity).getHandle() instanceof NMSEntityBase;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NMSEntityBase getNMSEntityBase(org.bukkit.entity.Entity bukkitEntity) {
|
||||
Entity nmsEntity = ((CraftEntity) bukkitEntity).getHandle();
|
||||
if (nmsEntity instanceof NMSEntityBase) {
|
||||
return ((NMSEntityBase) nmsEntity);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FancyMessage newFancyMessage(String text) {
|
||||
return new FancyMessageImpl(text);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUnloadUnsure(Chunk bukkitChunk) {
|
||||
// Field probably representing if the chunk is scheduled to be unloaded in ChunkProviderServer
|
||||
return bukkitChunk.getWorld().isChunkInUse(bukkitChunk.getX(), bukkitChunk.getZ()) || !((CraftChunk) bukkitChunk).getHandle().d;
|
||||
}
|
||||
}
|
@ -0,0 +1,124 @@
|
||||
package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
||||
|
||||
import net.minecraft.server.v1_13_R1.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_13_R1.BlockPosition;
|
||||
import net.minecraft.server.v1_13_R1.MovingObjectPosition;
|
||||
import net.minecraft.server.v1_13_R1.Vec3D;
|
||||
|
||||
public class NullBoundingBox extends AxisAlignedBB {
|
||||
|
||||
public NullBoundingBox() {
|
||||
super(0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double a() {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double a(AxisAlignedBB arg0, double arg1) {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB a(AxisAlignedBB arg0) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB a(double arg0, double arg1, double arg2) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MovingObjectPosition b(Vec3D arg0, Vec3D arg1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double b(AxisAlignedBB arg0, double arg1) {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double c(AxisAlignedBB arg0, double arg1) {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB grow(double arg0, double arg1, double arg2) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB shrink(double arg0) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB a(BlockPosition arg0) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean a(double arg0, double arg1, double arg2, double arg3, double arg4, double arg5) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean b(Vec3D arg0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean c(Vec3D arg0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(Vec3D arg0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB e(double arg0) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB g(double arg0) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB a(Vec3D arg0) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB b(AxisAlignedBB arg0) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB b(double arg0, double arg1, double arg2) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean c(AxisAlignedBB arg0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB d(double arg0, double arg1, double arg2) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean e(Vec3D arg0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
@ -27,7 +27,7 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
public EntityNMSSlime(World world, HologramLine parentPiece) {
|
||||
super(world);
|
||||
super.persistent = true;
|
||||
a(0.0F, 0.0F);
|
||||
setSize(0.0F, 0.0F);
|
||||
setSize(1);
|
||||
setInvisible(true);
|
||||
this.parentPiece = parentPiece;
|
||||
|
@ -27,7 +27,7 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
public EntityNMSSlime(World world, HologramLine parentPiece) {
|
||||
super(world);
|
||||
super.persistent = true;
|
||||
a(0.0F, 0.0F);
|
||||
setSize(0.0F, 0.0F);
|
||||
setSize(1);
|
||||
setInvisible(true);
|
||||
this.parentPiece = parentPiece;
|
||||
|
@ -32,7 +32,7 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
public EntityNMSSlime(World world, HologramLine parentPiece) {
|
||||
super(world);
|
||||
super.persistent = true;
|
||||
a(0.0F, 0.0F);
|
||||
setSize(0.0F, 0.0F);
|
||||
setSize(1);
|
||||
setInvisible(true);
|
||||
this.parentPiece = parentPiece;
|
||||
|
@ -32,7 +32,7 @@ public class EntityNMSSlime extends EntitySlime implements NMSSlime {
|
||||
public EntityNMSSlime(World world, HologramLine parentPiece) {
|
||||
super(world);
|
||||
super.persistent = true;
|
||||
a(0.0F, 0.0F);
|
||||
setSize(0.0F, 0.0F);
|
||||
setSize(1);
|
||||
setInvisible(true);
|
||||
this.parentPiece = parentPiece;
|
||||
|
18
pom.xml
18
pom.xml
@ -53,7 +53,7 @@
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
<spigot-api.version>1.12.2-R0.1-SNAPSHOT</spigot-api.version>
|
||||
<spigot-api.version>1.13-pre7-R0.1-SNAPSHOT</spigot-api.version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
@ -77,12 +77,12 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>3.0.0</version>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
@ -96,21 +96,17 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.20.1</version>
|
||||
<configuration>
|
||||
<!-- Force the right file encoding during unit testing -->
|
||||
<argLine>-Dfile.encoding=${project.build.sourceEncoding} @{argLine}</argLine>
|
||||
</configuration>
|
||||
<version>2.22.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.0.0</version>
|
||||
<version>3.0.1</version>
|
||||
<configuration>
|
||||
<show>public</show>
|
||||
<failOnError>false</failOnError>
|
||||
@ -124,7 +120,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<version>3.1.1</version>
|
||||
<configuration>
|
||||
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||
</configuration>
|
||||
|
Loading…
Reference in New Issue
Block a user