// Path: src/main/java/myessentials/entities/api/BlockPos.java
// public class BlockPos implements IChatFormat {
//     private final int dim;
//     private final int x;
//     private final int y;
//     private final int z;
// 
//     public BlockPos(int x, int y, int z, int dim) {
//         this.x = x;
//         this.y = y;
//         this.z = z;
//         this.dim = dim;
//     }
// 
//     public int getDim() {
//         return dim;
//     }
// 
//     public int getX() {
//         return x;
//     }
// 
//     public int getY() {
//         return y;
//     }
// 
//     public int getZ() {
//         return z;
//     }
// 
//     @Override
//     public String toString() {
//         return toChatMessage().getUnformattedText();
//     }
// 
//     @Override
//     public boolean equals(Object other) {
//         if(other instanceof BlockPos) {
//             BlockPos otherBP = (BlockPos) other;
//             return otherBP.dim == dim && otherBP.x == x && otherBP.y == y && otherBP.z == z;
//         }
//         return super.equals(other);
//     }
// 
//     @Override
//     public IChatComponent toChatMessage() {
//         return MyEssentialsCore.instance.LOCAL.getLocalization("myessentials.format.blockpos", x, y, z, dim);
//     }
// }


import myessentials.classtransformers.SignClassTransformer;
import myessentials.entities.api.BlockPos;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntitySign;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
package myessentials.entities.api.sign;



/**
 * A simple wrapper class of a sign block for the server side.
 */
public abstract class Sign {

    public static final String IDENTIFIER = EnumChatFormatting.DARK_BLUE.toString();

    public final SignType signType;

    protected NBTBase data;

    protected BlockPos bp;

    protected Sign(SignType signType) {
        this.signType = signType;
    }

    public abstract void onRightClick(EntityPlayer player);

    protected abstract String[] getText();

    public void onShiftRightClick(EntityPlayer player) {
    }

// Path: src/main/java/myessentials/entities/api/BlockPos.java
// public class BlockPos implements IChatFormat {
//     private final int dim;
//     private final int x;
//     private final int y;
//     private final int z;
// 
//     public BlockPos(int x, int y, int z, int dim) {
//         this.x = x;
//         this.y = y;
//         this.z = z;
//         this.dim = dim;
//     }
// 
//     public int getDim() {
//         return dim;
//     }
// 
//     public int getX() {
//         return x;
//     }
// 
//     public int getY() {
//         return y;
//     }
// 
//     public int getZ() {
//         return z;
//     }
// 
//     @Override
//     public String toString() {
//         return toChatMessage().getUnformattedText();
//     }
// 
//     @Override
//     public boolean equals(Object other) {
//         if(other instanceof BlockPos) {
//             BlockPos otherBP = (BlockPos) other;
//             return otherBP.dim == dim && otherBP.x == x && otherBP.y == y && otherBP.z == z;
//         }
//         return super.equals(other);
//     }
// 
//     @Override
//     public IChatComponent toChatMessage() {
//         return MyEssentialsCore.instance.LOCAL.getLocalization("myessentials.format.blockpos", x, y, z, dim);
//     }
// }


// Path: src/main/java/myessentials/entities/api/sign/Sign.java
import myessentials.classtransformers.SignClassTransformer;
import myessentials.entities.api.BlockPos;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntitySign;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;

package myessentials.entities.api.sign;



/**
 * A simple wrapper class of a sign block for the server side.
 */
public abstract class Sign {

    public static final String IDENTIFIER = EnumChatFormatting.DARK_BLUE.toString();

    public final SignType signType;

    protected NBTBase data;

    protected BlockPos bp;

    protected Sign(SignType signType) {
        this.signType = signType;
    }

    public abstract void onRightClick(EntityPlayer player);

    protected abstract String[] getText();

    public void onShiftRightClick(EntityPlayer player) {
    }

    public TileEntitySign createSignBlock(EntityPlayer player, BlockPos bp, int face) {