Skip to content

Commit

Permalink
set & retrieve flowerpot contents
Browse files Browse the repository at this point in the history
  • Loading branch information
mergu committed Aug 23, 2017
1 parent 171a3b2 commit 055cfa1
Show file tree
Hide file tree
Showing 13 changed files with 192 additions and 3 deletions.
Expand Up @@ -5,9 +5,14 @@
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Skull;
import org.bukkit.material.MaterialData;

public interface BlockHelper {

MaterialData getFlowerpotContents(Block block);

void setFlowerpotContents(Block block, MaterialData data);

PlayerProfile getPlayerProfile(Skull skull);

void setPlayerProfile(Skull skull, PlayerProfile playerProfile);
Expand Down
Expand Up @@ -4,5 +4,7 @@

public interface ChunkHelper {

void refreshChunk(Chunk chunk);

int[] getHeightMap(Chunk chunk);
}
31 changes: 31 additions & 0 deletions plugin/src/main/java/net/aufdemrand/denizen/objects/dLocation.java
Expand Up @@ -739,6 +739,20 @@ else if (type == Material.TRAP_DOOR
return list.getAttribute(attribute.fulfill(1));
}

// <--[tag]
// @attribute <l@location.flowerpot_contents>
// @returns Element
// @description
// Returns the flower pot contents at the location.
// -->
if (attribute.startsWith("flowerpot_contents") && getBlock().getType() == Material.FLOWER_POT) {
MaterialData contents = NMSHandler.getInstance().getBlockHelper().getFlowerpotContents(getBlock());
return dMaterial.getMaterialFrom(contents.getItemType(), contents.getData())
.getAttribute(attribute.fulfill(1));

}


// <--[tag]
// @attribute <l@location.skull_type>
// @returns Element
Expand Down Expand Up @@ -2186,6 +2200,23 @@ && getBlock().getState() instanceof CreatureSpawner) {
}
}

// <--[mechanism]
// @object dLocation
// @name flowerpot_contents
// @input dMaterial
// @description
// Sets the contents of a flower pot.
// @tags
// <l@location.flowerpot_contents>
// -->
if (mechanism.matches("flowerpot_contents") && mechanism.requireObject(dMaterial.class)) {
if (getBlock().getType() == Material.FLOWER_POT) {
MaterialData data = value.asType(dMaterial.class).getMaterialData();
NMSHandler.getInstance().getBlockHelper().setFlowerpotContents(getBlock(), data);
NMSHandler.getInstance().getChunkHelper().refreshChunk(getChunk());
}
}

// <--[mechanism]
// @object dLocation
// @name command_block_name
Expand Down
Expand Up @@ -14,14 +14,28 @@
import org.bukkit.Material;
import org.bukkit.SkullType;
import org.bukkit.block.Block;
import org.bukkit.block.FlowerPot;
import org.bukkit.block.Skull;
import org.bukkit.craftbukkit.v1_10_R1.block.CraftBlockState;
import org.bukkit.craftbukkit.v1_10_R1.block.CraftSkull;
import org.bukkit.material.MaterialData;

import java.util.UUID;

public class BlockHelper_v1_10_R1 implements BlockHelper {

@Override
public MaterialData getFlowerpotContents(Block block) {
return ((FlowerPot) block.getState()).getContents();
}

@Override
public void setFlowerpotContents(Block block, MaterialData data) {
FlowerPot flowerPot = (FlowerPot) block.getState();
flowerPot.setContents(data);
flowerPot.update();
}

@Override
public PlayerProfile getPlayerProfile(Skull skull) {
GameProfile profile = ((CraftSkull) skull).getTileEntity().getGameProfile();
Expand Down
@@ -1,11 +1,25 @@
package net.aufdemrand.denizen.nms.helpers;

import net.aufdemrand.denizen.nms.interfaces.ChunkHelper;
import net.minecraft.server.v1_10_R1.PacketPlayOutMapChunk;
import org.bukkit.Chunk;
import org.bukkit.craftbukkit.v1_10_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;

public class ChunkHelper_v1_10_R1 implements ChunkHelper {

@Override
public void refreshChunk(Chunk chunk) {

PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(((CraftChunk) chunk).getHandle(), 65535);

for (Player player : chunk.getWorld().getPlayers()) {
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

}

@Override
public int[] getHeightMap(Chunk chunk) {
return ((CraftChunk) chunk).getHandle().heightMap;
Expand Down
Expand Up @@ -14,14 +14,28 @@
import org.bukkit.Material;
import org.bukkit.SkullType;
import org.bukkit.block.Block;
import org.bukkit.block.FlowerPot;
import org.bukkit.block.Skull;
import org.bukkit.craftbukkit.v1_11_R1.block.CraftBlockState;
import org.bukkit.craftbukkit.v1_11_R1.block.CraftSkull;
import org.bukkit.material.MaterialData;

import java.util.UUID;

public class BlockHelper_v1_11_R1 implements BlockHelper {

@Override
public MaterialData getFlowerpotContents(Block block) {
return ((FlowerPot) block.getState()).getContents();
}

@Override
public void setFlowerpotContents(Block block, MaterialData data) {
FlowerPot flowerPot = (FlowerPot) block.getState();
flowerPot.setContents(data);
flowerPot.update();
}

@Override
public PlayerProfile getPlayerProfile(Skull skull) {
GameProfile profile = ((CraftSkull) skull).getTileEntity().getGameProfile();
Expand Down
@@ -1,11 +1,25 @@
package net.aufdemrand.denizen.nms.helpers;

import net.aufdemrand.denizen.nms.interfaces.ChunkHelper;
import net.minecraft.server.v1_11_R1.PacketPlayOutMapChunk;
import org.bukkit.Chunk;
import org.bukkit.craftbukkit.v1_11_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;

public class ChunkHelper_v1_11_R1 implements ChunkHelper {

@Override
public void refreshChunk(Chunk chunk) {

PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(((CraftChunk) chunk).getHandle(), 65535);

for (Player player : chunk.getWorld().getPlayers()) {
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

}

@Override
public int[] getHeightMap(Chunk chunk) {
return ((CraftChunk) chunk).getHandle().heightMap;
Expand Down
Expand Up @@ -14,14 +14,28 @@
import org.bukkit.Material;
import org.bukkit.SkullType;
import org.bukkit.block.Block;
import org.bukkit.block.FlowerPot;
import org.bukkit.block.Skull;
import org.bukkit.craftbukkit.v1_12_R1.block.CraftBlockState;
import org.bukkit.craftbukkit.v1_12_R1.block.CraftSkull;
import org.bukkit.material.MaterialData;

import java.util.UUID;

public class BlockHelper_v1_12_R1 implements BlockHelper {

@Override
public MaterialData getFlowerpotContents(Block block) {
return ((FlowerPot) block.getState()).getContents();
}

@Override
public void setFlowerpotContents(Block block, MaterialData data) {
FlowerPot flowerPot = (FlowerPot) block.getState();
flowerPot.setContents(data);
flowerPot.update();
}

@Override
public PlayerProfile getPlayerProfile(Skull skull) {
GameProfile profile = ((CraftSkull) skull).getTileEntity().getGameProfile();
Expand Down
@@ -1,11 +1,25 @@
package net.aufdemrand.denizen.nms.helpers;

import net.aufdemrand.denizen.nms.interfaces.ChunkHelper;
import net.minecraft.server.v1_12_R1.PacketPlayOutMapChunk;
import org.bukkit.Chunk;
import org.bukkit.craftbukkit.v1_12_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;

public class ChunkHelper_v1_12_R1 implements ChunkHelper {

@Override
public void refreshChunk(Chunk chunk) {

PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(((CraftChunk) chunk).getHandle(), 255);

for (Player player : chunk.getWorld().getPlayers()) {
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

}

@Override
public int[] getHeightMap(Chunk chunk) {
return ((CraftChunk) chunk).getHandle().heightMap;
Expand Down
Expand Up @@ -9,20 +9,42 @@
import net.aufdemrand.denizen.nms.interfaces.BlockHelper;
import net.aufdemrand.denizen.nms.util.PlayerProfile;
import net.aufdemrand.denizen.nms.util.jnbt.CompoundTag;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
import net.minecraft.server.v1_8_R3.TileEntity;
import net.minecraft.server.v1_8_R3.TileEntitySkull;
import net.minecraft.server.v1_8_R3.*;
import org.bukkit.Material;
import org.bukkit.SkullType;
import org.bukkit.block.Block;
import org.bukkit.block.Skull;
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R3.block.CraftBlockState;
import org.bukkit.craftbukkit.v1_8_R3.block.CraftSkull;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
import org.bukkit.material.MaterialData;

import java.util.UUID;

public class BlockHelper_v1_8_R3 implements BlockHelper {

@Override
public MaterialData getFlowerpotContents(Block block) {
TileEntityFlowerPot flowerPot = (TileEntityFlowerPot) ((CraftWorld) block.getWorld()).getHandle().getTileEntity(
new BlockPosition(block.getX(), block.getY(), block.getZ()));
ItemStack is = new ItemStack(flowerPot.b());
return new MaterialData(CraftItemStack.asBukkitCopy(is).getType(), (byte) flowerPot.c());
}

@Override
public void setFlowerpotContents(Block block, MaterialData data) {
TileEntityFlowerPot flowerPot = (TileEntityFlowerPot) ((CraftWorld) block.getWorld()).getHandle().getTileEntity(
new BlockPosition(block.getX(), block.getY(), block.getZ()));
ItemStack contents = CraftItemStack.asNMSCopy(data.toItemStack());
if (contents == null)
flowerPot.a(null, 0);
else
flowerPot.a(contents.getItem(), contents.getData());

block.getState().update();
}

@Override
public PlayerProfile getPlayerProfile(Skull skull) {
GameProfile profile = ((CraftSkull) skull).getTileEntity().getGameProfile();
Expand Down
@@ -1,11 +1,25 @@
package net.aufdemrand.denizen.nms.helpers;

import net.aufdemrand.denizen.nms.interfaces.ChunkHelper;
import net.minecraft.server.v1_8_R3.PacketPlayOutMapChunk;
import org.bukkit.Chunk;
import org.bukkit.craftbukkit.v1_8_R3.CraftChunk;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;

public class ChunkHelper_v1_8_R3 implements ChunkHelper {

@Override
public void refreshChunk(Chunk chunk) {

PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(((CraftChunk) chunk).getHandle(), false, 65535);

for (Player player : chunk.getWorld().getPlayers()) {
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

}

@Override
public int[] getHeightMap(Chunk chunk) {
return ((CraftChunk) chunk).getHandle().heightMap;
Expand Down
Expand Up @@ -14,14 +14,28 @@
import org.bukkit.Material;
import org.bukkit.SkullType;
import org.bukkit.block.Block;
import org.bukkit.block.FlowerPot;
import org.bukkit.block.Skull;
import org.bukkit.craftbukkit.v1_9_R2.block.CraftBlockState;
import org.bukkit.craftbukkit.v1_9_R2.block.CraftSkull;
import org.bukkit.material.MaterialData;

import java.util.UUID;

public class BlockHelper_v1_9_R2 implements BlockHelper {

@Override
public MaterialData getFlowerpotContents(Block block) {
return ((FlowerPot) block.getState()).getContents();
}

@Override
public void setFlowerpotContents(Block block, MaterialData data) {
FlowerPot flowerPot = (FlowerPot) block.getState();
flowerPot.setContents(data);
flowerPot.update();
}

@Override
public PlayerProfile getPlayerProfile(Skull skull) {
GameProfile profile = ((CraftSkull) skull).getTileEntity().getGameProfile();
Expand Down
@@ -1,11 +1,28 @@
package net.aufdemrand.denizen.nms.helpers;

import net.aufdemrand.denizen.nms.interfaces.ChunkHelper;
import net.aufdemrand.denizencore.utilities.debugging.dB;
import net.minecraft.server.v1_9_R2.*;
import org.bukkit.Chunk;
import org.bukkit.craftbukkit.v1_9_R2.CraftChunk;
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;

import static sun.audio.AudioPlayer.player;

public class ChunkHelper_v1_9_R2 implements ChunkHelper {

@Override
public void refreshChunk(Chunk chunk) {

PacketPlayOutMapChunk packet = new PacketPlayOutMapChunk(((CraftChunk) chunk).getHandle(), 65535);

for (Player player : chunk.getWorld().getPlayers()) {
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}

}

@Override
public int[] getHeightMap(Chunk chunk) {
return ((CraftChunk) chunk).getHandle().heightMap;
Expand Down

0 comments on commit 055cfa1

Please sign in to comment.