mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
198 lines
6.7 KiB
Java
198 lines
6.7 KiB
Java
package com.hbm.items.tool;
|
|
|
|
import java.io.File;
|
|
import java.io.FileWriter;
|
|
import java.io.IOException;
|
|
import com.google.gson.stream.JsonWriter;
|
|
import com.hbm.blocks.ILookOverlay;
|
|
import com.hbm.blocks.ModBlocks;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.util.fauxpointtwelve.BlockPos;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class ItemCMStructure extends Item implements ILookOverlay {
|
|
|
|
private static File file = new File(MainRegistry.configHbmDir, "CMstructureOutput.txt");
|
|
|
|
public static BlockPos getAnchor(ItemStack stack) {
|
|
|
|
if(!stack.hasTagCompound()) {
|
|
return null;
|
|
}
|
|
|
|
return new BlockPos(stack.stackTagCompound.getInteger("anchorX"), stack.stackTagCompound.getInteger("anchorY"), stack.stackTagCompound.getInteger("anchorZ"));
|
|
}
|
|
|
|
public static void setAnchor(ItemStack stack, int x, int y, int z) {
|
|
|
|
if(stack.stackTagCompound == null) {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
}
|
|
|
|
stack.stackTagCompound.setInteger("anchorX", x);
|
|
stack.stackTagCompound.setInteger("anchorY", y);
|
|
stack.stackTagCompound.setInteger("anchorZ", z);
|
|
}
|
|
|
|
public static void writeToFile(File config, ItemStack stack, World world) {
|
|
int anchorX = stack.stackTagCompound.getInteger("anchorX");
|
|
int anchorY = stack.stackTagCompound.getInteger("anchorY");
|
|
int anchorZ = stack.stackTagCompound.getInteger("anchorZ");
|
|
int x1 = stack.stackTagCompound.getInteger("x1");
|
|
int y1 = stack.stackTagCompound.getInteger("y1");
|
|
int z1 = stack.stackTagCompound.getInteger("z1");
|
|
int x2 = stack.stackTagCompound.getInteger("x2");
|
|
int y2 = stack.stackTagCompound.getInteger("y2");
|
|
int z2 = stack.stackTagCompound.getInteger("z2");
|
|
ForgeDirection dir = ForgeDirection.getOrientation(world.getBlockMetadata(anchorX, anchorY, anchorZ));
|
|
int minX = Math.min(x1, x2);
|
|
int maxX = Math.max(x1, x2);
|
|
int minY = Math.min(y1, y2);
|
|
int maxY = Math.max(y1, y2);
|
|
int minZ = Math.min(z1, z2);
|
|
int maxZ = Math.max(z1, z2);
|
|
|
|
try {
|
|
JsonWriter writer = new JsonWriter(new FileWriter(config));
|
|
writer.setIndent(" ");
|
|
writer.beginObject();
|
|
writer.name("components").beginArray();
|
|
|
|
for(int x = minX; x <= maxX; x++) {
|
|
for(int y = minY; y <= maxY; y++) {
|
|
for(int z = minZ; z <= maxZ; z++) {
|
|
|
|
int compY = y - anchorY;
|
|
int compX = 0;
|
|
int compZ = 0;
|
|
|
|
if(dir == ForgeDirection.SOUTH) {
|
|
compX = anchorX - x;
|
|
compZ = anchorZ - z;
|
|
}
|
|
if(dir == ForgeDirection.NORTH) {
|
|
compX = x - anchorX;
|
|
compZ = z - anchorZ;
|
|
}
|
|
|
|
if(dir == ForgeDirection.WEST) {
|
|
compZ = x - anchorX;
|
|
compX = anchorZ - z;
|
|
}
|
|
if(dir == ForgeDirection.EAST) {
|
|
compZ = anchorX - x;
|
|
compX = z - anchorZ;
|
|
}
|
|
|
|
if(x == anchorX && y == anchorY && z == anchorZ) continue;
|
|
Block block = world.getBlock(x, y, z);
|
|
int meta = world.getBlockMetadata(x, y, z);
|
|
if(block == Blocks.air) continue;
|
|
|
|
writer.beginObject().setIndent("");
|
|
writer.name("block").value(Block.blockRegistry.getNameForObject(block));
|
|
writer.name("x").value(compX);
|
|
writer.name("y").value(compY);
|
|
writer.name("z").value(compZ);
|
|
writer.name("metas").beginArray().value(meta).endArray();
|
|
writer.endObject().setIndent(" ");
|
|
}
|
|
}
|
|
}
|
|
writer.endArray();
|
|
writer.endObject();
|
|
writer.close();
|
|
} catch(IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
|
|
Block b = world.getBlock(x, y, z);
|
|
|
|
if(b == ModBlocks.cm_anchor) {
|
|
this.setAnchor(stack, x, y, z);
|
|
return true;
|
|
}
|
|
|
|
if(this.getAnchor(stack) == null) {
|
|
return false;
|
|
}
|
|
if(!stack.stackTagCompound.hasKey("x1")) {
|
|
stack.stackTagCompound.setInteger("x1", x);
|
|
stack.stackTagCompound.setInteger("y1", y);
|
|
stack.stackTagCompound.setInteger("z1", z);
|
|
} else if(!stack.stackTagCompound.hasKey("x2")) {
|
|
stack.stackTagCompound.setInteger("x2", x);
|
|
stack.stackTagCompound.setInteger("y2", y);
|
|
stack.stackTagCompound.setInteger("z2", z);
|
|
} else {
|
|
writeToFile(file, stack, world);
|
|
stack.stackTagCompound.removeTag("x1");
|
|
stack.stackTagCompound.removeTag("y1");
|
|
stack.stackTagCompound.removeTag("z1");
|
|
stack.stackTagCompound.removeTag("x2");
|
|
stack.stackTagCompound.removeTag("y2");
|
|
stack.stackTagCompound.removeTag("z2");
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
|
|
super.addInformation(stack, player, list, ext);
|
|
list.add(EnumChatFormatting.YELLOW + "Click Custom Machine Structure Positioning Anchor to");
|
|
list.add(EnumChatFormatting.YELLOW + "Confirm the location of the custom machine core block.");
|
|
list.add(EnumChatFormatting.YELLOW + "Output all blocks between Position1 and Position2 with");
|
|
list.add(EnumChatFormatting.YELLOW + "metadata to \"CMstructureOutput.txt\" in hbmConfig.");
|
|
}
|
|
|
|
@Override
|
|
public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) {
|
|
ItemStack stack = Minecraft.getMinecraft().thePlayer.getHeldItem();
|
|
List<String> text = new ArrayList();
|
|
|
|
BlockPos anchor = getAnchor(stack);
|
|
|
|
if(anchor == null) {
|
|
|
|
text.add(EnumChatFormatting.RED + "No Anchor");
|
|
} else {
|
|
int anchorX = stack.stackTagCompound.getInteger("anchorX");
|
|
int anchorY = stack.stackTagCompound.getInteger("anchorY");
|
|
int anchorZ = stack.stackTagCompound.getInteger("anchorZ");
|
|
text.add(EnumChatFormatting.GOLD + "Anchor: " + anchorX + " / " + anchorY + " / " + anchorZ);
|
|
if(stack.stackTagCompound.hasKey("x1")) {
|
|
int x1 = stack.stackTagCompound.getInteger("x1");
|
|
int y1 = stack.stackTagCompound.getInteger("y1");
|
|
int z1 = stack.stackTagCompound.getInteger("z1");
|
|
|
|
text.add(EnumChatFormatting.YELLOW + "Position1: " + x1 + " / " + y1 + " / " + z1);
|
|
}
|
|
if(stack.stackTagCompound.hasKey("x2")) {
|
|
int x2 = stack.stackTagCompound.getInteger("x2");
|
|
int y2 = stack.stackTagCompound.getInteger("y2");
|
|
int z2 = stack.stackTagCompound.getInteger("z2");
|
|
text.add(EnumChatFormatting.YELLOW + "Position2: " + x2 + " / " + y2 + " / " + z2);
|
|
}
|
|
}
|
|
|
|
ILookOverlay.printGeneric(event, this.getItemStackDisplayName(stack), 0xffff00, 0x404000, text);
|
|
}
|
|
}
|