Skip to content

Commit

Permalink
Modulize all NBT-related things
Browse files Browse the repository at this point in the history
And some extra stuff here and there
  • Loading branch information
Morphan1 committed Sep 21, 2016
1 parent a447b95 commit 663b6f5
Show file tree
Hide file tree
Showing 18 changed files with 795 additions and 839 deletions.

Large diffs are not rendered by default.

@@ -1,5 +1,6 @@
package net.aufdemrand.denizen.nms.interfaces;

import net.aufdemrand.denizen.nms.util.jnbt.CompoundTag;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Animals;
Expand All @@ -22,6 +23,10 @@ public interface EntityHelper {

void setTarget(Creature entity, LivingEntity target);

CompoundTag getNbtData(Entity entity);

void setNbtData(Entity entity, CompoundTag compoundTag);

void stopFollowing(Entity follower);

void stopWalking(Entity entity);
Expand Down
Expand Up @@ -16,4 +16,6 @@ public interface ItemHelper {
ItemStack addNbtData(ItemStack itemStack, String key, Tag value);

CompoundTag getNbtData(ItemStack itemStack);

ItemStack setNbtData(ItemStack itemStack, CompoundTag compoundTag);
}
@@ -1,8 +1,12 @@
package net.aufdemrand.denizen.nms.interfaces;

import net.aufdemrand.denizen.nms.abstracts.ImprovedOfflinePlayer;
import org.bukkit.Chunk;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;

import java.util.UUID;

public interface PlayerHelper {

boolean hasChunkLoaded(Player player, Chunk chunk);
Expand All @@ -12,4 +16,8 @@ public interface PlayerHelper {
void setTemporaryOp(Player player, boolean op);

void showEndCredits(Player player);

ImprovedOfflinePlayer getOfflineData(UUID uuid);

ImprovedOfflinePlayer getOfflineData(OfflinePlayer offlinePlayer);
}
Expand Up @@ -115,6 +115,10 @@ public byte getByte(String key) {
}
}

public boolean getBoolean(String key) {
return getByte(key) != 0;
}

/**
* Get a double named with the given key.
* <p/>
Expand Down
Expand Up @@ -86,6 +86,10 @@ public CompoundTagBuilder putByte(String key, byte value) {
return put(key, new ByteTag(value));
}

public CompoundTagBuilder putBoolean(String key, boolean value) {
return putByte(key, (byte) (value ? 1 : 0));
}

/**
* Put the given key and value into the compound tag as a
* {@code DoubleTag}.
Expand Down Expand Up @@ -183,6 +187,11 @@ public CompoundTagBuilder putAll(Map<String, ? extends Tag> value) {
return this;
}

public CompoundTagBuilder remove(String key) {
entries.remove(key);
return this;
}

/**
* Build an unnamed compound tag with this builder's entries.
*
Expand Down
@@ -1,14 +1,15 @@
package net.aufdemrand.denizen.objects;

import net.aufdemrand.denizen.BukkitScriptEntryData;
import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.abstracts.ImprovedOfflinePlayer;
import net.aufdemrand.denizen.objects.notable.NotableManager;
import net.aufdemrand.denizen.scripts.containers.core.InventoryScriptContainer;
import net.aufdemrand.denizen.scripts.containers.core.InventoryScriptHelper;
import net.aufdemrand.denizen.tags.BukkitTagContext;
import net.aufdemrand.denizen.utilities.Utilities;
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizen.utilities.depends.Depends;
import net.aufdemrand.denizen.utilities.nbt.ImprovedOfflinePlayer;
import net.aufdemrand.denizencore.objects.*;
import net.aufdemrand.denizencore.objects.aH.Argument;
import net.aufdemrand.denizencore.objects.aH.PrimitiveType;
Expand All @@ -28,7 +29,12 @@
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.*;
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.HorseInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.BookMeta;

import java.util.ArrayList;
Expand All @@ -51,15 +57,15 @@ public static dInventory mirrorBukkitInventory(Inventory inventory) {
return InventoryScriptHelper.notableInventories.get(inventory.getTitle());
}
// Iterate through offline player inventories
for (Map.Entry<UUID, PlayerInventory> inv : InventoryScriptHelper.offlineInventories.entrySet()) {
for (Map.Entry<UUID, PlayerInventory> inv : ImprovedOfflinePlayer.offlineInventories.entrySet()) {
if (inv.getValue().equals(inventory)) {
return new dInventory(new ImprovedOfflinePlayer(inv.getKey()));
return new dInventory(NMSHandler.getInstance().getPlayerHelper().getOfflineData(inv.getKey()));
}
}
// Iterate through offline player enderchests
for (Map.Entry<UUID, Inventory> inv : InventoryScriptHelper.offlineEnderChests.entrySet()) {
for (Map.Entry<UUID, Inventory> inv : ImprovedOfflinePlayer.offlineEnderChests.entrySet()) {
if (inv.getValue().equals(inventory)) {
return new dInventory(new ImprovedOfflinePlayer(inv.getKey()), true);
return new dInventory(NMSHandler.getInstance().getPlayerHelper().getOfflineData(inv.getKey()), true);
}
}

Expand Down Expand Up @@ -533,7 +539,7 @@ else if (holder instanceof Entity) {
}
else if (getIdType().equals("player")) {
// Iterate through offline player inventories
for (Map.Entry<UUID, PlayerInventory> inv : InventoryScriptHelper.offlineInventories.entrySet()) {
for (Map.Entry<UUID, PlayerInventory> inv : ImprovedOfflinePlayer.offlineInventories.entrySet()) {
if (inv.getValue().equals(inventory)) {
idHolder = new dPlayer(inv.getKey()).identify();
return;
Expand All @@ -542,7 +548,7 @@ else if (getIdType().equals("player")) {
}
else if (getIdType().equals("enderchest")) {
// Iterate through offline player enderchests
for (Map.Entry<UUID, Inventory> inv : InventoryScriptHelper.offlineEnderChests.entrySet()) {
for (Map.Entry<UUID, Inventory> inv : ImprovedOfflinePlayer.offlineEnderChests.entrySet()) {
if (inv.getValue().equals(inventory)) {
idHolder = new dPlayer(inv.getKey()).identify();
return;
Expand Down
Expand Up @@ -2,6 +2,7 @@

import net.aufdemrand.denizen.flags.FlagManager;
import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.abstracts.ImprovedOfflinePlayer;
import net.aufdemrand.denizen.nms.abstracts.Sidebar;
import net.aufdemrand.denizen.objects.properties.entity.EntityHealth;
import net.aufdemrand.denizen.scripts.commands.core.FailCommand;
Expand All @@ -12,7 +13,6 @@
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizen.utilities.depends.Depends;
import net.aufdemrand.denizen.utilities.nbt.ImprovedOfflinePlayer;
import net.aufdemrand.denizen.utilities.packets.*;
import net.aufdemrand.denizencore.objects.*;
import net.aufdemrand.denizencore.objects.properties.Property;
Expand Down Expand Up @@ -228,7 +228,7 @@ public OfflinePlayer getOfflinePlayer() {
}

public ImprovedOfflinePlayer getNBTEditor() {
return new ImprovedOfflinePlayer(getOfflinePlayer());
return NMSHandler.getInstance().getPlayerHelper().getOfflineData(getOfflinePlayer());
}

public dEntity getDenizenEntity() {
Expand Down
Expand Up @@ -70,7 +70,7 @@ else if (type == EntityType.OCELOT) {
}

else if (type == EntityType.RABBIT) {
return RabbitType.getRabbitType((Rabbit) colored.getBukkitEntity()).name();
return ((Rabbit) colored.getBukkitEntity()).getRabbitType().name();
}

else // Should never happen
Expand Down Expand Up @@ -211,10 +211,13 @@ else if (type == EntityType.OCELOT
.setCatType(Ocelot.Type.valueOf(mechanism.getValue().asString().toUpperCase()));
}

else if (type == EntityType.RABBIT
&& mechanism.getValue().matchesEnum(RabbitType.values())) {
RabbitType.setRabbitType((Rabbit) colored.getBukkitEntity(),
RabbitType.valueOf(mechanism.getValue().asString().toUpperCase()));
else if (type == EntityType.RABBIT) {
if (mechanism.getValue().matchesEnum(RabbitType.values())) {
((Rabbit) colored.getBukkitEntity()).setRabbitType(RabbitType.valueOf(mechanism.getValue().asString().toUpperCase()).getType());
}
else if (mechanism.getValue().matchesEnum(Rabbit.Type.values())) {
((Rabbit) colored.getBukkitEntity()).setRabbitType(Rabbit.Type.valueOf(mechanism.getValue().asString().toUpperCase()));
}
}

}
Expand Down
@@ -1,8 +1,10 @@
package net.aufdemrand.denizen.scripts.containers.core;

import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.abstracts.ImprovedOfflinePlayer;
import net.aufdemrand.denizen.nms.interfaces.PlayerHelper;
import net.aufdemrand.denizen.objects.dInventory;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizen.utilities.nbt.ImprovedOfflinePlayer;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryCloseEvent;
Expand All @@ -18,8 +20,6 @@
public class InventoryScriptHelper implements Listener {

public static Map<String, InventoryScriptContainer> inventory_scripts = new ConcurrentHashMap<String, InventoryScriptContainer>(8, 0.9f, 1);
public static Map<UUID, PlayerInventory> offlineInventories = new HashMap<UUID, PlayerInventory>();
public static Map<UUID, Inventory> offlineEnderChests = new HashMap<UUID, Inventory>();
public static Map<String, dInventory> notableInventories = new HashMap<String, dInventory>();
public static Map<Inventory, String> tempInventoryScripts = new HashMap<Inventory, String>();

Expand All @@ -29,24 +29,26 @@ public InventoryScriptHelper() {
}

public static void _savePlayerInventories() {
for (Map.Entry<UUID, PlayerInventory> offlineInv : offlineInventories.entrySet()) {
new ImprovedOfflinePlayer(offlineInv.getKey()).setInventory(offlineInv.getValue());
PlayerHelper playerHelper = NMSHandler.getInstance().getPlayerHelper();
for (Map.Entry<UUID, PlayerInventory> offlineInv : ImprovedOfflinePlayer.offlineInventories.entrySet()) {
playerHelper.getOfflineData(offlineInv.getKey()).setInventory(offlineInv.getValue());
}
for (Map.Entry<UUID, Inventory> offlineEnderChest : offlineEnderChests.entrySet()) {
new ImprovedOfflinePlayer(offlineEnderChest.getKey()).setEnderChest(offlineEnderChest.getValue());
for (Map.Entry<UUID, Inventory> offlineEnderChest : ImprovedOfflinePlayer.offlineEnderChests.entrySet()) {
playerHelper.getOfflineData(offlineEnderChest.getKey()).setEnderChest(offlineEnderChest.getValue());
}
}

@EventHandler
public void onPlayerLogin(PlayerLoginEvent event) {
UUID uuid = event.getPlayer().getUniqueId();
if (offlineInventories.containsKey(uuid)) {
new ImprovedOfflinePlayer(uuid).setInventory(offlineInventories.get(uuid));
offlineInventories.remove(uuid);
PlayerHelper playerHelper = NMSHandler.getInstance().getPlayerHelper();
if (ImprovedOfflinePlayer.offlineInventories.containsKey(uuid)) {
playerHelper.getOfflineData(uuid).setInventory(ImprovedOfflinePlayer.offlineInventories.get(uuid));
ImprovedOfflinePlayer.offlineInventories.remove(uuid);
}
if (offlineEnderChests.containsKey(uuid)) {
new ImprovedOfflinePlayer(uuid).setEnderChest(offlineEnderChests.get(uuid));
offlineEnderChests.remove(uuid);
if (ImprovedOfflinePlayer.offlineEnderChests.containsKey(uuid)) {
playerHelper.getOfflineData(uuid).setEnderChest(ImprovedOfflinePlayer.offlineEnderChests.get(uuid));
ImprovedOfflinePlayer.offlineEnderChests.remove(uuid);
}
}

Expand Down
Expand Up @@ -13,8 +13,9 @@
import org.apache.logging.log4j.spi.AbstractLogger;
import org.apache.logging.log4j.spi.AbstractLoggerWrapper;
import org.bukkit.ChatColor;
import org.bukkit.craftbukkit.v1_10_R1.LoggerOutputStream;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.HashMap;
Expand Down Expand Up @@ -116,4 +117,27 @@ public void log(Marker marker, String fqcn, Level level, Message data, Throwable
super.log(marker, fqcn, level, data, t);
}
}

private static class LoggerOutputStream extends ByteArrayOutputStream {
private final String separator = System.getProperty("line.separator");
private final Logger logger;
private final Level level;

public LoggerOutputStream(Logger logger, Level level) {
this.logger = logger;
this.level = level;
}

public void flush() throws IOException {
synchronized(this) {
super.flush();
String record = this.toString();
super.reset();
if(record.length() > 0 && !record.equals(this.separator)) {
this.logger.log(this.level, record);
}

}
}
}
}
@@ -1,75 +1,23 @@
package net.aufdemrand.denizen.utilities.entity;

import net.minecraft.server.v1_10_R1.EntityRabbit;
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftRabbit;
import org.bukkit.entity.Rabbit;

public enum RabbitType {
BROWN(0, 0),
WHITE(1, 1),
BLACK(2, 2),
WHITE_SPLOTCHED(3, 3),
GOLD(4, 4),
SALT(5, 5),
KILLER(6, 99);
BROWN(Rabbit.Type.BROWN),
WHITE(Rabbit.Type.WHITE),
BLACK(Rabbit.Type.BLACK),
WHITE_SPLOTCHED(Rabbit.Type.BLACK_AND_WHITE),
GOLD(Rabbit.Type.GOLD),
SALT(Rabbit.Type.SALT_AND_PEPPER),
KILLER(Rabbit.Type.THE_KILLER_BUNNY);

public static RabbitType getRabbitType(Rabbit rabbit) {
return RabbitType.getType(getEntityRabbit(rabbit).getRabbitType());
}

public static void setRabbitType(Rabbit rabbit, RabbitType type) {
getEntityRabbit(rabbit).setRabbitType(type.getId());
}

private static EntityRabbit getEntityRabbit(Rabbit rabbit) {
return (EntityRabbit) ((CraftRabbit) rabbit).getHandle();
}

private static final RabbitType[] types = new RabbitType[values().length];
private final int internalId;
private final int id;

static {
for (RabbitType type : values()) {
types[type.getInternalId()] = type;
}
}

private RabbitType(int internalId, int id) {
this.internalId = internalId;
this.id = id;
}

/**
* Gets the ID of this rabbit type.
*
* @return Type ID.
*/
public int getId() {
return id;
}
private Rabbit.Type type;

/**
* Gets the internal ID of this rabbit type.
*
* @return Internal Type ID.
*/
private int getInternalId() {
return internalId;
RabbitType(Rabbit.Type type) {
this.type = type;
}

/**
* Gets a rabbit type by its ID.
*
* @param id ID of the rabbit type to get.
* @return Resulting type, or null if not found.
*/
public static RabbitType getType(int id) {
for (RabbitType type : types) {
if (id == type.getId()) {
return type;
}
}
return null;
public Rabbit.Type getType() {
return type;
}
}

0 comments on commit 663b6f5

Please sign in to comment.