mirror of
https://github.com/filoghost/HolographicDisplays.git
synced 2024-09-28 23:27:31 +02:00
Drop 1.7 support
This commit is contained in:
parent
bfbe3400ce
commit
e026a78622
@ -30,7 +30,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bukkit</groupId>
|
<groupId>org.bukkit</groupId>
|
||||||
<artifactId>bukkit</artifactId>
|
<artifactId>bukkit</artifactId>
|
||||||
<version>1.7.2-R0.2-SNAPSHOT</version>
|
<version>1.8-R0.1-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bukkit</groupId>
|
<groupId>org.bukkit</groupId>
|
||||||
<artifactId>bukkit</artifactId>
|
<artifactId>bukkit</artifactId>
|
||||||
<version>1.7.2-R0.2-SNAPSHOT</version>
|
<version>1.8-R0.1-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@ -6,10 +6,8 @@ import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
|||||||
import com.gmail.filoghost.holographicdisplays.api.line.ItemLine;
|
import com.gmail.filoghost.holographicdisplays.api.line.ItemLine;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
|
|
||||||
public interface NMSManager {
|
public interface NMSManager {
|
||||||
|
|
||||||
@ -18,10 +16,6 @@ public interface NMSManager {
|
|||||||
|
|
||||||
public NMSArmorStand spawnNMSArmorStand(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece);
|
public NMSArmorStand spawnNMSArmorStand(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece);
|
||||||
|
|
||||||
public NMSHorse spawnNMSHorse(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece);
|
|
||||||
|
|
||||||
public NMSWitherSkull spawnNMSWitherSkull(org.bukkit.World bukkitWorld, double x, double y, double z, HologramLine parentPiece);
|
|
||||||
|
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager);
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager);
|
||||||
|
|
||||||
public NMSSlime spawnNMSSlime(org.bukkit.World bukkitWorld, double x, double y, double z, HologramLine parentPiece);
|
public NMSSlime spawnNMSSlime(org.bukkit.World bukkitWorld, double x, double y, double z, HologramLine parentPiece);
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.interfaces.entity;
|
|
||||||
|
|
||||||
public interface NMSHorse extends NMSNameable, NMSCanMount {
|
|
||||||
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.interfaces.entity;
|
|
||||||
|
|
||||||
public interface NMSWitherSkull extends NMSEntityBase {
|
|
||||||
|
|
||||||
}
|
|
@ -2,7 +2,6 @@ package com.gmail.filoghost.holographicdisplays.nms.v1_10_R1;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.craftbukkit.v1_10_R1.CraftChunk;
|
import org.bukkit.craftbukkit.v1_10_R1.CraftChunk;
|
||||||
@ -17,9 +16,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
|||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||||
@ -56,16 +53,6 @@ public class NmsManagerImpl implements NMSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||||
|
@ -2,7 +2,6 @@ package com.gmail.filoghost.holographicdisplays.nms.v1_11_R1;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.craftbukkit.v1_11_R1.CraftChunk;
|
import org.bukkit.craftbukkit.v1_11_R1.CraftChunk;
|
||||||
@ -17,9 +16,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
|||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||||
@ -65,16 +62,6 @@ public class NmsManagerImpl implements NMSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||||
|
@ -2,7 +2,6 @@ package com.gmail.filoghost.holographicdisplays.nms.v1_12_R1;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.CraftChunk;
|
import org.bukkit.craftbukkit.v1_12_R1.CraftChunk;
|
||||||
@ -17,9 +16,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
|||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||||
@ -65,16 +62,6 @@ public class NmsManagerImpl implements NMSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||||
|
@ -3,7 +3,6 @@ package com.gmail.filoghost.holographicdisplays.nms.v1_13_R1;
|
|||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.craftbukkit.v1_13_R1.CraftChunk;
|
import org.bukkit.craftbukkit.v1_13_R1.CraftChunk;
|
||||||
@ -18,9 +17,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
|||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||||
@ -73,16 +70,6 @@ public class NmsManagerImpl implements NMSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
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-parent</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
<relativePath>../../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>holographicdisplays-nms-v1_7_r1</artifactId>
|
|
||||||
<name>HolographicDisplays NMS v1_7_R1</name>
|
|
||||||
|
|
||||||
<repositories>
|
|
||||||
<repository>
|
|
||||||
<id>elmakers-repo</id>
|
|
||||||
<url>http://maven.elmakers.com/repository/</url>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-nms-interfaces</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-utils</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>bukkit</artifactId>
|
|
||||||
<version>1.7.2-R0.2-SNAPSHOT</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.7.2-R0.2-SNAPSHOT</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,64 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftHorse;
|
|
||||||
import org.bukkit.entity.AnimalTamer;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSHorse extends CraftHorse {
|
|
||||||
|
|
||||||
public CraftNMSHorse(CraftServer server, EntityNMSHorse entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from Horse class
|
|
||||||
@Override public void setVariant(Variant variant) { }
|
|
||||||
@Override public void setColor(Color color) { }
|
|
||||||
@Override public void setStyle(Style style) { }
|
|
||||||
@Override public void setCarryingChest(boolean chest) { }
|
|
||||||
@Override public void setDomestication(int domestication) { }
|
|
||||||
@Override public void setJumpStrength(double jump) { }
|
|
||||||
|
|
||||||
// Methods form Ageable class
|
|
||||||
@Override public void setAge(int age) { }
|
|
||||||
@Override public void setAgeLock(boolean lock) { }
|
|
||||||
@Override public void setBreed(boolean breed) { }
|
|
||||||
@Override public void setAdult() { }
|
|
||||||
@Override public void setBaby() { }
|
|
||||||
|
|
||||||
// Methods from LivingEntity class
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Tameable
|
|
||||||
@Override public void setTamed(boolean tame) { }
|
|
||||||
@Override public void setOwner(AnimalTamer owner) { }
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_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;
|
|
||||||
|
|
||||||
public class CraftNMSItem extends CraftItem {
|
|
||||||
|
|
||||||
public CraftNMSItem(CraftServer server, EntityNMSItem entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Item
|
|
||||||
@Override public void setItemStack(ItemStack stack) { }
|
|
||||||
@Override public void setPickupDelay(int delay) { }
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_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;
|
|
||||||
|
|
||||||
public class CraftNMSSlime extends CraftSlime {
|
|
||||||
|
|
||||||
public CraftNMSSlime(CraftServer server, EntityNMSSlime entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from LivingEntity class
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Slime
|
|
||||||
@Override public void setSize(int size) { }
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftWitherSkull;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSWitherSkull extends CraftWitherSkull {
|
|
||||||
|
|
||||||
public CraftNMSWitherSkull(CraftServer server, EntityNMSWitherSkull entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Method from Fireball
|
|
||||||
@Override public void setDirection(Vector dir) { }
|
|
||||||
|
|
||||||
// Method from Projectile
|
|
||||||
@Override public void setBounce(boolean bounce) { }
|
|
||||||
|
|
||||||
// Methods from Explosive
|
|
||||||
@Override public void setYield(float yield) { }
|
|
||||||
@Override public void setIsIncendiary(boolean fire) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
}
|
|
@ -1,184 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity;
|
|
||||||
|
|
||||||
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.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R1.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityHorse;
|
|
||||||
import net.minecraft.server.v1_7_R1.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R1.World;
|
|
||||||
|
|
||||||
public class EntityNMSHorse extends EntityHorse implements NMSHorse {
|
|
||||||
|
|
||||||
private boolean lockTick;
|
|
||||||
private HologramLine parentPiece;
|
|
||||||
|
|
||||||
public EntityNMSHorse(World world, HologramLine parentPiece) {
|
|
||||||
super(world);
|
|
||||||
super.ageLocked = true;
|
|
||||||
super.persistent = true;
|
|
||||||
super.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
setAge(-1700000); // This is a magic value. No one will see the real horse.
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The horse dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomName(String customName) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameVisible(boolean visible) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float volume, float pitch) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameNMS(String name) {
|
|
||||||
if (name != null && name.length() > 300) {
|
|
||||||
name = name.substring(0, 300);
|
|
||||||
}
|
|
||||||
super.setCustomName(name);
|
|
||||||
super.setCustomNameVisible(name != null && !name.isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSHorse(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return super.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getCustomNameNMS() {
|
|
||||||
return super.getCustomName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", (double) 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", (double) 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,219 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
|
||||||
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_7_R1.Blocks;
|
|
||||||
import net.minecraft.server.v1_7_R1.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityItem;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R1.ItemStack;
|
|
||||||
import net.minecraft.server.v1_7_R1.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R1.NBTTagList;
|
|
||||||
import net.minecraft.server.v1_7_R1.NBTTagString;
|
|
||||||
import net.minecraft.server.v1_7_R1.World;
|
|
||||||
|
|
||||||
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 = Integer.MAX_VALUE;
|
|
||||||
this.parentPiece = piece;
|
|
||||||
this.itemPickupManager = itemPickupManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The item dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItemStack() {
|
|
||||||
// Dirty method to check if the icon is being picked up
|
|
||||||
StackTraceElement element = ReflectionUtils.getStackTraceElement(2);
|
|
||||||
if (element != null && element.getFileName() != null && element.getClassName().contains("EntityInsentient")) {
|
|
||||||
return null; // Try to pickup this, dear entity ignoring the pickupDelay!
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getItemStack();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Method called when a player is near.
|
|
||||||
@Override
|
|
||||||
public void b_(EntityHuman human) {
|
|
||||||
|
|
||||||
if (parentPiece.getPickupHandler() != null && human instanceof EntityPlayer) {
|
|
||||||
itemPickupManager.handleItemLinePickup((Player) human.getBukkitEntity(), parentPiece.getPickupHandler(), parentPiece.getParent());
|
|
||||||
// It is never added to the inventory.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSItem(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return this.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItemStackNMS(org.bukkit.inventory.ItemStack stack) {
|
|
||||||
ItemStack newItem = CraftItemStack.asNMSCopy(stack);
|
|
||||||
|
|
||||||
if (newItem == null) {
|
|
||||||
newItem = new ItemStack(Blocks.BEDROCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newItem.tag == null) {
|
|
||||||
newItem.tag = new NBTTagCompound();
|
|
||||||
}
|
|
||||||
NBTTagCompound display = newItem.tag.getCompound("display");
|
|
||||||
|
|
||||||
if (!newItem.tag.hasKey("display")) {
|
|
||||||
newItem.tag.set("display", display);
|
|
||||||
}
|
|
||||||
|
|
||||||
NBTTagList tagList = new NBTTagList();
|
|
||||||
tagList.add(new NBTTagString(ItemUtils.ANTISTACK_LORE)); // Antistack lore
|
|
||||||
|
|
||||||
display.set("Lore", tagList);
|
|
||||||
newItem.count = 0;
|
|
||||||
setItemStack(newItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void allowPickup(boolean pickup) {
|
|
||||||
if (pickup) {
|
|
||||||
super.pickupDelay = 0;
|
|
||||||
} else {
|
|
||||||
super.pickupDelay = Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", (double) 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", (double) 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getRawItemStack() {
|
|
||||||
return super.getItemStack();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,187 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
|
||||||
|
|
||||||
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_7_R1.DamageSource;
|
|
||||||
import net.minecraft.server.v1_7_R1.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityDamageSource;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntitySlime;
|
|
||||||
import net.minecraft.server.v1_7_R1.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R1.World;
|
|
||||||
|
|
||||||
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.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
setSize(1);
|
|
||||||
setInvisible(true);
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The slime dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@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()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomName(String customName) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameVisible(boolean visible) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float volume, float pitch) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSSlime(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return super.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", (double) 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", (double) 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,165 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityWitherSkull;
|
|
||||||
import net.minecraft.server.v1_7_R1.MathHelper;
|
|
||||||
import net.minecraft.server.v1_7_R1.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R1.PacketPlayOutEntityTeleport;
|
|
||||||
import net.minecraft.server.v1_7_R1.World;
|
|
||||||
|
|
||||||
public class EntityNMSWitherSkull extends EntityWitherSkull implements NMSWitherSkull {
|
|
||||||
|
|
||||||
private boolean lockTick;
|
|
||||||
private HologramLine parentPiece;
|
|
||||||
|
|
||||||
public EntityNMSWitherSkull(World world, HologramLine parentPiece) {
|
|
||||||
super(world);
|
|
||||||
super.motX = 0.0;
|
|
||||||
super.motY = 0.0;
|
|
||||||
super.motZ = 0.0;
|
|
||||||
super.dirX = 0.0;
|
|
||||||
super.dirY = 0.0;
|
|
||||||
super.dirZ = 0.0;
|
|
||||||
super.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
StackTraceElement element = ReflectionUtils.getStackTraceElement(2);
|
|
||||||
if (element != null && element.getFileName() != null && element.getFileName().equals("EntityTrackerEntry.java") && element.getLineNumber() > 134 && element.getLineNumber() < 144) {
|
|
||||||
// Then this method is being called when creating a new packet, we return a fake ID!
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float f1, float f2) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSWitherSkull(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
|
|
||||||
// Send a packet near to update the position.
|
|
||||||
PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport(
|
|
||||||
getIdNMS(),
|
|
||||||
MathHelper.floor(this.locX * 32.0D),
|
|
||||||
MathHelper.floor(this.locY * 32.0D),
|
|
||||||
MathHelper.floor(this.locZ * 32.0D),
|
|
||||||
(byte) (int) (this.yaw * 256.0F / 360.0F),
|
|
||||||
(byte) (int) (this.pitch * 256.0F / 360.0F)
|
|
||||||
);
|
|
||||||
|
|
||||||
for (Object obj : this.world.players) {
|
|
||||||
if (obj instanceof EntityPlayer) {
|
|
||||||
EntityPlayer nmsPlayer = (EntityPlayer) obj;
|
|
||||||
|
|
||||||
double distanceSquared = Utils.square(nmsPlayer.locX - this.locX) + Utils.square(nmsPlayer.locZ - this.locZ);
|
|
||||||
if (distanceSquared < 8192 && nmsPlayer.playerConnection != null) {
|
|
||||||
nmsPlayer.playerConnection.sendPacket(teleportPacket);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return this.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return super.getId(); // Return the real ID without checking the stack trace.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,169 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R1.ChatSerializer;
|
|
||||||
import net.minecraft.server.v1_7_R1.PacketPlayOutChat;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.craftbukkit.libs.com.google.gson.stream.JsonWriter;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.FancyMessage;
|
|
||||||
|
|
||||||
public class FancyMessageImpl implements FancyMessage {
|
|
||||||
|
|
||||||
private List<MessagePart> messageParts;
|
|
||||||
|
|
||||||
public FancyMessageImpl(String firstPartText) {
|
|
||||||
messageParts = new ArrayList<MessagePart>();
|
|
||||||
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(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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,170 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R1;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Chunk;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.CraftWorld;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity;
|
|
||||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
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.NMSArmorStand;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
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_7_R1.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityTypes;
|
|
||||||
import net.minecraft.server.v1_7_R1.MathHelper;
|
|
||||||
import net.minecraft.server.v1_7_R1.World;
|
|
||||||
import net.minecraft.server.v1_7_R1.WorldServer;
|
|
||||||
|
|
||||||
public class NmsManagerImpl implements NMSManager {
|
|
||||||
|
|
||||||
private Method validateEntityMethod;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setup() throws Exception {
|
|
||||||
registerCustomEntity(EntityNMSHorse.class, "EntityHorse", 100);
|
|
||||||
registerCustomEntity(EntityNMSWitherSkull.class, "WitherSkull", 19);
|
|
||||||
registerCustomEntity(EntityNMSItem.class, "Item", 1);
|
|
||||||
registerCustomEntity(EntityNMSSlime.class, "Slime", 55);
|
|
||||||
|
|
||||||
if (!VersionUtils.isForgeServer()) {
|
|
||||||
validateEntityMethod = World.class.getDeclaredMethod("a", Entity.class);
|
|
||||||
validateEntityMethod.setAccessible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
|
||||||
public void registerCustomEntity(Class entityClass, String name, int id) throws Exception {
|
|
||||||
if (VersionUtils.isForgeServer()) {
|
|
||||||
// Forge entity registration.
|
|
||||||
Class<?> entityTypesClass = Class.forName("net.minecraft.server.v1_7_R1.EntityTypes");
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(entityTypesClass, "field_75626_c", entityClass, name);
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(entityTypesClass, "field_75624_e", entityClass, Integer.valueOf(id));
|
|
||||||
} else {
|
|
||||||
// Normal entity registration.
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NMSHorse spawnNMSHorse(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
WorldServer nmsWorld = ((CraftWorld) world).getHandle();
|
|
||||||
EntityNMSHorse invisibleHorse = new EntityNMSHorse(nmsWorld, parentPiece);
|
|
||||||
invisibleHorse.setLocationNMS(x, y, z);
|
|
||||||
if (!addEntityToWorld(nmsWorld, invisibleHorse)) {
|
|
||||||
DebugHandler.handleSpawnFail(parentPiece);
|
|
||||||
}
|
|
||||||
return invisibleHorse;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NMSWitherSkull spawnNMSWitherSkull(org.bukkit.World bukkitWorld, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
|
||||||
EntityNMSWitherSkull staticWitherSkull = new EntityNMSWitherSkull(nmsWorld, parentPiece);
|
|
||||||
staticWitherSkull.setLocationNMS(x, y, z);
|
|
||||||
if (!addEntityToWorld(nmsWorld, staticWitherSkull)) {
|
|
||||||
DebugHandler.handleSpawnFail(parentPiece);
|
|
||||||
}
|
|
||||||
return staticWitherSkull;
|
|
||||||
}
|
|
||||||
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private boolean addEntityToWorld(WorldServer nmsWorld, Entity nmsEntity) {
|
|
||||||
Validator.isTrue(Bukkit.isPrimaryThread(), "Async entity add");
|
|
||||||
|
|
||||||
if (validateEntityMethod == null) {
|
|
||||||
return nmsWorld.addEntity(nmsEntity, SpawnReason.CUSTOM);
|
|
||||||
}
|
|
||||||
|
|
||||||
final int chunkX = MathHelper.floor(nmsEntity.locX / 16.0);
|
|
||||||
final int chunkZ = MathHelper.floor(nmsEntity.locZ / 16.0);
|
|
||||||
|
|
||||||
if (!nmsWorld.chunkProviderServer.isChunkLoaded(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 NMSArmorStand spawnNMSArmorStand(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
throw new NotImplementedException("Method can only be used on 1.8 or higher");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isUnloadUnsure(Chunk bukkitChunk) {
|
|
||||||
return bukkitChunk.getWorld().isChunkInUse(bukkitChunk.getX(), bukkitChunk.getZ());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
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-parent</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
<relativePath>../../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>holographicdisplays-nms-v1_7_r2</artifactId>
|
|
||||||
<name>HolographicDisplays NMS v1_7_R2</name>
|
|
||||||
|
|
||||||
<repositories>
|
|
||||||
<repository>
|
|
||||||
<id>elmakers-repo</id>
|
|
||||||
<url>http://maven.elmakers.com/repository/</url>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-nms-interfaces</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-utils</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>bukkit</artifactId>
|
|
||||||
<version>1.7.5-R0.1-SNAPSHOT</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.7.5-R0.1-SNAPSHOT</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,64 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftHorse;
|
|
||||||
import org.bukkit.entity.AnimalTamer;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSHorse extends CraftHorse {
|
|
||||||
|
|
||||||
public CraftNMSHorse(CraftServer server, EntityNMSHorse entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from Horse class
|
|
||||||
@Override public void setVariant(Variant variant) { }
|
|
||||||
@Override public void setColor(Color color) { }
|
|
||||||
@Override public void setStyle(Style style) { }
|
|
||||||
@Override public void setCarryingChest(boolean chest) { }
|
|
||||||
@Override public void setDomestication(int domestication) { }
|
|
||||||
@Override public void setJumpStrength(double jump) { }
|
|
||||||
|
|
||||||
// Methods form Ageable class
|
|
||||||
@Override public void setAge(int age) { }
|
|
||||||
@Override public void setAgeLock(boolean lock) { }
|
|
||||||
@Override public void setBreed(boolean breed) { }
|
|
||||||
@Override public void setAdult() { }
|
|
||||||
@Override public void setBaby() { }
|
|
||||||
|
|
||||||
// Methods from LivingEntity class
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Tameable
|
|
||||||
@Override public void setTamed(boolean tame) { }
|
|
||||||
@Override public void setOwner(AnimalTamer owner) { }
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftItem;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSItem extends CraftItem {
|
|
||||||
|
|
||||||
public CraftNMSItem(CraftServer server, EntityNMSItem entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Item
|
|
||||||
@Override public void setItemStack(ItemStack stack) { }
|
|
||||||
@Override public void setPickupDelay(int delay) { }
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftSlime;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSSlime extends CraftSlime {
|
|
||||||
|
|
||||||
public CraftNMSSlime(CraftServer server, EntityNMSSlime entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from LivingEntity class
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Slime
|
|
||||||
@Override public void setSize(int size) { }
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftWitherSkull;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSWitherSkull extends CraftWitherSkull {
|
|
||||||
|
|
||||||
public CraftNMSWitherSkull(CraftServer server, EntityNMSWitherSkull entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Method from Fireball
|
|
||||||
@Override public void setDirection(Vector dir) { }
|
|
||||||
|
|
||||||
// Method from Projectile
|
|
||||||
@Override public void setBounce(boolean bounce) { }
|
|
||||||
|
|
||||||
// Methods from Explosive
|
|
||||||
@Override public void setYield(float yield) { }
|
|
||||||
@Override public void setIsIncendiary(boolean fire) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
}
|
|
@ -1,185 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftEntity;
|
|
||||||
|
|
||||||
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.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R2.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityHorse;
|
|
||||||
import net.minecraft.server.v1_7_R2.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R2.World;
|
|
||||||
|
|
||||||
public class EntityNMSHorse extends EntityHorse implements NMSHorse {
|
|
||||||
|
|
||||||
private boolean lockTick;
|
|
||||||
private HologramLine parentPiece;
|
|
||||||
|
|
||||||
public EntityNMSHorse(World world, HologramLine parentPiece) {
|
|
||||||
super(world);
|
|
||||||
super.ageLocked = true;
|
|
||||||
super.persistent = true;
|
|
||||||
super.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
setAge(-1700000); // This is a magic value. No one will see the real horse.
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The horse dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomName(String customName) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameVisible(boolean visible) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float volume, float pitch) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameNMS(String name) {
|
|
||||||
if (name != null && name.length() > 300) {
|
|
||||||
name = name.substring(0, 300);
|
|
||||||
}
|
|
||||||
super.setCustomName(name);
|
|
||||||
super.setCustomNameVisible(name != null && !name.isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSHorse(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return super.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getCustomNameNMS() {
|
|
||||||
return super.getCustomName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", (double) 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", (double) 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,218 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
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_7_R2.Blocks;
|
|
||||||
import net.minecraft.server.v1_7_R2.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityItem;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R2.ItemStack;
|
|
||||||
import net.minecraft.server.v1_7_R2.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R2.NBTTagList;
|
|
||||||
import net.minecraft.server.v1_7_R2.NBTTagString;
|
|
||||||
import net.minecraft.server.v1_7_R2.World;
|
|
||||||
|
|
||||||
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 = Integer.MAX_VALUE;
|
|
||||||
this.parentPiece = piece;
|
|
||||||
this.itemPickupManager = itemPickupManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The item dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItemStack() {
|
|
||||||
// Dirty method to check if the icon is being picked up
|
|
||||||
StackTraceElement element = ReflectionUtils.getStackTraceElement(2);
|
|
||||||
if (element != null && element.getFileName() != null && element.getClassName().contains("EntityInsentient")) {
|
|
||||||
return null; // Try to pickup this, dear entity ignoring the pickupDelay!
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getItemStack();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Method called when a player is near.
|
|
||||||
@Override
|
|
||||||
public void b_(EntityHuman human) {
|
|
||||||
|
|
||||||
if (parentPiece.getPickupHandler() != null && human instanceof EntityPlayer) {
|
|
||||||
itemPickupManager.handleItemLinePickup((Player) human.getBukkitEntity(), parentPiece.getPickupHandler(), parentPiece.getParent());
|
|
||||||
// It is never added to the inventory.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSItem(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return this.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItemStackNMS(org.bukkit.inventory.ItemStack stack) {
|
|
||||||
ItemStack newItem = CraftItemStack.asNMSCopy(stack);
|
|
||||||
|
|
||||||
if (newItem == null) {
|
|
||||||
newItem = new ItemStack(Blocks.BEDROCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newItem.tag == null) {
|
|
||||||
newItem.tag = new NBTTagCompound();
|
|
||||||
}
|
|
||||||
NBTTagCompound display = newItem.tag.getCompound("display");
|
|
||||||
|
|
||||||
if (!newItem.tag.hasKey("display")) {
|
|
||||||
newItem.tag.set("display", display);
|
|
||||||
}
|
|
||||||
|
|
||||||
NBTTagList tagList = new NBTTagList();
|
|
||||||
tagList.add(new NBTTagString(ItemUtils.ANTISTACK_LORE)); // Antistack lore
|
|
||||||
|
|
||||||
display.set("Lore", tagList);
|
|
||||||
newItem.count = 0;
|
|
||||||
setItemStack(newItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void allowPickup(boolean pickup) {
|
|
||||||
if (pickup) {
|
|
||||||
super.pickupDelay = 0;
|
|
||||||
} else {
|
|
||||||
super.pickupDelay = Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", (double) 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", (double) 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getRawItemStack() {
|
|
||||||
return super.getItemStack();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,187 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftEntity;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
|
||||||
|
|
||||||
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_7_R2.DamageSource;
|
|
||||||
import net.minecraft.server.v1_7_R2.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityDamageSource;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntitySlime;
|
|
||||||
import net.minecraft.server.v1_7_R2.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R2.World;
|
|
||||||
|
|
||||||
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.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
setSize(1);
|
|
||||||
setInvisible(true);
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The slime dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@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()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomName(String customName) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameVisible(boolean visible) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float volume, float pitch) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSSlime(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return super.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", (double) 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", (double) 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,167 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftEntity;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityWitherSkull;
|
|
||||||
import net.minecraft.server.v1_7_R2.MathHelper;
|
|
||||||
import net.minecraft.server.v1_7_R2.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R2.PacketPlayOutEntityTeleport;
|
|
||||||
import net.minecraft.server.v1_7_R2.World;
|
|
||||||
|
|
||||||
public class EntityNMSWitherSkull extends EntityWitherSkull implements NMSWitherSkull {
|
|
||||||
|
|
||||||
private boolean lockTick;
|
|
||||||
private HologramLine parentPiece;
|
|
||||||
|
|
||||||
public EntityNMSWitherSkull(World world, HologramLine parentPiece) {
|
|
||||||
super(world);
|
|
||||||
super.motX = 0.0;
|
|
||||||
super.motY = 0.0;
|
|
||||||
super.motZ = 0.0;
|
|
||||||
super.dirX = 0.0;
|
|
||||||
super.dirY = 0.0;
|
|
||||||
super.dirZ = 0.0;
|
|
||||||
super.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
StackTraceElement element = ReflectionUtils.getStackTraceElement(2);
|
|
||||||
if (element != null && element.getFileName() != null && element.getFileName().equals("EntityTrackerEntry.java") && element.getLineNumber() > 134 && element.getLineNumber() < 144) {
|
|
||||||
// Then this method is being called when creating a new packet, we return a fake ID!
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float f1, float f2) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSWitherSkull(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
|
|
||||||
// Send a packet near to update the position.
|
|
||||||
PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport(
|
|
||||||
getIdNMS(),
|
|
||||||
MathHelper.floor(this.locX * 32.0D),
|
|
||||||
MathHelper.floor(this.locY * 32.0D),
|
|
||||||
MathHelper.floor(this.locZ * 32.0D),
|
|
||||||
(byte) (int) (this.yaw * 256.0F / 360.0F),
|
|
||||||
(byte) (int) (this.pitch * 256.0F / 360.0F)
|
|
||||||
);
|
|
||||||
|
|
||||||
for (Object obj : this.world.players) {
|
|
||||||
if (obj instanceof EntityPlayer) {
|
|
||||||
EntityPlayer nmsPlayer = (EntityPlayer) obj;
|
|
||||||
|
|
||||||
double distanceSquared = Utils.square(nmsPlayer.locX - this.locX) + Utils.square(nmsPlayer.locZ - this.locZ);
|
|
||||||
if (distanceSquared < 8192 && nmsPlayer.playerConnection != null) {
|
|
||||||
nmsPlayer.playerConnection.sendPacket(teleportPacket);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return this.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return super.getId(); // Return the real ID without checking the stack trace.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,169 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R2.ChatSerializer;
|
|
||||||
import net.minecraft.server.v1_7_R2.PacketPlayOutChat;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.craftbukkit.libs.com.google.gson.stream.JsonWriter;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.FancyMessage;
|
|
||||||
|
|
||||||
public class FancyMessageImpl implements FancyMessage {
|
|
||||||
|
|
||||||
private List<MessagePart> messageParts;
|
|
||||||
|
|
||||||
public FancyMessageImpl(String firstPartText) {
|
|
||||||
messageParts = new ArrayList<MessagePart>();
|
|
||||||
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(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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,170 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R2;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Chunk;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.CraftWorld;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftEntity;
|
|
||||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
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.NMSArmorStand;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
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_7_R2.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityTypes;
|
|
||||||
import net.minecraft.server.v1_7_R2.MathHelper;
|
|
||||||
import net.minecraft.server.v1_7_R2.World;
|
|
||||||
import net.minecraft.server.v1_7_R2.WorldServer;
|
|
||||||
|
|
||||||
public class NmsManagerImpl implements NMSManager {
|
|
||||||
|
|
||||||
private Method validateEntityMethod;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setup() throws Exception {
|
|
||||||
registerCustomEntity(EntityNMSHorse.class, "EntityHorse", 100);
|
|
||||||
registerCustomEntity(EntityNMSWitherSkull.class, "WitherSkull", 19);
|
|
||||||
registerCustomEntity(EntityNMSItem.class, "Item", 1);
|
|
||||||
registerCustomEntity(EntityNMSSlime.class, "Slime", 55);
|
|
||||||
|
|
||||||
if (!VersionUtils.isForgeServer()) {
|
|
||||||
validateEntityMethod = World.class.getDeclaredMethod("a", Entity.class);
|
|
||||||
validateEntityMethod.setAccessible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
|
||||||
public void registerCustomEntity(Class entityClass, String name, int id) throws Exception {
|
|
||||||
if (VersionUtils.isForgeServer()) {
|
|
||||||
// Forge entity registration.
|
|
||||||
Class<?> entityTypesClass = Class.forName("net.minecraft.server.v1_7_R2.EntityTypes");
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(entityTypesClass, "field_75626_c", entityClass, name);
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(entityTypesClass, "field_75624_e", entityClass, Integer.valueOf(id));
|
|
||||||
} else {
|
|
||||||
// Normal entity registration.
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NMSHorse spawnNMSHorse(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
WorldServer nmsWorld = ((CraftWorld) world).getHandle();
|
|
||||||
EntityNMSHorse invisibleHorse = new EntityNMSHorse(nmsWorld, parentPiece);
|
|
||||||
invisibleHorse.setLocationNMS(x, y, z);
|
|
||||||
if (!addEntityToWorld(nmsWorld, invisibleHorse)) {
|
|
||||||
DebugHandler.handleSpawnFail(parentPiece);
|
|
||||||
}
|
|
||||||
return invisibleHorse;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NMSWitherSkull spawnNMSWitherSkull(org.bukkit.World bukkitWorld, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
|
||||||
EntityNMSWitherSkull staticWitherSkull = new EntityNMSWitherSkull(nmsWorld, parentPiece);
|
|
||||||
staticWitherSkull.setLocationNMS(x, y, z);
|
|
||||||
if (!addEntityToWorld(nmsWorld, staticWitherSkull)) {
|
|
||||||
DebugHandler.handleSpawnFail(parentPiece);
|
|
||||||
}
|
|
||||||
return staticWitherSkull;
|
|
||||||
}
|
|
||||||
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private boolean addEntityToWorld(WorldServer nmsWorld, Entity nmsEntity) {
|
|
||||||
Validator.isTrue(Bukkit.isPrimaryThread(), "Async entity add");
|
|
||||||
|
|
||||||
if (validateEntityMethod == null) {
|
|
||||||
return nmsWorld.addEntity(nmsEntity, SpawnReason.CUSTOM);
|
|
||||||
}
|
|
||||||
|
|
||||||
final int chunkX = MathHelper.floor(nmsEntity.locX / 16.0);
|
|
||||||
final int chunkZ = MathHelper.floor(nmsEntity.locZ / 16.0);
|
|
||||||
|
|
||||||
if (!nmsWorld.chunkProviderServer.isChunkLoaded(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 NMSArmorStand spawnNMSArmorStand(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
throw new NotImplementedException("Method can only be used on 1.8 or higher");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isUnloadUnsure(Chunk bukkitChunk) {
|
|
||||||
return bukkitChunk.getWorld().isChunkInUse(bukkitChunk.getX(), bukkitChunk.getZ());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
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-parent</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
<relativePath>../../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>holographicdisplays-nms-v1_7_r3</artifactId>
|
|
||||||
<name>HolographicDisplays NMS v1_7_R3</name>
|
|
||||||
|
|
||||||
<repositories>
|
|
||||||
<repository>
|
|
||||||
<id>elmakers-repo</id>
|
|
||||||
<url>http://maven.elmakers.com/repository/</url>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-nms-interfaces</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-utils</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>bukkit</artifactId>
|
|
||||||
<version>1.7.9-R0.1-SNAPSHOT</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.7.9-R0.1-SNAPSHOT</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,64 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftHorse;
|
|
||||||
import org.bukkit.entity.AnimalTamer;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSHorse extends CraftHorse {
|
|
||||||
|
|
||||||
public CraftNMSHorse(CraftServer server, EntityNMSHorse entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from Horse class
|
|
||||||
@Override public void setVariant(Variant variant) { }
|
|
||||||
@Override public void setColor(Color color) { }
|
|
||||||
@Override public void setStyle(Style style) { }
|
|
||||||
@Override public void setCarryingChest(boolean chest) { }
|
|
||||||
@Override public void setDomestication(int domestication) { }
|
|
||||||
@Override public void setJumpStrength(double jump) { }
|
|
||||||
|
|
||||||
// Methods form Ageable class
|
|
||||||
@Override public void setAge(int age) { }
|
|
||||||
@Override public void setAgeLock(boolean lock) { }
|
|
||||||
@Override public void setBreed(boolean breed) { }
|
|
||||||
@Override public void setAdult() { }
|
|
||||||
@Override public void setBaby() { }
|
|
||||||
|
|
||||||
// Methods from LivingEntity class
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Tameable
|
|
||||||
@Override public void setTamed(boolean tame) { }
|
|
||||||
@Override public void setOwner(AnimalTamer owner) { }
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftItem;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSItem extends CraftItem {
|
|
||||||
|
|
||||||
public CraftNMSItem(CraftServer server, EntityNMSItem entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Item
|
|
||||||
@Override public void setItemStack(ItemStack stack) { }
|
|
||||||
@Override public void setPickupDelay(int delay) { }
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftSlime;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSSlime extends CraftSlime {
|
|
||||||
|
|
||||||
public CraftNMSSlime(CraftServer server, EntityNMSSlime entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from LivingEntity class
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Slime
|
|
||||||
@Override public void setSize(int size) { }
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftWitherSkull;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSWitherSkull extends CraftWitherSkull {
|
|
||||||
|
|
||||||
public CraftNMSWitherSkull(CraftServer server, EntityNMSWitherSkull entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Method from Fireball
|
|
||||||
@Override public void setDirection(Vector dir) { }
|
|
||||||
|
|
||||||
// Method from Projectile
|
|
||||||
@Override public void setBounce(boolean bounce) { }
|
|
||||||
|
|
||||||
// Methods from Explosive
|
|
||||||
@Override public void setYield(float yield) { }
|
|
||||||
@Override public void setIsIncendiary(boolean fire) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
}
|
|
@ -1,184 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftEntity;
|
|
||||||
|
|
||||||
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.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R3.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityHorse;
|
|
||||||
import net.minecraft.server.v1_7_R3.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R3.World;
|
|
||||||
|
|
||||||
public class EntityNMSHorse extends EntityHorse implements NMSHorse {
|
|
||||||
|
|
||||||
private boolean lockTick;
|
|
||||||
private HologramLine parentPiece;
|
|
||||||
|
|
||||||
public EntityNMSHorse(World world, HologramLine parentPiece) {
|
|
||||||
super(world);
|
|
||||||
super.ageLocked = true;
|
|
||||||
super.persistent = true;
|
|
||||||
super.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
setAge(-1700000); // This is a magic value. No one will see the real horse.
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The horse dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomName(String customName) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameVisible(boolean visible) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float volume, float pitch) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameNMS(String name) {
|
|
||||||
if (name != null && name.length() > 300) {
|
|
||||||
name = name.substring(0, 300);
|
|
||||||
}
|
|
||||||
super.setCustomName(name);
|
|
||||||
super.setCustomNameVisible(name != null && !name.isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSHorse(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return super.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getCustomNameNMS() {
|
|
||||||
return super.getCustomName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", (double) 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", (double) 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,218 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
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_7_R3.Blocks;
|
|
||||||
import net.minecraft.server.v1_7_R3.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityItem;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R3.ItemStack;
|
|
||||||
import net.minecraft.server.v1_7_R3.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R3.NBTTagList;
|
|
||||||
import net.minecraft.server.v1_7_R3.NBTTagString;
|
|
||||||
import net.minecraft.server.v1_7_R3.World;
|
|
||||||
|
|
||||||
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 = Integer.MAX_VALUE;
|
|
||||||
this.parentPiece = piece;
|
|
||||||
this.itemPickupManager = itemPickupManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The item dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItemStack() {
|
|
||||||
// Dirty method to check if the icon is being picked up
|
|
||||||
StackTraceElement element = ReflectionUtils.getStackTraceElement(2);
|
|
||||||
if (element != null && element.getFileName() != null && element.getClassName().contains("EntityInsentient")) {
|
|
||||||
return null; // Try to pickup this, dear entity ignoring the pickupDelay!
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getItemStack();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Method called when a player is near.
|
|
||||||
@Override
|
|
||||||
public void b_(EntityHuman human) {
|
|
||||||
|
|
||||||
if (parentPiece.getPickupHandler() != null && human instanceof EntityPlayer) {
|
|
||||||
itemPickupManager.handleItemLinePickup((Player) human.getBukkitEntity(), parentPiece.getPickupHandler(), parentPiece.getParent());
|
|
||||||
// It is never added to the inventory.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSItem(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return this.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItemStackNMS(org.bukkit.inventory.ItemStack stack) {
|
|
||||||
ItemStack newItem = CraftItemStack.asNMSCopy(stack);
|
|
||||||
|
|
||||||
if (newItem == null) {
|
|
||||||
newItem = new ItemStack(Blocks.BEDROCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newItem.tag == null) {
|
|
||||||
newItem.tag = new NBTTagCompound();
|
|
||||||
}
|
|
||||||
NBTTagCompound display = newItem.tag.getCompound("display");
|
|
||||||
|
|
||||||
if (!newItem.tag.hasKey("display")) {
|
|
||||||
newItem.tag.set("display", display);
|
|
||||||
}
|
|
||||||
|
|
||||||
NBTTagList tagList = new NBTTagList();
|
|
||||||
tagList.add(new NBTTagString(ItemUtils.ANTISTACK_LORE)); // Antistack lore
|
|
||||||
|
|
||||||
display.set("Lore", tagList);
|
|
||||||
newItem.count = 0;
|
|
||||||
setItemStack(newItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void allowPickup(boolean pickup) {
|
|
||||||
if (pickup) {
|
|
||||||
super.pickupDelay = 0;
|
|
||||||
} else {
|
|
||||||
super.pickupDelay = Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", (double) 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", (double) 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getRawItemStack() {
|
|
||||||
return super.getItemStack();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,186 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftEntity;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
|
||||||
|
|
||||||
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_7_R3.DamageSource;
|
|
||||||
import net.minecraft.server.v1_7_R3.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityDamageSource;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntitySlime;
|
|
||||||
import net.minecraft.server.v1_7_R3.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R3.World;
|
|
||||||
|
|
||||||
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.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
setSize(1);
|
|
||||||
setInvisible(true);
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The slime dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@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()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomName(String customName) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameVisible(boolean visible) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float volume, float pitch) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSSlime(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return super.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,164 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftEntity;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityWitherSkull;
|
|
||||||
import net.minecraft.server.v1_7_R3.MathHelper;
|
|
||||||
import net.minecraft.server.v1_7_R3.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R3.PacketPlayOutEntityTeleport;
|
|
||||||
import net.minecraft.server.v1_7_R3.World;
|
|
||||||
|
|
||||||
public class EntityNMSWitherSkull extends EntityWitherSkull implements NMSWitherSkull {
|
|
||||||
|
|
||||||
private boolean lockTick;
|
|
||||||
private HologramLine parentPiece;
|
|
||||||
|
|
||||||
public EntityNMSWitherSkull(World world, HologramLine parentPiece) {
|
|
||||||
super(world);
|
|
||||||
super.motX = 0.0;
|
|
||||||
super.motY = 0.0;
|
|
||||||
super.motZ = 0.0;
|
|
||||||
super.dirX = 0.0;
|
|
||||||
super.dirY = 0.0;
|
|
||||||
super.dirZ = 0.0;
|
|
||||||
super.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
StackTraceElement element = ReflectionUtils.getStackTraceElement(2);
|
|
||||||
if (element != null && element.getFileName() != null && element.getFileName().equals("EntityTrackerEntry.java") && element.getLineNumber() > 134 && element.getLineNumber() < 144) {
|
|
||||||
// Then this method is being called when creating a new packet, we return a fake ID!
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float f1, float f2) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSWitherSkull(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
|
|
||||||
// Send a packet near to update the position.
|
|
||||||
PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport(
|
|
||||||
getIdNMS(),
|
|
||||||
MathHelper.floor(this.locX * 32.0D),
|
|
||||||
MathHelper.floor(this.locY * 32.0D),
|
|
||||||
MathHelper.floor(this.locZ * 32.0D),
|
|
||||||
(byte) (int) (this.yaw * 256.0F / 360.0F),
|
|
||||||
(byte) (int) (this.pitch * 256.0F / 360.0F)
|
|
||||||
);
|
|
||||||
|
|
||||||
for (Object obj : this.world.players) {
|
|
||||||
if (obj instanceof EntityPlayer) {
|
|
||||||
EntityPlayer nmsPlayer = (EntityPlayer) obj;
|
|
||||||
|
|
||||||
double distanceSquared = Utils.square(nmsPlayer.locX - this.locX) + Utils.square(nmsPlayer.locZ - this.locZ);
|
|
||||||
if (distanceSquared < 8192 && nmsPlayer.playerConnection != null) {
|
|
||||||
nmsPlayer.playerConnection.sendPacket(teleportPacket);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return this.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return super.getId(); // Return the real ID without checking the stack trace.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,169 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R3.ChatSerializer;
|
|
||||||
import net.minecraft.server.v1_7_R3.PacketPlayOutChat;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.craftbukkit.libs.com.google.gson.stream.JsonWriter;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.FancyMessage;
|
|
||||||
|
|
||||||
public class FancyMessageImpl implements FancyMessage {
|
|
||||||
|
|
||||||
private List<MessagePart> messageParts;
|
|
||||||
|
|
||||||
public FancyMessageImpl(String firstPartText) {
|
|
||||||
messageParts = new ArrayList<MessagePart>();
|
|
||||||
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(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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,170 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R3;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Chunk;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.CraftWorld;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftEntity;
|
|
||||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
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.NMSArmorStand;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
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_7_R3.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityTypes;
|
|
||||||
import net.minecraft.server.v1_7_R3.MathHelper;
|
|
||||||
import net.minecraft.server.v1_7_R3.World;
|
|
||||||
import net.minecraft.server.v1_7_R3.WorldServer;
|
|
||||||
|
|
||||||
public class NmsManagerImpl implements NMSManager {
|
|
||||||
|
|
||||||
private Method validateEntityMethod;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setup() throws Exception {
|
|
||||||
registerCustomEntity(EntityNMSHorse.class, "EntityHorse", 100);
|
|
||||||
registerCustomEntity(EntityNMSWitherSkull.class, "WitherSkull", 19);
|
|
||||||
registerCustomEntity(EntityNMSItem.class, "Item", 1);
|
|
||||||
registerCustomEntity(EntityNMSSlime.class, "Slime", 55);
|
|
||||||
|
|
||||||
if (!VersionUtils.isForgeServer()) {
|
|
||||||
validateEntityMethod = World.class.getDeclaredMethod("a", Entity.class);
|
|
||||||
validateEntityMethod.setAccessible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
|
||||||
public void registerCustomEntity(Class entityClass, String name, int id) throws Exception {
|
|
||||||
if (VersionUtils.isForgeServer()) {
|
|
||||||
// Forge entity registration.
|
|
||||||
Class<?> entityTypesClass = Class.forName("net.minecraft.server.v1_7_R3.EntityTypes");
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(entityTypesClass, "field_75626_c", entityClass, name);
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(entityTypesClass, "field_75624_e", entityClass, Integer.valueOf(id));
|
|
||||||
} else {
|
|
||||||
// Normal entity registration.
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NMSHorse spawnNMSHorse(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
WorldServer nmsWorld = ((CraftWorld) world).getHandle();
|
|
||||||
EntityNMSHorse invisibleHorse = new EntityNMSHorse(nmsWorld, parentPiece);
|
|
||||||
invisibleHorse.setLocationNMS(x, y, z);
|
|
||||||
if (!addEntityToWorld(nmsWorld, invisibleHorse)) {
|
|
||||||
DebugHandler.handleSpawnFail(parentPiece);
|
|
||||||
}
|
|
||||||
return invisibleHorse;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NMSWitherSkull spawnNMSWitherSkull(org.bukkit.World bukkitWorld, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
|
||||||
EntityNMSWitherSkull staticWitherSkull = new EntityNMSWitherSkull(nmsWorld, parentPiece);
|
|
||||||
staticWitherSkull.setLocationNMS(x, y, z);
|
|
||||||
if (!addEntityToWorld(nmsWorld, staticWitherSkull)) {
|
|
||||||
DebugHandler.handleSpawnFail(parentPiece);
|
|
||||||
}
|
|
||||||
return staticWitherSkull;
|
|
||||||
}
|
|
||||||
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private boolean addEntityToWorld(WorldServer nmsWorld, Entity nmsEntity) {
|
|
||||||
Validator.isTrue(Bukkit.isPrimaryThread(), "Async entity add");
|
|
||||||
|
|
||||||
if (validateEntityMethod == null) {
|
|
||||||
return nmsWorld.addEntity(nmsEntity, SpawnReason.CUSTOM);
|
|
||||||
}
|
|
||||||
|
|
||||||
final int chunkX = MathHelper.floor(nmsEntity.locX / 16.0);
|
|
||||||
final int chunkZ = MathHelper.floor(nmsEntity.locZ / 16.0);
|
|
||||||
|
|
||||||
if (!nmsWorld.chunkProviderServer.isChunkLoaded(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 NMSArmorStand spawnNMSArmorStand(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
throw new NotImplementedException("Method can only be used on 1.8 or higher");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isUnloadUnsure(Chunk bukkitChunk) {
|
|
||||||
return bukkitChunk.getWorld().isChunkInUse(bukkitChunk.getX(), bukkitChunk.getZ());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
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-parent</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
<relativePath>../../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>holographicdisplays-nms-v1_7_r4</artifactId>
|
|
||||||
<name>HolographicDisplays NMS v1_7_R4</name>
|
|
||||||
|
|
||||||
<repositories>
|
|
||||||
<repository>
|
|
||||||
<id>elmakers-repo</id>
|
|
||||||
<url>http://maven.elmakers.com/repository/</url>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-nms-interfaces</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-utils</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>bukkit</artifactId>
|
|
||||||
<version>1.7.10-R0.1-SNAPSHOT</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.7.10-R0.1-SNAPSHOT</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,64 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftHorse;
|
|
||||||
import org.bukkit.entity.AnimalTamer;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSHorse extends CraftHorse {
|
|
||||||
|
|
||||||
public CraftNMSHorse(CraftServer server, EntityNMSHorse entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from Horse class
|
|
||||||
@Override public void setVariant(Variant variant) { }
|
|
||||||
@Override public void setColor(Color color) { }
|
|
||||||
@Override public void setStyle(Style style) { }
|
|
||||||
@Override public void setCarryingChest(boolean chest) { }
|
|
||||||
@Override public void setDomestication(int domestication) { }
|
|
||||||
@Override public void setJumpStrength(double jump) { }
|
|
||||||
|
|
||||||
// Methods form Ageable class
|
|
||||||
@Override public void setAge(int age) { }
|
|
||||||
@Override public void setAgeLock(boolean lock) { }
|
|
||||||
@Override public void setBreed(boolean breed) { }
|
|
||||||
@Override public void setAdult() { }
|
|
||||||
@Override public void setBaby() { }
|
|
||||||
|
|
||||||
// Methods from LivingEntity class
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Tameable
|
|
||||||
@Override public void setTamed(boolean tame) { }
|
|
||||||
@Override public void setOwner(AnimalTamer owner) { }
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftItem;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSItem extends CraftItem {
|
|
||||||
|
|
||||||
public CraftNMSItem(CraftServer server, EntityNMSItem entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Item
|
|
||||||
@Override public void setItemStack(ItemStack stack) { }
|
|
||||||
@Override public void setPickupDelay(int delay) { }
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftSlime;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSSlime extends CraftSlime {
|
|
||||||
|
|
||||||
public CraftNMSSlime(CraftServer server, EntityNMSSlime entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methods from LivingEntity class
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
// Methods from Slime
|
|
||||||
@Override public void setSize(int size) { }
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.CraftServer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftWitherSkull;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class CraftNMSWitherSkull extends CraftWitherSkull {
|
|
||||||
|
|
||||||
public CraftNMSWitherSkull(CraftServer server, EntityNMSWitherSkull entity) {
|
|
||||||
super(server, entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disallow all the bukkit methods.
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
// Cannot be removed, this is the most important to override.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Method from Fireball
|
|
||||||
@Override public void setDirection(Vector dir) { }
|
|
||||||
|
|
||||||
// Method from Projectile
|
|
||||||
@Override public void setBounce(boolean bounce) { }
|
|
||||||
|
|
||||||
// Methods from Explosive
|
|
||||||
@Override public void setYield(float yield) { }
|
|
||||||
@Override public void setIsIncendiary(boolean fire) { }
|
|
||||||
|
|
||||||
// Methods from Entity
|
|
||||||
@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) { }
|
|
||||||
|
|
||||||
}
|
|
@ -1,185 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity;
|
|
||||||
|
|
||||||
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.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R4.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityHorse;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R4.World;
|
|
||||||
|
|
||||||
public class EntityNMSHorse extends EntityHorse implements NMSHorse {
|
|
||||||
|
|
||||||
private boolean lockTick;
|
|
||||||
private HologramLine parentPiece;
|
|
||||||
|
|
||||||
public EntityNMSHorse(World world, HologramLine parentPiece) {
|
|
||||||
super(world);
|
|
||||||
super.ageLocked = true;
|
|
||||||
super.persistent = true;
|
|
||||||
super.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
setAge(-1700000); // This is a magic value. No one will see the real horse.
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The horse dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomName(String customName) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameVisible(boolean visible) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float volume, float pitch) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameNMS(String name) {
|
|
||||||
if (name != null && name.length() > 300) {
|
|
||||||
name = name.substring(0, 300);
|
|
||||||
}
|
|
||||||
super.setCustomName(name);
|
|
||||||
super.setCustomNameVisible(name != null && !name.isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSHorse(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return super.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getCustomNameNMS() {
|
|
||||||
return super.getCustomName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", (double) 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", (double) 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,216 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
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_7_R4.Blocks;
|
|
||||||
import net.minecraft.server.v1_7_R4.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityItem;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R4.ItemStack;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTTagList;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTTagString;
|
|
||||||
import net.minecraft.server.v1_7_R4.World;
|
|
||||||
|
|
||||||
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 = Integer.MAX_VALUE;
|
|
||||||
this.parentPiece = piece;
|
|
||||||
this.itemPickupManager = itemPickupManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
|
|
||||||
// So it won't get removed.
|
|
||||||
ticksLived = 0;
|
|
||||||
age = 0;
|
|
||||||
pickupDelay = Integer.MAX_VALUE;
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItemStack() {
|
|
||||||
// Dirty method to check if the icon is being picked up
|
|
||||||
StackTraceElement element = ReflectionUtils.getStackTraceElement(2);
|
|
||||||
if (element != null && element.getFileName() != null && element.getClassName().contains("EntityInsentient")) {
|
|
||||||
return null; // Try to pickup this, dear entity ignoring the pickupDelay!
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getItemStack();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Method called when a player is near.
|
|
||||||
@Override
|
|
||||||
public void b_(EntityHuman human) {
|
|
||||||
|
|
||||||
if (parentPiece.getPickupHandler() != null && human instanceof EntityPlayer) {
|
|
||||||
itemPickupManager.handleItemLinePickup((Player) human.getBukkitEntity(), parentPiece.getPickupHandler(), parentPiece.getParent());
|
|
||||||
// It is never added to the inventory.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSItem(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return this.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItemStackNMS(org.bukkit.inventory.ItemStack stack) {
|
|
||||||
ItemStack newItem = CraftItemStack.asNMSCopy(stack);
|
|
||||||
|
|
||||||
if (newItem == null) {
|
|
||||||
newItem = new ItemStack(Blocks.BEDROCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newItem.tag == null) {
|
|
||||||
newItem.tag = new NBTTagCompound();
|
|
||||||
}
|
|
||||||
NBTTagCompound display = newItem.tag.getCompound("display");
|
|
||||||
|
|
||||||
if (!newItem.tag.hasKey("display")) {
|
|
||||||
newItem.tag.set("display", display);
|
|
||||||
}
|
|
||||||
|
|
||||||
NBTTagList tagList = new NBTTagList();
|
|
||||||
tagList.add(new NBTTagString(ItemUtils.ANTISTACK_LORE)); // Antistack lore
|
|
||||||
|
|
||||||
display.set("Lore", tagList);
|
|
||||||
newItem.count = 0;
|
|
||||||
setItemStack(newItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void allowPickup(boolean pickup) {
|
|
||||||
if (pickup) {
|
|
||||||
super.pickupDelay = 0;
|
|
||||||
} else {
|
|
||||||
super.pickupDelay = Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getRawItemStack() {
|
|
||||||
return super.getItemStack();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,186 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
|
||||||
|
|
||||||
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_7_R4.DamageSource;
|
|
||||||
import net.minecraft.server.v1_7_R4.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityDamageSource;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntitySlime;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R4.World;
|
|
||||||
|
|
||||||
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.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
setSize(1);
|
|
||||||
setInvisible(true);
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
// Checks every 20 ticks.
|
|
||||||
if (ticksLived % 20 == 0) {
|
|
||||||
// The slime dies without a vehicle.
|
|
||||||
if (this.vehicle == null) {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@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()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomName(String customName) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCustomNameVisible(boolean visible) {
|
|
||||||
// Locks the custom name.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float volume, float pitch) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSSlime(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return super.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return this.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPassengerOfNMS(NMSEntityBase vehicleBase) {
|
|
||||||
if (vehicleBase == null || !(vehicleBase instanceof Entity)) {
|
|
||||||
// It should never dismount
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = (Entity) vehicleBase;
|
|
||||||
|
|
||||||
try {
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "g", 0.0);
|
|
||||||
ReflectionUtils.setPrivateField(Entity.class, this, "h", 0.0);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
DebugHandler.handleDebugException(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.vehicle != null) {
|
|
||||||
this.vehicle.passenger = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.vehicle = entity;
|
|
||||||
entity.passenger = this;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,157 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityWitherSkull;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R4.PacketPlayOutEntityTeleport;
|
|
||||||
import net.minecraft.server.v1_7_R4.World;
|
|
||||||
|
|
||||||
public class EntityNMSWitherSkull extends EntityWitherSkull implements NMSWitherSkull {
|
|
||||||
|
|
||||||
private boolean lockTick;
|
|
||||||
private HologramLine parentPiece;
|
|
||||||
|
|
||||||
public EntityNMSWitherSkull(World world, HologramLine parentPiece) {
|
|
||||||
super(world);
|
|
||||||
super.motX = 0.0;
|
|
||||||
super.motY = 0.0;
|
|
||||||
super.motZ = 0.0;
|
|
||||||
super.dirX = 0.0;
|
|
||||||
super.dirY = 0.0;
|
|
||||||
super.dirZ = 0.0;
|
|
||||||
super.boundingBox.a = 0.0;
|
|
||||||
super.boundingBox.b = 0.0;
|
|
||||||
super.boundingBox.c = 0.0;
|
|
||||||
super.boundingBox.d = 0.0;
|
|
||||||
super.boundingBox.e = 0.0;
|
|
||||||
super.boundingBox.f = 0.0;
|
|
||||||
a(0.0F, 0.0F);
|
|
||||||
this.parentPiece = parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean c(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean d(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void e(NBTTagCompound nbttagcompound) {
|
|
||||||
// Do not save NBT.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isInvulnerable() {
|
|
||||||
/*
|
|
||||||
* 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().
|
|
||||||
*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getId() {
|
|
||||||
StackTraceElement element = ReflectionUtils.getStackTraceElement(2);
|
|
||||||
if (element != null && element.getFileName() != null && element.getFileName().equals("EntityTrackerEntry.java") && element.getLineNumber() > 134 && element.getLineNumber() < 144) {
|
|
||||||
// Then this method is being called when creating a new packet, we return a fake ID!
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void h() {
|
|
||||||
if (!lockTick) {
|
|
||||||
super.h();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void makeSound(String sound, float f1, float f2) {
|
|
||||||
// Remove sounds.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLockTick(boolean lock) {
|
|
||||||
lockTick = lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
setLockTick(false);
|
|
||||||
super.die();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftEntity getBukkitEntity() {
|
|
||||||
if (super.bukkitEntity == null) {
|
|
||||||
this.bukkitEntity = new CraftNMSWitherSkull(this.world.getServer(), this);
|
|
||||||
}
|
|
||||||
return this.bukkitEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void killEntityNMS() {
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLocationNMS(double x, double y, double z) {
|
|
||||||
super.setPosition(x, y, z);
|
|
||||||
|
|
||||||
// Send a packet near to update the position.
|
|
||||||
PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport(this);
|
|
||||||
|
|
||||||
for (Object obj : this.world.players) {
|
|
||||||
if (obj instanceof EntityPlayer) {
|
|
||||||
EntityPlayer nmsPlayer = (EntityPlayer) obj;
|
|
||||||
|
|
||||||
double distanceSquared = Utils.square(nmsPlayer.locX - this.locX) + Utils.square(nmsPlayer.locZ - this.locZ);
|
|
||||||
if (distanceSquared < 8192 && nmsPlayer.playerConnection != null) {
|
|
||||||
nmsPlayer.playerConnection.sendPacket(teleportPacket);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isDeadNMS() {
|
|
||||||
return this.dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getIdNMS() {
|
|
||||||
return super.getId(); // Return the real ID without checking the stack trace.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HologramLine getHologramLine() {
|
|
||||||
return parentPiece;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.bukkit.entity.Entity getBukkitEntityNMS() {
|
|
||||||
return getBukkitEntity();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,168 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R4.ChatSerializer;
|
|
||||||
import net.minecraft.server.v1_7_R4.PacketPlayOutChat;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.craftbukkit.libs.com.google.gson.stream.JsonWriter;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.FancyMessage;
|
|
||||||
|
|
||||||
public class FancyMessageImpl implements FancyMessage {
|
|
||||||
|
|
||||||
private List<MessagePart> messageParts;
|
|
||||||
|
|
||||||
public FancyMessageImpl(String firstPartText) {
|
|
||||||
messageParts = new ArrayList<MessagePart>();
|
|
||||||
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(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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,170 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.nms.v1_7_R4;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Chunk;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.CraftWorld;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity;
|
|
||||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
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.NMSArmorStand;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
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_7_R4.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityTypes;
|
|
||||||
import net.minecraft.server.v1_7_R4.MathHelper;
|
|
||||||
import net.minecraft.server.v1_7_R4.World;
|
|
||||||
import net.minecraft.server.v1_7_R4.WorldServer;
|
|
||||||
|
|
||||||
public class NmsManagerImpl implements NMSManager {
|
|
||||||
|
|
||||||
private Method validateEntityMethod;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setup() throws Exception {
|
|
||||||
registerCustomEntity(EntityNMSHorse.class, "EntityHorse", 100);
|
|
||||||
registerCustomEntity(EntityNMSWitherSkull.class, "WitherSkull", 19);
|
|
||||||
registerCustomEntity(EntityNMSItem.class, "Item", 1);
|
|
||||||
registerCustomEntity(EntityNMSSlime.class, "Slime", 55);
|
|
||||||
|
|
||||||
if (!VersionUtils.isForgeServer()) {
|
|
||||||
validateEntityMethod = World.class.getDeclaredMethod("a", Entity.class);
|
|
||||||
validateEntityMethod.setAccessible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
|
||||||
public void registerCustomEntity(Class entityClass, String name, int id) throws Exception {
|
|
||||||
if (VersionUtils.isForgeServer()) {
|
|
||||||
// Forge entity registration.
|
|
||||||
Class<?> entityTypesClass = Class.forName("net.minecraft.server.v1_7_R4.EntityTypes");
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(entityTypesClass, "field_75626_c", entityClass, name);
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(entityTypesClass, "field_75624_e", entityClass, Integer.valueOf(id));
|
|
||||||
} else {
|
|
||||||
// Normal entity registration.
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "d", entityClass, name);
|
|
||||||
ReflectionUtils.putInPrivateStaticMap(EntityTypes.class, "f", entityClass, Integer.valueOf(id));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NMSHorse spawnNMSHorse(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
WorldServer nmsWorld = ((CraftWorld) world).getHandle();
|
|
||||||
EntityNMSHorse invisibleHorse = new EntityNMSHorse(nmsWorld, parentPiece);
|
|
||||||
invisibleHorse.setLocationNMS(x, y, z);
|
|
||||||
if (!addEntityToWorld(nmsWorld, invisibleHorse)) {
|
|
||||||
DebugHandler.handleSpawnFail(parentPiece);
|
|
||||||
}
|
|
||||||
return invisibleHorse;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NMSWitherSkull spawnNMSWitherSkull(org.bukkit.World bukkitWorld, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
|
||||||
EntityNMSWitherSkull staticWitherSkull = new EntityNMSWitherSkull(nmsWorld, parentPiece);
|
|
||||||
staticWitherSkull.setLocationNMS(x, y, z);
|
|
||||||
if (!addEntityToWorld(nmsWorld, staticWitherSkull)) {
|
|
||||||
DebugHandler.handleSpawnFail(parentPiece);
|
|
||||||
}
|
|
||||||
return staticWitherSkull;
|
|
||||||
}
|
|
||||||
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private boolean addEntityToWorld(WorldServer nmsWorld, Entity nmsEntity) {
|
|
||||||
Validator.isTrue(Bukkit.isPrimaryThread(), "Async entity add");
|
|
||||||
|
|
||||||
if (validateEntityMethod == null) {
|
|
||||||
return nmsWorld.addEntity(nmsEntity, SpawnReason.CUSTOM);
|
|
||||||
}
|
|
||||||
|
|
||||||
final int chunkX = MathHelper.floor(nmsEntity.locX / 16.0);
|
|
||||||
final int chunkZ = MathHelper.floor(nmsEntity.locZ / 16.0);
|
|
||||||
|
|
||||||
if (!nmsWorld.chunkProviderServer.isChunkLoaded(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 NMSArmorStand spawnNMSArmorStand(org.bukkit.World world, double x, double y, double z, HologramLine parentPiece) {
|
|
||||||
throw new NotImplementedException("Method can only be used on 1.8 or higher");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isUnloadUnsure(Chunk bukkitChunk) {
|
|
||||||
return bukkitChunk.getWorld().isChunkInUse(bukkitChunk.getX(), bukkitChunk.getZ());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -2,7 +2,6 @@ package com.gmail.filoghost.holographicdisplays.nms.v1_8_R1;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.craftbukkit.v1_8_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_8_R1.CraftWorld;
|
||||||
@ -17,9 +16,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
|||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||||
@ -61,16 +58,6 @@ public class NmsManagerImpl implements NMSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||||
|
@ -2,7 +2,6 @@ package com.gmail.filoghost.holographicdisplays.nms.v1_8_R2;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.craftbukkit.v1_8_R2.CraftWorld;
|
import org.bukkit.craftbukkit.v1_8_R2.CraftWorld;
|
||||||
@ -17,9 +16,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
|||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||||
@ -61,16 +58,6 @@ public class NmsManagerImpl implements NMSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||||
|
@ -2,7 +2,6 @@ package com.gmail.filoghost.holographicdisplays.nms.v1_8_R3;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
||||||
@ -17,9 +16,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
|||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||||
@ -61,16 +58,6 @@ public class NmsManagerImpl implements NMSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||||
|
@ -2,7 +2,6 @@ package com.gmail.filoghost.holographicdisplays.nms.v1_9_R1;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.craftbukkit.v1_9_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_9_R1.CraftWorld;
|
||||||
@ -16,9 +15,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
|||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||||
@ -55,16 +52,6 @@ public class NmsManagerImpl implements NMSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||||
|
@ -2,7 +2,6 @@ package com.gmail.filoghost.holographicdisplays.nms.v1_9_R2;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.craftbukkit.v1_9_R2.CraftChunk;
|
import org.bukkit.craftbukkit.v1_9_R2.CraftChunk;
|
||||||
@ -17,9 +16,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.ItemPickupManager;
|
|||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSHorse;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSWitherSkull;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
import com.gmail.filoghost.holographicdisplays.util.DebugHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
import com.gmail.filoghost.holographicdisplays.util.ReflectionUtils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
import com.gmail.filoghost.holographicdisplays.util.Validator;
|
||||||
@ -56,16 +53,6 @@ public class NmsManagerImpl implements NMSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
@Override
|
||||||
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
public NMSItem spawnNMSItem(org.bukkit.World bukkitWorld, double x, double y, double z, ItemLine parentPiece, ItemStack stack, ItemPickupManager itemPickupManager) {
|
||||||
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
WorldServer nmsWorld = ((CraftWorld) bukkitWorld).getHandle();
|
||||||
|
@ -48,30 +48,6 @@
|
|||||||
<version>2.3.0-SNAPSHOT</version>
|
<version>2.3.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-nms-v1_7_r1</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-nms-v1_7_r2</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-nms-v1_7_r3</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>holographicdisplays-nms-v1_7_r4</artifactId>
|
|
||||||
<version>2.3.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>holographicdisplays-nms-v1_8_r1</artifactId>
|
<artifactId>holographicdisplays-nms-v1_8_r1</artifactId>
|
||||||
|
@ -90,7 +90,7 @@ public class HolographicDisplays extends JavaPlugin {
|
|||||||
printWarnAndDisable(
|
printWarnAndDisable(
|
||||||
"******************************************************",
|
"******************************************************",
|
||||||
" This version of HolographicDisplays only",
|
" This version of HolographicDisplays only",
|
||||||
" works on server versions from 1.7 to 1.13.",
|
" works on server versions from 1.8 to 1.13.",
|
||||||
" The plugin will be disabled.",
|
" The plugin will be disabled.",
|
||||||
"******************************************************"
|
"******************************************************"
|
||||||
);
|
);
|
||||||
@ -146,11 +146,7 @@ public class HolographicDisplays extends JavaPlugin {
|
|||||||
if (versionNumbersMatcher.find()) {
|
if (versionNumbersMatcher.find()) {
|
||||||
String versionNumbers = versionNumbersMatcher.group();
|
String versionNumbers = versionNumbersMatcher.group();
|
||||||
|
|
||||||
if (NMSVersion.isBetween(NMSVersion.v1_7_R1, NMSVersion.v1_7_R4)) {
|
if (NMSVersion.isBetween(NMSVersion.v1_8_R1, NMSVersion.v1_8_R3)) {
|
||||||
if (!VersionUtils.isVersionBetweenEqual(versionNumbers, "3.6.4", "3.7.0")) {
|
|
||||||
requiredVersionError = "between 3.6.4 and 3.7.0";
|
|
||||||
}
|
|
||||||
} else if (NMSVersion.isBetween(NMSVersion.v1_8_R1, NMSVersion.v1_8_R3)) {
|
|
||||||
if (!VersionUtils.isVersionBetweenEqual(versionNumbers, "3.6.4", "3.6.5") && !VersionUtils.isVersionGreaterEqual(versionNumbers, "4.1")) {
|
if (!VersionUtils.isVersionBetweenEqual(versionNumbers, "3.6.4", "3.6.5") && !VersionUtils.isVersionGreaterEqual(versionNumbers, "4.1")) {
|
||||||
requiredVersionError = "between 3.6.4 and 3.6.5 or higher than 4.1";
|
requiredVersionError = "between 3.6.4 and 3.6.5 or higher than 4.1";
|
||||||
}
|
}
|
||||||
|
@ -41,8 +41,6 @@ import com.gmail.filoghost.holographicdisplays.util.Utils;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This is for the ProtocolLib versions containing the WrappedDataWatcher.WrappedDataWatcherObject class.
|
* This is for the ProtocolLib versions containing the WrappedDataWatcher.WrappedDataWatcherObject class.
|
||||||
*
|
|
||||||
* These versions are only used from 1.8, there is no need to handle 1.7 entities.
|
|
||||||
*/
|
*/
|
||||||
public class ProtocolLibHookImpl implements ProtocolLibHook {
|
public class ProtocolLibHookImpl implements ProtocolLibHook {
|
||||||
|
|
||||||
|
@ -27,31 +27,23 @@ import com.gmail.filoghost.holographicdisplays.object.line.CraftItemLine;
|
|||||||
import com.gmail.filoghost.holographicdisplays.object.line.CraftTextLine;
|
import com.gmail.filoghost.holographicdisplays.object.line.CraftTextLine;
|
||||||
import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchSlimeLine;
|
import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchSlimeLine;
|
||||||
import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchableLine;
|
import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchableLine;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.NMSVersion;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
import com.gmail.filoghost.holographicdisplays.util.Utils;
|
||||||
import com.gmail.filoghost.holographicdisplays.util.VersionUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is for the ProtocolLib versions without the WrappedDataWatcher.WrappedDataWatcherObject class.
|
* This is for the ProtocolLib versions without the WrappedDataWatcher.WrappedDataWatcherObject class.
|
||||||
*
|
*
|
||||||
* These versions are only used for 1.7 and 1.8.
|
* These versions are only used for 1.8.
|
||||||
*/
|
*/
|
||||||
public class ProtocolLibHookImpl implements ProtocolLibHook {
|
public class ProtocolLibHookImpl implements ProtocolLibHook {
|
||||||
|
|
||||||
private NMSManager nmsManager;
|
private NMSManager nmsManager;
|
||||||
|
|
||||||
private int customNameWatcherIndex;
|
private int customNameWatcherIndex = 2;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hook(Plugin plugin, NMSManager nmsManager) {
|
public boolean hook(Plugin plugin, NMSManager nmsManager) {
|
||||||
this.nmsManager = nmsManager;
|
this.nmsManager = nmsManager;
|
||||||
|
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
customNameWatcherIndex = 2;
|
|
||||||
} else {
|
|
||||||
customNameWatcherIndex = 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(plugin, ListenerPriority.NORMAL, PacketType.Play.Server.SPAWN_ENTITY_LIVING, PacketType.Play.Server.SPAWN_ENTITY, PacketType.Play.Server.ENTITY_METADATA) {
|
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(plugin, ListenerPriority.NORMAL, PacketType.Play.Server.SPAWN_ENTITY_LIVING, PacketType.Play.Server.SPAWN_ENTITY, PacketType.Play.Server.ENTITY_METADATA) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -100,7 +92,7 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
|
|
||||||
WrapperPlayServerSpawnEntity spawnEntityPacket = new WrapperPlayServerSpawnEntity(packet);
|
WrapperPlayServerSpawnEntity spawnEntityPacket = new WrapperPlayServerSpawnEntity(packet);
|
||||||
int objectId = spawnEntityPacket.getType();
|
int objectId = spawnEntityPacket.getType();
|
||||||
if (objectId != ObjectTypes.ITEM_STACK && objectId != ObjectTypes.WITHER_SKULL && objectId != ObjectTypes.ARMOR_STAND) {
|
if (objectId != ObjectTypes.ITEM_STACK && objectId != ObjectTypes.ARMOR_STAND) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,8 +121,8 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity.getType() != EntityType.HORSE && !VersionUtils.isArmorstand(entity.getType())) {
|
if (entity.getType() != EntityType.ARMOR_STAND) {
|
||||||
// Enough, only horses and armorstands are used with custom names.
|
// Enough, only armorstands are used with custom names.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,19 +196,8 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
CraftTextLine textLine = (CraftTextLine) line;
|
CraftTextLine textLine = (CraftTextLine) line;
|
||||||
|
|
||||||
if (textLine.isSpawned()) {
|
if (textLine.isSpawned()) {
|
||||||
|
|
||||||
AbstractPacket nameablePacket = new WrapperPlayServerSpawnEntityLiving(textLine.getNmsNameble().getBukkitEntityNMS());
|
AbstractPacket nameablePacket = new WrapperPlayServerSpawnEntityLiving(textLine.getNmsNameble().getBukkitEntityNMS());
|
||||||
nameablePacket.sendPacket(player);
|
nameablePacket.sendPacket(player);
|
||||||
|
|
||||||
if (textLine.getNmsSkullVehicle() != null) {
|
|
||||||
AbstractPacket vehiclePacket = new WrapperPlayServerSpawnEntity(textLine.getNmsSkullVehicle().getBukkitEntityNMS(), ObjectTypes.WITHER_SKULL, 0);
|
|
||||||
vehiclePacket.sendPacket(player);
|
|
||||||
|
|
||||||
WrapperPlayServerAttachEntity attachPacket = new WrapperPlayServerAttachEntity();
|
|
||||||
attachPacket.setVehicleId(textLine.getNmsSkullVehicle().getIdNMS());
|
|
||||||
attachPacket.setEntityId(textLine.getNmsNameble().getIdNMS());
|
|
||||||
attachPacket.sendPacket(player);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (line instanceof CraftItemLine) {
|
} else if (line instanceof CraftItemLine) {
|
||||||
@ -226,14 +207,7 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
AbstractPacket itemPacket = new WrapperPlayServerSpawnEntity(itemLine.getNmsItem().getBukkitEntityNMS(), ObjectTypes.ITEM_STACK, 1);
|
AbstractPacket itemPacket = new WrapperPlayServerSpawnEntity(itemLine.getNmsItem().getBukkitEntityNMS(), ObjectTypes.ITEM_STACK, 1);
|
||||||
itemPacket.sendPacket(player);
|
itemPacket.sendPacket(player);
|
||||||
|
|
||||||
AbstractPacket vehiclePacket;
|
AbstractPacket vehiclePacket = new WrapperPlayServerSpawnEntityLiving(itemLine.getNmsVehicle().getBukkitEntityNMS());
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
// In 1.8 we have armor stands, that are living entities.
|
|
||||||
vehiclePacket = new WrapperPlayServerSpawnEntityLiving(itemLine.getNmsVehicle().getBukkitEntityNMS());
|
|
||||||
} else {
|
|
||||||
vehiclePacket = new WrapperPlayServerSpawnEntity(itemLine.getNmsVehicle().getBukkitEntityNMS(), ObjectTypes.WITHER_SKULL, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
vehiclePacket.sendPacket(player);
|
vehiclePacket.sendPacket(player);
|
||||||
|
|
||||||
WrapperPlayServerAttachEntity attachPacket = new WrapperPlayServerAttachEntity();
|
WrapperPlayServerAttachEntity attachPacket = new WrapperPlayServerAttachEntity();
|
||||||
@ -261,15 +235,7 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
CraftTouchSlimeLine touchSlime = touchableLine.getTouchSlime();
|
CraftTouchSlimeLine touchSlime = touchableLine.getTouchSlime();
|
||||||
|
|
||||||
if (touchSlime.isSpawned()) {
|
if (touchSlime.isSpawned()) {
|
||||||
AbstractPacket vehiclePacket;
|
AbstractPacket vehiclePacket = new WrapperPlayServerSpawnEntityLiving(touchSlime.getNmsVehicle().getBukkitEntityNMS());
|
||||||
|
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
// Armor stand vehicle
|
|
||||||
vehiclePacket = new WrapperPlayServerSpawnEntityLiving(touchSlime.getNmsVehicle().getBukkitEntityNMS());
|
|
||||||
} else {
|
|
||||||
// Wither skull vehicle
|
|
||||||
vehiclePacket = new WrapperPlayServerSpawnEntity(touchSlime.getNmsVehicle().getBukkitEntityNMS(), ObjectTypes.WITHER_SKULL, 0);
|
|
||||||
}
|
|
||||||
vehiclePacket.sendPacket(player);
|
vehiclePacket.sendPacket(player);
|
||||||
|
|
||||||
AbstractPacket slimePacket = new WrapperPlayServerSpawnEntityLiving(touchSlime.getNmsSlime().getBukkitEntityNMS());
|
AbstractPacket slimePacket = new WrapperPlayServerSpawnEntityLiving(touchSlime.getNmsSlime().getBukkitEntityNMS());
|
||||||
@ -300,7 +266,7 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isHologramType(EntityType type) {
|
private boolean isHologramType(EntityType type) {
|
||||||
return type == EntityType.HORSE || type == EntityType.WITHER_SKULL || type == EntityType.DROPPED_ITEM || type == EntityType.SLIME || VersionUtils.isArmorstand(type); // To maintain backwards compatibility
|
return type == EntityType.ARMOR_STAND || type == EntityType.DROPPED_ITEM || type == EntityType.SLIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Hologram getHologram(Entity bukkitEntity) {
|
private Hologram getHologram(Entity bukkitEntity) {
|
||||||
|
@ -17,7 +17,6 @@ import com.gmail.filoghost.holographicdisplays.commands.main.subs.CopyCommand;
|
|||||||
import com.gmail.filoghost.holographicdisplays.commands.main.subs.CreateCommand;
|
import com.gmail.filoghost.holographicdisplays.commands.main.subs.CreateCommand;
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.main.subs.DeleteCommand;
|
import com.gmail.filoghost.holographicdisplays.commands.main.subs.DeleteCommand;
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.main.subs.EditCommand;
|
import com.gmail.filoghost.holographicdisplays.commands.main.subs.EditCommand;
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.main.subs.FixCommand;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.main.subs.HelpCommand;
|
import com.gmail.filoghost.holographicdisplays.commands.main.subs.HelpCommand;
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.main.subs.InfoCommand;
|
import com.gmail.filoghost.holographicdisplays.commands.main.subs.InfoCommand;
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.main.subs.InsertlineCommand;
|
import com.gmail.filoghost.holographicdisplays.commands.main.subs.InsertlineCommand;
|
||||||
@ -51,7 +50,6 @@ public class HologramsCommandHandler implements CommandExecutor {
|
|||||||
registerSubCommand(new AlignCommand());
|
registerSubCommand(new AlignCommand());
|
||||||
registerSubCommand(new CopyCommand());
|
registerSubCommand(new CopyCommand());
|
||||||
registerSubCommand(new ReloadCommand());
|
registerSubCommand(new ReloadCommand());
|
||||||
registerSubCommand(new FixCommand());
|
|
||||||
|
|
||||||
registerSubCommand(new RemovelineCommand());
|
registerSubCommand(new RemovelineCommand());
|
||||||
registerSubCommand(new SetlineCommand());
|
registerSubCommand(new SetlineCommand());
|
||||||
|
@ -1,80 +0,0 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.commands.main.subs;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.Colors;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.CommandValidator;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.Strings;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.commands.main.HologramSubCommand;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.exception.CommandException;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.object.NamedHologram;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.object.NamedHologramManager;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.util.NMSVersion;
|
|
||||||
|
|
||||||
public class FixCommand extends HologramSubCommand {
|
|
||||||
|
|
||||||
public FixCommand() {
|
|
||||||
super("fix");
|
|
||||||
setPermission(Strings.BASE_PERM + "fix");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPossibleArguments() {
|
|
||||||
return "<hologramName>";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMinimumArguments() {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(CommandSender sender, String label, String[] args) throws CommandException {
|
|
||||||
|
|
||||||
CommandValidator.isTrue(!NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1), "This command is no longer necessary in 1.8+. The holograms already use the correct ambient light.");
|
|
||||||
|
|
||||||
NamedHologram hologram = NamedHologramManager.getHologram(args[0].toLowerCase());
|
|
||||||
CommandValidator.notNull(hologram, Strings.noSuchHologram(args[0].toLowerCase()));
|
|
||||||
|
|
||||||
if (args.length <= 1) {
|
|
||||||
sender.sendMessage(Colors.PRIMARY + "This command will put a glowstone 16 blocks above the hologram to fix the lightning.");
|
|
||||||
sender.sendMessage(Colors.PRIMARY + "If you're sure, type " + Colors.SECONDARY + "/" + label + " fix " + args[0].toLowerCase() + " confirm");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[1].equalsIgnoreCase("confirm")) {
|
|
||||||
|
|
||||||
Block block = hologram.getWorld().getBlockAt((int) hologram.getX(), (int) hologram.getY() + 16, (int) hologram.getZ());
|
|
||||||
String oldType = block.getType().toString().replace("_", " ").toLowerCase();
|
|
||||||
block.setType(Material.GLOWSTONE);
|
|
||||||
|
|
||||||
sender.sendMessage(Colors.PRIMARY + "Changed the block 16 block above the hologram (" + oldType + ") to glowstone!");
|
|
||||||
|
|
||||||
} else {
|
|
||||||
throw new CommandException(args[1] + " is not a valid confirmation! Use \"confirm\".");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getTutorial() {
|
|
||||||
return Arrays.asList("This command will fix the lightning of a hologram,",
|
|
||||||
"placing a glowstone block 16 blocks above it.",
|
|
||||||
"That's the only way to fix it (Only for 1.7 and lower).");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SubCommandType getType() {
|
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
return SubCommandType.HIDDEN;
|
|
||||||
} else {
|
|
||||||
return SubCommandType.GENERIC;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -57,19 +57,9 @@ public class CraftItemLine extends CraftTouchableLine implements ItemLine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setTouchHandler(TouchHandler touchHandler) {
|
public void setTouchHandler(TouchHandler touchHandler) {
|
||||||
|
|
||||||
if (nmsItem != null) {
|
if (nmsItem != null) {
|
||||||
|
|
||||||
Location loc = nmsItem.getBukkitEntityNMS().getLocation();
|
Location loc = nmsItem.getBukkitEntityNMS().getLocation();
|
||||||
|
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_9_R1)) {
|
|
||||||
super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ());
|
super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ());
|
||||||
} else if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ());
|
|
||||||
} else {
|
|
||||||
super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ());
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
super.setTouchHandler(touchHandler, null, 0, 0, 0);
|
super.setTouchHandler(touchHandler, null, 0, 0, 0);
|
||||||
}
|
}
|
||||||
@ -84,12 +74,7 @@ public class CraftItemLine extends CraftTouchableLine implements ItemLine {
|
|||||||
double offset = getItemOffset();
|
double offset = getItemOffset();
|
||||||
|
|
||||||
nmsItem = HolographicDisplays.getNMSManager().spawnNMSItem(world, x, y + offset, z, this, itemStack, HolographicDisplays.getMainListener());
|
nmsItem = HolographicDisplays.getNMSManager().spawnNMSItem(world, x, y + offset, z, this, itemStack, HolographicDisplays.getMainListener());
|
||||||
|
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + offset, z, this);
|
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + offset, z, this);
|
||||||
} else {
|
|
||||||
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSWitherSkull(world, x, y + offset, z, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
nmsItem.setPassengerOfNMS(nmsVehicle);
|
nmsItem.setPassengerOfNMS(nmsVehicle);
|
||||||
|
|
||||||
@ -153,10 +138,8 @@ public class CraftItemLine extends CraftTouchableLine implements ItemLine {
|
|||||||
private double getItemOffset() {
|
private double getItemOffset() {
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_9_R1)) {
|
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_9_R1)) {
|
||||||
return Offsets.ARMOR_STAND_WITH_ITEM_1_9;
|
return Offsets.ARMOR_STAND_WITH_ITEM_1_9;
|
||||||
} else if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
return Offsets.ARMOR_STAND_WITH_ITEM;
|
|
||||||
} else {
|
} else {
|
||||||
return Offsets.WITHER_SKULL_WITH_ITEM;
|
return Offsets.ARMOR_STAND_WITH_ITEM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,8 +7,6 @@ import org.bukkit.World;
|
|||||||
import com.gmail.filoghost.holographicdisplays.HolographicDisplays;
|
import com.gmail.filoghost.holographicdisplays.HolographicDisplays;
|
||||||
import com.gmail.filoghost.holographicdisplays.api.handler.TouchHandler;
|
import com.gmail.filoghost.holographicdisplays.api.handler.TouchHandler;
|
||||||
import com.gmail.filoghost.holographicdisplays.api.line.TextLine;
|
import com.gmail.filoghost.holographicdisplays.api.line.TextLine;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSCanMount;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSNameable;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSNameable;
|
||||||
import com.gmail.filoghost.holographicdisplays.object.CraftHologram;
|
import com.gmail.filoghost.holographicdisplays.object.CraftHologram;
|
||||||
import com.gmail.filoghost.holographicdisplays.placeholder.PlaceholdersManager;
|
import com.gmail.filoghost.holographicdisplays.placeholder.PlaceholdersManager;
|
||||||
@ -18,12 +16,8 @@ import com.gmail.filoghost.holographicdisplays.util.Offsets;
|
|||||||
public class CraftTextLine extends CraftTouchableLine implements TextLine {
|
public class CraftTextLine extends CraftTouchableLine implements TextLine {
|
||||||
|
|
||||||
private String text;
|
private String text;
|
||||||
|
|
||||||
private NMSNameable nmsNameble;
|
private NMSNameable nmsNameble;
|
||||||
|
|
||||||
// Legacy code for < 1.7, not used in 1.8 and greater
|
|
||||||
private NMSEntityBase nmsSkullVehicle;
|
|
||||||
|
|
||||||
|
|
||||||
public CraftTextLine(CraftHologram parent, String text) {
|
public CraftTextLine(CraftHologram parent, String text) {
|
||||||
super(0.23, parent);
|
super(0.23, parent);
|
||||||
@ -71,16 +65,7 @@ public class CraftTextLine extends CraftTouchableLine implements TextLine {
|
|||||||
public void spawn(World world, double x, double y, double z) {
|
public void spawn(World world, double x, double y, double z) {
|
||||||
super.spawn(world, x, y, z);
|
super.spawn(world, x, y, z);
|
||||||
|
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
nmsNameble = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + getTextOffset(), z, this);
|
nmsNameble = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + getTextOffset(), z, this);
|
||||||
} else {
|
|
||||||
nmsNameble = HolographicDisplays.getNMSManager().spawnNMSHorse(world, x, y + Offsets.WITHER_SKULL_WITH_HORSE, z, this);
|
|
||||||
nmsSkullVehicle = HolographicDisplays.getNMSManager().spawnNMSWitherSkull(world, x, y + Offsets.WITHER_SKULL_WITH_HORSE, z, this);
|
|
||||||
|
|
||||||
// In 1.7 it must be an instanceof NMSCanMount
|
|
||||||
((NMSCanMount) nmsNameble).setPassengerOfNMS(nmsSkullVehicle);
|
|
||||||
nmsSkullVehicle.setLockTick(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (text != null && !text.isEmpty()) {
|
if (text != null && !text.isEmpty()) {
|
||||||
nmsNameble.setCustomNameNMS(text);
|
nmsNameble.setCustomNameNMS(text);
|
||||||
@ -94,11 +79,6 @@ public class CraftTextLine extends CraftTouchableLine implements TextLine {
|
|||||||
public void despawn() {
|
public void despawn() {
|
||||||
super.despawn();
|
super.despawn();
|
||||||
|
|
||||||
if (nmsSkullVehicle != null) {
|
|
||||||
nmsSkullVehicle.killEntityNMS();
|
|
||||||
nmsSkullVehicle = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nmsNameble != null) {
|
if (nmsNameble != null) {
|
||||||
nmsNameble.killEntityNMS();
|
nmsNameble.killEntityNMS();
|
||||||
nmsNameble = null;
|
nmsNameble = null;
|
||||||
@ -110,10 +90,6 @@ public class CraftTextLine extends CraftTouchableLine implements TextLine {
|
|||||||
public void teleport(double x, double y, double z) {
|
public void teleport(double x, double y, double z) {
|
||||||
super.teleport(x, y, z);
|
super.teleport(x, y, z);
|
||||||
|
|
||||||
if (nmsSkullVehicle != null) {
|
|
||||||
nmsSkullVehicle.setLocationNMS(x, y + Offsets.WITHER_SKULL_WITH_HORSE, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nmsNameble != null) {
|
if (nmsNameble != null) {
|
||||||
nmsNameble.setLocationNMS(x, y + getTextOffset(), z);
|
nmsNameble.setLocationNMS(x, y + getTextOffset(), z);
|
||||||
}
|
}
|
||||||
@ -122,19 +98,11 @@ public class CraftTextLine extends CraftTouchableLine implements TextLine {
|
|||||||
@Override
|
@Override
|
||||||
public int[] getEntitiesIDs() {
|
public int[] getEntitiesIDs() {
|
||||||
if (isSpawned()) {
|
if (isSpawned()) {
|
||||||
if (nmsSkullVehicle != null) {
|
|
||||||
if (touchSlime != null) {
|
|
||||||
return ArrayUtils.addAll(new int[] {nmsNameble.getIdNMS(), nmsSkullVehicle.getIdNMS()}, touchSlime.getEntitiesIDs());
|
|
||||||
} else {
|
|
||||||
return new int[] {nmsNameble.getIdNMS(), nmsSkullVehicle.getIdNMS()};
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (touchSlime != null) {
|
if (touchSlime != null) {
|
||||||
return ArrayUtils.add(touchSlime.getEntitiesIDs(), nmsNameble.getIdNMS());
|
return ArrayUtils.add(touchSlime.getEntitiesIDs(), nmsNameble.getIdNMS());
|
||||||
} else {
|
} else {
|
||||||
return new int[] {nmsNameble.getIdNMS()};
|
return new int[] {nmsNameble.getIdNMS()};
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return new int[0];
|
return new int[0];
|
||||||
}
|
}
|
||||||
@ -144,17 +112,11 @@ public class CraftTextLine extends CraftTouchableLine implements TextLine {
|
|||||||
return nmsNameble;
|
return nmsNameble;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NMSEntityBase getNmsSkullVehicle() {
|
|
||||||
return nmsSkullVehicle;
|
|
||||||
}
|
|
||||||
|
|
||||||
private double getTextOffset() {
|
private double getTextOffset() {
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_9_R1)) {
|
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_9_R1)) {
|
||||||
return Offsets.ARMOR_STAND_ALONE_1_9;
|
return Offsets.ARMOR_STAND_ALONE_1_9;
|
||||||
} else if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
return Offsets.ARMOR_STAND_ALONE;
|
|
||||||
} else {
|
} else {
|
||||||
return Offsets.WITHER_SKULL_WITH_HORSE;
|
return Offsets.ARMOR_STAND_ALONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,12 +38,7 @@ public class CraftTouchSlimeLine extends CraftHologramLine {
|
|||||||
double offset = getSlimeOffset();
|
double offset = getSlimeOffset();
|
||||||
|
|
||||||
nmsSlime = HolographicDisplays.getNMSManager().spawnNMSSlime(world, x, y + offset, z, this);
|
nmsSlime = HolographicDisplays.getNMSManager().spawnNMSSlime(world, x, y + offset, z, this);
|
||||||
|
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + offset, z, this);
|
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + offset, z, this);
|
||||||
} else {
|
|
||||||
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSWitherSkull(world, x, y + offset, z, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
nmsSlime.setPassengerOfNMS(nmsVehicle);
|
nmsSlime.setPassengerOfNMS(nmsVehicle);
|
||||||
|
|
||||||
@ -102,10 +97,8 @@ public class CraftTouchSlimeLine extends CraftHologramLine {
|
|||||||
private double getSlimeOffset() {
|
private double getSlimeOffset() {
|
||||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_9_R1)) {
|
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_9_R1)) {
|
||||||
return Offsets.ARMOR_STAND_WITH_SLIME_1_9;
|
return Offsets.ARMOR_STAND_WITH_SLIME_1_9;
|
||||||
} else if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
return Offsets.ARMOR_STAND_WITH_SLIME;
|
|
||||||
} else {
|
} else {
|
||||||
return Offsets.WITHER_SKULL_WITH_SLIME;
|
return Offsets.ARMOR_STAND_WITH_SLIME;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,10 +5,6 @@ package com.gmail.filoghost.holographicdisplays.util;
|
|||||||
*/
|
*/
|
||||||
public enum NMSVersion {
|
public enum NMSVersion {
|
||||||
|
|
||||||
v1_7_R1,
|
|
||||||
v1_7_R2,
|
|
||||||
v1_7_R3,
|
|
||||||
v1_7_R4,
|
|
||||||
v1_8_R1,
|
v1_8_R1,
|
||||||
v1_8_R2,
|
v1_8_R2,
|
||||||
v1_8_R3,
|
v1_8_R3,
|
||||||
@ -32,27 +28,9 @@ public enum NMSVersion {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Caused by MCPC+ / Cauldron renaming packages, get the NMS version from the Minecraft version.
|
|
||||||
nmsVersionName = VersionUtils.extractMinecraftVersion();
|
|
||||||
|
|
||||||
if ("1.7.2".equals(nmsVersionName)) {
|
|
||||||
return v1_7_R1;
|
|
||||||
} else if ("1.7.5".equals(nmsVersionName)) {
|
|
||||||
return v1_7_R2;
|
|
||||||
} else if ("1.7.8".equals(nmsVersionName)) {
|
|
||||||
return v1_7_R3;
|
|
||||||
} else if ("1.7.10".equals(nmsVersionName)) {
|
|
||||||
return v1_7_R4;
|
|
||||||
} else if ("1.8".equals(nmsVersionName)) {
|
|
||||||
return v1_8_R1;
|
|
||||||
} else if ("1.8.3".equals(nmsVersionName)) {
|
|
||||||
return v1_8_R2;
|
|
||||||
} else {
|
|
||||||
// Cannot definitely get the version. This will cause the plugin to disable itself.
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static boolean isValid() {
|
public static boolean isValid() {
|
||||||
|
@ -1,17 +1,14 @@
|
|||||||
package com.gmail.filoghost.holographicdisplays.util;
|
package com.gmail.filoghost.holographicdisplays.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When spawning a hologram at a location, the top part of the first line should be exactly on that location.
|
||||||
|
* The second line is below the first, and so on.
|
||||||
|
*/
|
||||||
public class Offsets {
|
public class Offsets {
|
||||||
|
|
||||||
public static final double
|
public static final double
|
||||||
|
|
||||||
// Spawning a hologram line on top of a full block, the bottom part of the nametag should be perfectly on the surface of the block.
|
// For 1.8+, a single armor stand.
|
||||||
WITHER_SKULL_WITH_HORSE = 54.56,
|
|
||||||
|
|
||||||
WITHER_SKULL_WITH_ITEM = -0.21,
|
|
||||||
|
|
||||||
WITHER_SKULL_WITH_SLIME = -0.22,
|
|
||||||
|
|
||||||
// For 1.8+, a single armor stand. As with wither skulls and horses, the bottom part of the nametag should be on the surface of the block.
|
|
||||||
ARMOR_STAND_ALONE = -0.26,
|
ARMOR_STAND_ALONE = -0.26,
|
||||||
|
|
||||||
// For 1.8+, an armor stand holding an item.
|
// For 1.8+, an armor stand holding an item.
|
||||||
@ -21,7 +18,7 @@ public class Offsets {
|
|||||||
ARMOR_STAND_WITH_SLIME = -1.49,
|
ARMOR_STAND_WITH_SLIME = -1.49,
|
||||||
|
|
||||||
|
|
||||||
// For 1.9+, a single armor stand. As with wither skulls and horses, the bottom part of the nametag should be on the surface of the block.
|
// For 1.9+, a single armor stand.
|
||||||
ARMOR_STAND_ALONE_1_9 = -0.29,
|
ARMOR_STAND_ALONE_1_9 = -0.29,
|
||||||
|
|
||||||
// For 1.9+, an armor stand holding an item.
|
// For 1.9+, an armor stand holding an item.
|
||||||
|
@ -7,7 +7,6 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@ -57,15 +56,6 @@ public class VersionUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isArmorstand(EntityType type) {
|
|
||||||
if (!NMSVersion.isGreaterEqualThan(NMSVersion.v1_8_R1)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return type == EntityType.ARMOR_STAND;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static Collection<? extends Player> getOnlinePlayers() {
|
public static Collection<? extends Player> getOnlinePlayers() {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
4
pom.xml
4
pom.xml
@ -20,10 +20,6 @@
|
|||||||
<module>API</module>
|
<module>API</module>
|
||||||
<module>Utils</module>
|
<module>Utils</module>
|
||||||
<module>NMS/Interfaces</module>
|
<module>NMS/Interfaces</module>
|
||||||
<module>NMS/v1_7_R1</module>
|
|
||||||
<module>NMS/v1_7_R2</module>
|
|
||||||
<module>NMS/v1_7_R3</module>
|
|
||||||
<module>NMS/v1_7_R4</module>
|
|
||||||
<module>NMS/v1_8_R1</module>
|
<module>NMS/v1_8_R1</module>
|
||||||
<module>NMS/v1_8_R2</module>
|
<module>NMS/v1_8_R2</module>
|
||||||
<module>NMS/v1_8_R3</module>
|
<module>NMS/v1_8_R3</module>
|
||||||
|
Loading…
Reference in New Issue
Block a user