aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/detrav/items
diff options
context:
space:
mode:
authorBlueWeabo <ilia.iliev@tuta.com>2024-08-30 18:16:57 +0300
committerBlueWeabo <ilia.iliev@tuta.com>2024-08-30 18:16:57 +0300
commit3ed88dde64660e29c3f318d2c61b76082cc52ed9 (patch)
treedc56fdfef9a0dd30005bf926e0b46c23900d264d /src/main/java/com/detrav/items
parent557fb75ff46f2ad422e64b45887a33a42fe6cafb (diff)
downloadGT5-Unofficial-3ed88dde64660e29c3f318d2c61b76082cc52ed9.tar.gz
GT5-Unofficial-3ed88dde64660e29c3f318d2c61b76082cc52ed9.tar.bz2
GT5-Unofficial-3ed88dde64660e29c3f318d2c61b76082cc52ed9.zip
merge sources and fix dependencies
Diffstat (limited to 'src/main/java/com/detrav/items')
-rw-r--r--src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java362
-rw-r--r--src/main/java/com/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java255
-rw-r--r--src/main/java/com/detrav/items/behaviours/BehaviourDetravToolProspector.java424
-rw-r--r--src/main/java/com/detrav/items/processing/ProcessingDetravToolProspector.java113
-rw-r--r--src/main/java/com/detrav/items/tools/DetravProspector.java35
-rw-r--r--src/main/java/com/detrav/items/tools/DetravToolElectricProspector.java34
-rw-r--r--src/main/java/com/detrav/items/tools/DetravToolElectricProspectorBase.java201
7 files changed, 1424 insertions, 0 deletions
diff --git a/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java b/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java
new file mode 100644
index 0000000000..c5b891784e
--- /dev/null
+++ b/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java
@@ -0,0 +1,362 @@
+package com.detrav.items;
+
+import java.util.List;
+
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
+
+import com.detrav.DetravScannerMod;
+import com.detrav.enums.DetravToolDictNames;
+import com.detrav.items.tools.DetravProspector;
+import com.detrav.items.tools.DetravToolElectricProspector;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.TC_Aspects;
+import gregtech.api.interfaces.IToolStats;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+/**
+ * Created by wital_000 on 19.03.2016.
+ */
+public class DetravMetaGeneratedTool01 extends GT_MetaGenerated_Tool {
+
+ public static DetravMetaGeneratedTool01 INSTANCE;
+
+ public DetravMetaGeneratedTool01() {
+ super("detrav.metatool.01");
+ INSTANCE = this;
+ addTool(
+ 0,
+ "Prospector's Scanner(ULV)",
+ "",
+ new DetravProspector(0),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+ addTool(
+ 2,
+ "Prospector's Scanner(LV)",
+ "",
+ new DetravProspector(1),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+ addTool(
+ 4,
+ "Prospector's Scanner(MV)",
+ "",
+ new DetravProspector(2),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+ addTool(
+ 6,
+ "Prospector's Scanner(HV)",
+ "",
+ new DetravProspector(3),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+ addTool(
+ 8,
+ "Prospector's Scanner(EV)",
+ "",
+ new DetravProspector(4),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+ addTool(
+ 10,
+ "Prospector's Scanner(IV)",
+ "",
+ new DetravProspector(5),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+ addTool(
+ 12,
+ "Prospector's Scanner(LuV)",
+ "",
+ new DetravProspector(6),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+ addTool(
+ 14,
+ "Prospector's Scanner(ZPM)",
+ "",
+ new DetravProspector(7),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+ addTool(
+ 16,
+ "Prospector's Scanner(UV)",
+ "",
+ new DetravProspector(8),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+ addTool(
+ 18,
+ "Prospector's Scanner(UHV)",
+ "",
+ new DetravProspector(9),
+ DetravToolDictNames.craftingToolProspector.toString(),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L));
+
+ addTool(
+ 100,
+ "Electric Prospector's Scanner (LuV)",
+ "",
+ new DetravToolElectricProspector(6),
+ DetravToolDictNames.craftingToolElectricProspector,
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L));
+ addTool(
+ 102,
+ "Electric Prospector's Scanner (ZPM)",
+ "",
+ new DetravToolElectricProspector(7),
+ DetravToolDictNames.craftingToolElectricProspector,
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L));
+ addTool(
+ 104,
+ "Electric Prospector's Scanner (UV)",
+ "",
+ new DetravToolElectricProspector(8),
+ DetravToolDictNames.craftingToolElectricProspector,
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L));
+ addTool(
+ 106,
+ "Electric Prospector's Scanner (UHV)",
+ "",
+ new DetravToolElectricProspector(9),
+ DetravToolDictNames.craftingToolElectricProspector,
+ new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L),
+ new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L));
+ setCreativeTab(DetravScannerMod.TAB_DETRAV);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) {
+ long tMaxDamage = getToolMaxDamage(aStack);
+ Materials tMaterial = getPrimaryMaterial(aStack);
+ IToolStats tStats = getToolStats(aStack);
+ int tOffset = aList.size();
+ if (tStats == null) return;
+
+ String name = aStack.getUnlocalizedName();
+ String num = name.substring("gt.detrav.metatool.01.".length());
+ int meta = Integer.parseInt(num);
+ int range = getHarvestLevel(aStack, "") / 2 + (meta / 4);
+ if ((range % 2) == 0) {
+ range += 1;
+ }
+ if (meta < 100) {
+ aList.add(
+ tOffset + 0,
+ EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.durability")
+ + EnumChatFormatting.GREEN
+ + Long.toString(tMaxDamage - getToolDamage(aStack))
+ + " / "
+ + Long.toString(tMaxDamage)
+ + EnumChatFormatting.GRAY);
+ aList.add(
+ tOffset + 1,
+ EnumChatFormatting.WHITE + tMaterial.getLocalizedNameForItem("%material")
+ + EnumChatFormatting.GRAY);
+ aList.add(
+ tOffset + 2,
+ EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.range")
+ + Integer.toString(range)
+ + "x"
+ + Integer.toString(range)
+ + EnumChatFormatting.GRAY);
+ aList.add(
+ tOffset + 3,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.0")
+ + EnumChatFormatting.GRAY);
+ aList.add(
+ tOffset + 4,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.1")
+ + EnumChatFormatting.GRAY);
+ aList.add(
+ tOffset + 5,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.success.chance")
+ + EnumChatFormatting.RESET
+ + Integer.toString(((((1 + meta) * 8) <= 100) ? ((1 + meta) * 8) : 100))
+ + EnumChatFormatting.GRAY
+ + "%");
+ aList.add(
+ tOffset + 6,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.distance.0"));
+ aList.add(
+ tOffset + 7,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.distance.1"));
+
+ } else if (meta >= 100 && meta < 200) {
+ aList.add(
+ tOffset + 0,
+ EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.durability")
+ + EnumChatFormatting.GREEN
+ + (tMaxDamage - getToolDamage(aStack))
+ + " / "
+ + tMaxDamage
+ + EnumChatFormatting.GRAY);
+ aList.add(
+ tOffset + 1,
+ EnumChatFormatting.WHITE + tMaterial.getLocalizedNameForItem("%material")
+ + EnumChatFormatting.GRAY);
+ aList.add(
+ tOffset + 2,
+ EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.range")
+ + EnumChatFormatting.YELLOW
+ + (getHarvestLevel(aStack, "") * 2 + 1)
+ + "x"
+ + (getHarvestLevel(aStack, "") * 2 + 1)
+ + EnumChatFormatting.GRAY);
+ aList.add(
+ tOffset + 3,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.0"));
+ aList.add(
+ tOffset + 4,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.1"));
+ aList.add(
+ tOffset + 5,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.2"));
+ aList.add(
+ tOffset + 6,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.3"));
+ aList.add(
+ tOffset + 7,
+ EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.4"));
+ }
+
+ }
+
+ public Long getToolGTDetravData(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null) return aNBT.getLong("DetravData");
+ }
+ return 0L;
+ }
+
+ public boolean setToolGTDetravData(ItemStack aStack, long data) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null) {
+ aNBT.setLong("DetravData", data);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void getDetravSubItems(Item item, CreativeTabs detravCreativeTab, List list) {
+
+ ItemStack dStack;
+ if (DetravScannerMod.isDreamcraftLoaded) {
+ // Materials at tiers
+ list.add(getToolWithStats(0, 1, Materials.Polycaprolactam, Materials.Polycaprolactam, null));
+ list.add(getToolWithStats(2, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(2, 1, Materials.Bronze, Materials.Steel, null));
+ list.add(getToolWithStats(4, 1, Materials.Manyullyn, Materials.Aluminium, null));
+ list.add(getToolWithStats(6, 1, Materials.DamascusSteel, Materials.DamascusSteel, null));
+ list.add(getToolWithStats(8, 1, Materials.Titanium, Materials.Titanium, null));
+ list.add(getToolWithStats(10, 1, Materials.TungstenSteel, Materials.TungstenSteel, null));
+ list.add(getToolWithStats(12, 1, Materials.Iridium, Materials.Iridium, null));
+ list.add(getToolWithStats(12, 1, Materials.Osmium, Materials.Osmium, null));
+ list.add(getToolWithStats(14, 1, Materials.Neutronium, Materials.Neutronium, null));
+ list.add(getToolWithStats(16, 1, Materials.InfinityCatalyst, Materials.InfinityCatalyst, null));
+ list.add(getToolWithStats(18, 1, Materials.Infinity, Materials.Infinity, null));
+ }
+
+ // Steel for comparison
+ list.add(getToolWithStats(0, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(2, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(4, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(6, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(8, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(10, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(12, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(14, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(16, 1, Materials.Steel, Materials.Steel, null));
+ list.add(getToolWithStats(18, 1, Materials.Steel, Materials.Steel, null));
+
+ // Electric Scanners
+ dStack = getToolWithStats(
+ 100,
+ 1,
+ Materials.Iridium,
+ Materials.TungstenSteel,
+ new long[] { 102400000L, GT_Values.V[6], 6L, -1L });
+ setCharge(dStack, 102400000L);
+ list.add(dStack);
+
+ dStack = getToolWithStats(
+ 102,
+ 1,
+ Materials.Neutronium,
+ Materials.TungstenSteel,
+ new long[] { 409600000L, GT_Values.V[7], 7L, -1L });
+ setCharge(dStack, 409600000L);
+ list.add(dStack);
+
+ if (DetravScannerMod.isDreamcraftLoaded) {
+ dStack = getToolWithStats(
+ 104,
+ 1,
+ Materials.InfinityCatalyst,
+ Materials.TungstenSteel,
+ new long[] { 1638400000L, GT_Values.V[8], 8L, -1L });
+ setCharge(dStack, 1638400000L);
+ list.add(dStack);
+
+ dStack = getToolWithStats(
+ 106,
+ 1,
+ Materials.Infinity,
+ Materials.TungstenSteel,
+ new long[] { 6553600000L, GT_Values.V[9], 9L, -1L });
+ setCharge(dStack, 6553600000L);
+ list.add(dStack);
+ } else {
+ dStack = getToolWithStats(
+ 106,
+ 1,
+ Materials.Neutronium,
+ Materials.TungstenSteel,
+ new long[] { 6553600000L, GT_Values.V[9], 9L, -1L });
+ setCharge(dStack, 6553600000L);
+ list.add(dStack);
+ }
+ }
+}
diff --git a/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java b/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java
new file mode 100644
index 0000000000..8cd4e28fa4
--- /dev/null
+++ b/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java
@@ -0,0 +1,255 @@
+package com.detrav.items.behaviours;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.Chunk;
+import net.minecraftforge.fluids.FluidStack;
+
+import com.detrav.DetravScannerMod;
+import com.detrav.items.DetravMetaGeneratedTool01;
+import com.detrav.net.DetravNetwork;
+import com.detrav.net.ProspectingPacket;
+import com.detrav.utils.BartWorksHelper;
+import com.detrav.utils.GTppHelper;
+import com.sinthoras.visualprospecting.VisualProspecting_API;
+
+import cpw.mods.fml.common.Loader;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.objects.ItemData;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.common.GT_UndergroundOil;
+import gregtech.common.blocks.GT_Block_Ores_Abstract;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+
+/**
+ * Created by wital_000 on 19.03.2016.
+ */
+public class BehaviourDetravToolElectricProspector extends BehaviourDetravToolProspector {
+
+ public BehaviourDetravToolElectricProspector(int aCosts) {
+ super(aCosts);
+ }
+
+ public ItemStack onItemRightClick(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ if (!aWorld.isRemote) {
+ int data = DetravMetaGeneratedTool01.INSTANCE.getToolGTDetravData(aStack).intValue();
+ if (aPlayer.isSneaking()) {
+ data++;
+ if (data > 3) data = 0;
+ switch (data) {
+ case 0:
+ aPlayer.addChatMessage(
+ new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.0")));
+ break;
+ case 1:
+ aPlayer.addChatMessage(
+ new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.1")));
+ break;
+ case 2:
+ aPlayer.addChatMessage(
+ new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.2")));
+ break;
+ case 3:
+ aPlayer.addChatMessage(
+ new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.3")));
+ break;
+ default:
+ aPlayer.addChatMessage(
+ new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.error")));
+ break;
+ }
+ DetravMetaGeneratedTool01.INSTANCE.setToolGTDetravData(aStack, (long) data);
+ return super.onItemRightClick(aItem, aStack, aWorld, aPlayer);
+ }
+
+ final DetravMetaGeneratedTool01 tool = (DetravMetaGeneratedTool01) aItem;
+ final int cX = ((int) aPlayer.posX) >> 4;
+ final int cZ = ((int) aPlayer.posZ) >> 4;
+ int size = aItem.getHarvestLevel(aStack, "") + 1;
+ final List<Chunk> chunks = new ArrayList<>();
+ aPlayer.addChatMessage(new ChatComponentText("Scanning..."));
+
+ for (int i = -size; i <= size; i++)
+ for (int j = -size; j <= size; j++) if (i != -size && i != size && j != -size && j != size)
+ chunks.add(aWorld.getChunkFromChunkCoords(cX + i, cZ + j));
+ size = size - 1;
+
+ final ProspectingPacket packet = new ProspectingPacket(
+ cX,
+ cZ,
+ (int) aPlayer.posX,
+ (int) aPlayer.posZ,
+ size,
+ data);
+ final String small_ore_keyword = StatCollector.translateToLocal("detrav.scanner.small_ore.keyword");
+ for (Chunk c : chunks) {
+ for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) {
+ final int ySize = c.getHeightValue(x, z);
+ for (int y = 1; y < ySize; y++) {
+ switch (data) {
+ case 0:
+ case 1:
+ final Block tBlock = c.getBlock(x, y, z);
+ short tMetaID = (short) c.getBlockMetadata(x, y, z);
+ if (tBlock instanceof GT_Block_Ores_Abstract) {
+ TileEntity tTileEntity = c.getTileEntityUnsafe(x, y, z);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)
+ && ((GT_TileEntity_Ores) tTileEntity).mNatural) {
+ tMetaID = (short) ((GT_TileEntity_Ores) tTileEntity).getMetaData();
+ try {
+ String name = GT_LanguageManager.getTranslation(
+ tBlock.getUnlocalizedName() + "." + tMetaID + ".name");
+ if (data != 1 && name.startsWith(small_ore_keyword)) continue;
+ packet.addBlock(c.xPosition * 16 + x, y, c.zPosition * 16 + z, tMetaID);
+ } catch (Exception e) {
+ String name = tBlock.getUnlocalizedName() + ".";
+ if (data != 1 && name.contains(".small.")) continue;
+ packet.addBlock(c.xPosition * 16 + x, y, c.zPosition * 16 + z, tMetaID);
+ }
+ }
+ } else if (DetravScannerMod.isGTppLoaded && GTppHelper.isGTppBlock(tBlock)) {
+ packet.addBlock(
+ c.xPosition * 16 + x,
+ y,
+ c.zPosition * 16 + z,
+ GTppHelper.getGTppMeta(tBlock));
+ } else if (DetravScannerMod.isBartWorksLoaded && BartWorksHelper.isOre(tBlock)) {
+ if (data != 1 && BartWorksHelper.isSmallOre(tBlock)) continue;
+ packet.addBlock(
+ c.xPosition * 16 + x,
+ y,
+ c.zPosition * 16 + z,
+ BartWorksHelper.getMetaFromBlock(c, x, y, z, tBlock));
+ } else if (data == 1) {
+ ItemData tAssotiation = GT_OreDictUnificator
+ .getAssociation(new ItemStack(tBlock, 1, tMetaID));
+ if ((tAssotiation != null) && (tAssotiation.mPrefix.toString().startsWith("ore"))) {
+ packet.addBlock(
+ c.xPosition * 16 + x,
+ y,
+ c.zPosition * 16 + z,
+ (short) tAssotiation.mMaterial.mMaterial.mMetaItemSubID);
+ }
+ }
+ break;
+ case 2:
+ if ((x == 0) || (z == 0)) { // Skip doing the locations with the grid on them.
+ break;
+ }
+ FluidStack fStack = GT_UndergroundOil.undergroundOil(
+ aWorld.getChunkFromBlockCoords(c.xPosition * 16 + x, c.zPosition * 16 + z),
+ -1);
+ if (fStack.amount > 0) {
+ packet.addBlock(
+ c.xPosition * 16 + x,
+ 1,
+ c.zPosition * 16 + z,
+ (short) fStack.getFluidID());
+ packet.addBlock(
+ c.xPosition * 16 + x,
+ 2,
+ c.zPosition * 16 + z,
+ (short) fStack.amount);
+ }
+ break;
+ case 3:
+ float polution = (float) getPolution(
+ aWorld,
+ c.xPosition * 16 + x,
+ c.zPosition * 16 + z);
+ polution /= 2000000;
+ polution *= -0xFF;
+ if (polution > 0xFF) polution = 0xFF;
+ polution = 0xFF - polution;
+ packet.addBlock(c.xPosition * 16 + x, 1, c.zPosition * 16 + z, (short) polution);
+ break;
+ }
+ if (data > 1) break;
+ }
+ }
+ }
+ packet.level = ((DetravMetaGeneratedTool01) aItem).getHarvestLevel(aStack, "");
+ DetravNetwork.INSTANCE.sendToPlayer(packet, (EntityPlayerMP) aPlayer);
+ if (!aPlayer.capabilities.isCreativeMode) tool.doDamage(aStack, this.mCosts * chunks.size());
+
+ if (Loader.isModLoaded("visualprospecting")) {
+ if (data == 0 || data == 1) {
+ VisualProspecting_API.LogicalServer.sendProspectionResultsToClient(
+ (EntityPlayerMP) aPlayer,
+ VisualProspecting_API.LogicalServer.prospectOreVeinsWithinRadius(
+ aWorld.provider.dimensionId,
+ (int) aPlayer.posX,
+ (int) aPlayer.posZ,
+ size * 16),
+ new ArrayList<>());
+ } else if (data == 2) {
+ VisualProspecting_API.LogicalServer.sendProspectionResultsToClient(
+ (EntityPlayerMP) aPlayer,
+ new ArrayList<>(),
+ VisualProspecting_API.LogicalServer.prospectUndergroundFluidsWithingRadius(
+ aWorld,
+ (int) aPlayer.posX,
+ (int) aPlayer.posZ,
+ size * 16));
+ }
+ }
+ }
+ return super.onItemRightClick(aItem, aStack, aWorld, aPlayer);
+ }
+
+ void addChatMassageByValue(EntityPlayer aPlayer, int value, String name) {
+ if (value < 0) {
+ aPlayer.addChatMessage(
+ new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name));
+ } else if (value < 1) {
+ aPlayer.addChatMessage(
+ new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6")));
+ } else aPlayer.addChatMessage(
+ new ChatComponentText(
+ StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name + " " + value));
+ }
+
+ public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX,
+ int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ long data = DetravMetaGeneratedTool01.INSTANCE.getToolGTDetravData(aStack);
+ if (data < 2) {
+ if (aWorld.getBlock(aX, aY, aZ) == Blocks.bedrock) {
+ if (!aWorld.isRemote) {
+ FluidStack fStack = GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1);
+ addChatMassageByValue(aPlayer, fStack.amount, fStack.getLocalizedName());
+ if (!aPlayer.capabilities.isCreativeMode)
+ ((DetravMetaGeneratedTool01) aItem).doDamage(aStack, this.mCosts);
+ }
+ return true;
+ } else {
+ if (!aWorld.isRemote) {
+ prospectSingleChunk((DetravMetaGeneratedTool01) aItem, aStack, aPlayer, aWorld, aX, aY, aZ);
+ }
+ return true;
+ }
+ }
+ if (data < 3) if (!aWorld.isRemote) {
+ FluidStack fStack = GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1);
+ addChatMassageByValue(aPlayer, fStack.amount, fStack.getLocalizedName());
+ if (!aPlayer.capabilities.isCreativeMode) ((DetravMetaGeneratedTool01) aItem).doDamage(aStack, this.mCosts);
+ return true;
+ }
+ if (!aWorld.isRemote) {
+ int polution = getPolution(aWorld, aX, aZ);
+ addChatMassageByValue(aPlayer, polution, "Pollution");
+ }
+ return true;
+ }
+
+}
diff --git a/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolProspector.java b/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolProspector.java
new file mode 100644
index 0000000000..f6f6350020
--- /dev/null
+++ b/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolProspector.java
@@ -0,0 +1,424 @@
+package com.detrav.items.behaviours;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.SplittableRandom;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.Chunk;
+import net.minecraftforge.fluids.FluidStack;
+
+import com.detrav.DetravScannerMod;
+import com.detrav.items.DetravMetaGeneratedTool01;
+import com.detrav.utils.BartWorksHelper;
+import com.detrav.utils.GTppHelper;
+import com.github.bartimaeusnek.bartworks.system.material.Werkstoff;
+import com.sinthoras.visualprospecting.VisualProspecting_API;
+
+import cpw.mods.fml.common.Loader;
+import cpw.mods.fml.common.registry.LanguageRegistry;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.objects.ItemData;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.common.GT_Pollution;
+import gregtech.common.GT_UndergroundOil;
+import gregtech.common.blocks.GT_Block_Ores_Abstract;
+import gregtech.common.blocks.GT_TileEntity_Ores;
+import gregtech.common.items.behaviors.Behaviour_None;
+
+/**
+ * Created by wital_000 on 19.03.2016.
+ */
+public class BehaviourDetravToolProspector extends Behaviour_None {
+
+ static final int[] DISTANCEINTS = new int[] { 0, 4, 25, 64 };
+ int distTextIndex;
+
+ HashMap<String, Integer> ores;
+ int badluck;
+
+ protected final int mCosts;
+
+ static final String CHAT_MSG_SEPARATOR = "--------------------";
+
+ public BehaviourDetravToolProspector(int aCosts) {
+ mCosts = aCosts;
+ }
+
+ public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX,
+ int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+
+ SplittableRandom aRandom = new SplittableRandom();
+ int chance = ((1 + aStack.getItemDamage()) * 8) > 100 ? 100 : (1 + aStack.getItemDamage()) * 8;
+
+ if (aWorld.isRemote) return false;
+
+ if (aWorld.getBlock(aX, aY, aZ) == Blocks.bedrock) {
+ if (!aWorld.isRemote && aRandom.nextInt(100) < chance) {
+ FluidStack fStack = GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1);
+ addChatMassageByValue(aPlayer, fStack.amount / 2, "a Fluid");// fStack.getLocalizedName());
+ /*
+ * boolean fluid = GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1)!=null
+ * &&GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1).getFluid()!=null; if
+ * (fluid) aPlayer.addChatMessage(new
+ * ChatComponentText(EnumChatFormatting.GREEN+"You found some liquid.")); else
+ * aPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+"You found no liquid."));
+ */
+ if (!aPlayer.capabilities.isCreativeMode)
+ ((DetravMetaGeneratedTool01) aItem).doDamage(aStack, this.mCosts);
+
+ if (Loader.isModLoaded("visualprospecting")) {
+ VisualProspecting_API.LogicalServer.sendProspectionResultsToClient(
+ (EntityPlayerMP) aPlayer,
+ new ArrayList<>(),
+ VisualProspecting_API.LogicalServer.prospectUndergroundFluidsWithingRadius(
+ aWorld,
+ (int) aPlayer.posX,
+ (int) aPlayer.posZ,
+ 0));
+ }
+ }
+ return true;
+ }
+ if (aWorld.getBlock(aX, aY, aZ).getMaterial() == Material.rock
+ || aWorld.getBlock(aX, aY, aZ).getMaterial() == Material.ground
+ || aWorld.getBlock(aX, aY, aZ) == GregTech_API.sBlockOres1) {
+ if (!aWorld.isRemote) {
+ prospectChunks((DetravMetaGeneratedTool01) aItem, aStack, aPlayer, aWorld, aX, aY, aZ, aRandom, chance);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ protected void prospectChunks(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX,
+ int aY, int aZ, SplittableRandom aRandom, int chance) {
+ int bX = aX;
+ int bZ = aZ;
+
+ badluck = 0;
+ ores = new HashMap<>();
+
+ int range = ((DetravMetaGeneratedTool01) aItem).getHarvestLevel(aStack, "") / 2 + (aStack.getItemDamage() / 4);
+ if ((range % 2) == 0) {
+ range += 1; // kinda not needed here, divide takes it out, but we put it back in with the range+1 in the
+ // loop
+ }
+ range = range / 2; // Convert range from diameter to radius
+
+ aPlayer.addChatMessage(
+ new ChatComponentText(
+ EnumChatFormatting.GOLD
+ + GT_LanguageManager.sEnglishFile
+ .get("LanguageFile", "gt.scanner.prospecting", "Prospecting at ").getString()
+ + EnumChatFormatting.BLUE
+ + "("
+ + bX
+ + ", "
+ + bZ
+ + ")"));
+ for (int x = -(range); x < (range + 1); ++x) {
+ aX = bX + (x * 16);
+ for (int z = -(range); z < (range + 1); ++z) {
+
+ aZ = bZ + (z * 16);
+ int dist = x * x + z * z;
+
+ for (distTextIndex = 0; distTextIndex < DISTANCEINTS.length; distTextIndex++) {
+ if (dist <= DISTANCEINTS[distTextIndex]) {
+ break;
+ }
+ }
+ if (DetravScannerMod.DEBUG_ENABLED) aPlayer.addChatMessage(
+ new ChatComponentText(
+ EnumChatFormatting.YELLOW + "Chunk at "
+ + aX
+ + "|"
+ + aZ
+ + " to "
+ + (aX + 16)
+ + "|"
+ + (aZ + 16)
+ + StatCollector
+ .translateToLocal("detrav.scanner.distance.texts." + distTextIndex)));
+ processOreProspecting(
+ (DetravMetaGeneratedTool01) aItem,
+ aStack,
+ aPlayer,
+ aWorld.getChunkFromBlockCoords(aX, aZ),
+ aWorld.getTileEntity(aX, aY, aZ),
+ GT_OreDictUnificator.getAssociation(
+ new ItemStack(aWorld.getBlock(aX, aY, aZ), 1, aWorld.getBlockMetadata(aX, aY, aZ))),
+ aRandom,
+ chance);
+ }
+ }
+
+ // List to hold unsorted scanner messages
+ List<ChatComponentText> oreMessages = new ArrayList<ChatComponentText>();
+
+ for (String key : ores.keySet()) {
+ int value = ores.get(key);
+ appendChatMessageByValue(oreMessages, aPlayer, value, key);
+ }
+
+ // Define sort order by distance
+ List<String> sortOrder = Arrays.asList(
+ StatCollector.translateToLocal("detrav.scanner.distance.texts.4"),
+ StatCollector.translateToLocal("detrav.scanner.distance.texts.3"),
+ StatCollector.translateToLocal("detrav.scanner.distance.texts.2"),
+ StatCollector.translateToLocal("detrav.scanner.distance.texts.1"),
+ StatCollector.translateToLocal("detrav.scanner.distance.texts.0"));
+
+ List<ChatComponentText> oreMessagesSorted = new ArrayList<ChatComponentText>();
+ oreMessagesSorted.add(new ChatComponentText(CHAT_MSG_SEPARATOR));
+
+ // Sort ore messages by distance, separated by -----
+ for (String oreFrequency : sortOrder) {
+ for (ChatComponentText msg : oreMessages) {
+ if (msg.getChatComponentText_TextValue().contains(oreFrequency)) {
+ oreMessagesSorted.add(msg);
+ }
+ }
+
+ // Only append ----- separator if text has been added
+ if (!oreMessagesSorted.get(oreMessagesSorted.size() - 1).getChatComponentText_TextValue()
+ .contains(CHAT_MSG_SEPARATOR)) {
+ oreMessagesSorted.add(new ChatComponentText(CHAT_MSG_SEPARATOR));
+ }
+ }
+
+ if (badluck == 0) {
+ oreMessages.add(
+ new ChatComponentText(
+ EnumChatFormatting.WHITE + StatCollector.translateToLocal("detrav.scanner.success")));
+ } else {
+ oreMessages.add(
+ new ChatComponentText(
+ EnumChatFormatting.WHITE + StatCollector.translateToLocal("detrav.scanner.fail")
+ .replace("%badluck", Integer.toString(badluck))));
+ }
+
+ // Print the sorted messages
+ for (ChatComponentText msg : oreMessagesSorted) {
+ aPlayer.addChatMessage(msg);
+ }
+
+ if (Loader.isModLoaded("visualprospecting")) {
+ VisualProspecting_API.LogicalServer.sendProspectionResultsToClient(
+ (EntityPlayerMP) aPlayer,
+ VisualProspecting_API.LogicalServer.prospectOreVeinsWithinRadius(
+ aWorld.provider.dimensionId,
+ (int) aPlayer.posX,
+ (int) aPlayer.posZ,
+ range * 16),
+ new ArrayList<>());
+ }
+ }
+
+ // Used by Electric scanner when scanning the chunk whacked by the scanner. 100% chance find rate
+ protected void prospectSingleChunk(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld,
+ int aX, int aY, int aZ) {
+ ores = new HashMap<>();
+ aPlayer.addChatMessage(
+ new ChatComponentText(
+ EnumChatFormatting.GOLD + StatCollector.translateToLocal(
+ "detrav.scanner.prospecting") + EnumChatFormatting.BLUE + "(" + aX + ", " + aZ + ")"));
+ processOreProspecting(
+ (DetravMetaGeneratedTool01) aItem,
+ aStack,
+ aPlayer,
+ aWorld.getChunkFromBlockCoords(aX, aZ),
+ aWorld.getTileEntity(aX, aY, aZ),
+ GT_OreDictUnificator.getAssociation(
+ new ItemStack(aWorld.getBlock(aX, aY, aZ), 1, aWorld.getBlockMetadata(aX, aY, aZ))),
+ new SplittableRandom(),
+ 1000);
+
+ for (String key : ores.keySet()) {
+ int value = ores.get(key);
+ addChatMassageByValue(aPlayer, value, key);
+ }
+
+ if (Loader.isModLoaded("visualprospecting")) {
+ VisualProspecting_API.LogicalServer.sendProspectionResultsToClient(
+ (EntityPlayerMP) aPlayer,
+ VisualProspecting_API.LogicalServer.prospectOreVeinsWithinRadius(
+ aWorld.provider.dimensionId,
+ (int) aPlayer.posX,
+ (int) aPlayer.posZ,
+ 0),
+ new ArrayList<>());
+ }
+ }
+
+ protected void processOreProspecting(DetravMetaGeneratedTool01 aItem, ItemStack aStack, EntityPlayer aPlayer,
+ Chunk aChunk, TileEntity aTileEntity, ItemData tAssotiation, SplittableRandom aRandom, int chance)// TileEntity
+ // aTileEntity)
+ {
+ if (aTileEntity != null) {
+ if (aTileEntity instanceof GT_TileEntity_Ores) {
+ GT_TileEntity_Ores gt_entity = (GT_TileEntity_Ores) aTileEntity;
+ short meta = gt_entity.getMetaData();
+ String format = LanguageRegistry.instance().getStringLocalization("gt.blockores." + meta + ".name");
+ String name = Materials.getLocalizedNameForItem(format, meta % 1000);
+ addOreToHashMap(name, aPlayer);
+ if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts);
+ return;
+ }
+ } else if (tAssotiation != null) {
+ try {
+ String name = tAssotiation.toString();
+ addChatMassageByValue(aPlayer, -1, name);
+ if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts);
+ return;
+ } catch (Exception e) {
+ addChatMassageByValue(aPlayer, -1, "ERROR, lol ^_^");
+ }
+ } else if (aRandom.nextInt(100) < chance) {
+ final int data = DetravMetaGeneratedTool01.INSTANCE.getToolGTDetravData(aStack).intValue();
+ final String small_ore_keyword = StatCollector.translateToLocal("detrav.scanner.small_ore.keyword");
+ for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) {
+ int ySize = aChunk.getHeightValue(x, z);
+ for (int y = 1; y < ySize; y++) {
+
+ Block tBlock = aChunk.getBlock(x, y, z);
+ short tMetaID = (short) aChunk.getBlockMetadata(x, y, z);
+ if (tBlock instanceof GT_Block_Ores_Abstract) {
+ TileEntity tTileEntity = aChunk.getTileEntityUnsafe(x, y, z);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)
+ && ((GT_TileEntity_Ores) tTileEntity).mNatural) {
+ tMetaID = (short) ((GT_TileEntity_Ores) tTileEntity).getMetaData();
+ try {
+ String format = LanguageRegistry.instance()
+ .getStringLocalization(tBlock.getUnlocalizedName() + "." + tMetaID + ".name");
+ String name = Materials.getLocalizedNameForItem(format, tMetaID % 1000);
+ if (data != 1 && name.startsWith(small_ore_keyword)) continue;
+ addOreToHashMap(name, aPlayer);
+ } catch (Exception e) {
+ String name = tBlock.getUnlocalizedName() + ".";
+ if (data != 1 && name.contains(".small.")) continue;
+ addOreToHashMap(name, aPlayer);
+ }
+ }
+ } else if (DetravScannerMod.isGTppLoaded && GTppHelper.isGTppBlock(tBlock)) {
+ String name = GTppHelper.getGTppVeinName(tBlock);
+ if (!name.isEmpty()) addOreToHashMap(name, aPlayer);
+ } else if (DetravScannerMod.isBartWorksLoaded && BartWorksHelper.isOre(tBlock)) {
+ if (data != 1 && BartWorksHelper.isSmallOre(tBlock)) continue;
+ final Werkstoff werkstoff = Werkstoff.werkstoffHashMap.getOrDefault(
+ (short) ((BartWorksHelper.getMetaFromBlock(aChunk, x, y, z, tBlock)) * -1),
+ null);
+ String type = BartWorksHelper.isSmallOre(tBlock) ? "oreSmall" : "ore";
+ String translated = GT_LanguageManager.getTranslation("bw.blocktype." + type);
+ addOreToHashMap(translated.replace("%material", werkstoff.getLocalizedName()), aPlayer);
+ } else if (data == 1) {
+ tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID));
+ if ((tAssotiation != null) && (tAssotiation.mPrefix.toString().startsWith("ore"))) {
+ try {
+ try {
+ tMetaID = (short) tAssotiation.mMaterial.mMaterial.mMetaItemSubID;
+ String format = LanguageRegistry.instance()
+ .getStringLocalization("gt.blockores." + tMetaID + ".name");
+ String name = Materials.getLocalizedNameForItem(format, tMetaID % 1000);
+ addOreToHashMap(name, aPlayer);
+ } catch (Exception e1) {
+ String name = tAssotiation.toString();
+ addOreToHashMap(name, aPlayer);
+ }
+ } catch (Exception ignored) {}
+ }
+ }
+
+ }
+ }
+
+ if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts);
+
+ return;
+ } else {
+ if (DetravScannerMod.DEBUG_ENABLED)
+ aPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + " Failed on this chunk"));
+ badluck++;
+ if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts / 4);
+ }
+ // addChatMassageByValue(aPlayer,0,null);
+ }
+
+ void addOreToHashMap(String orename, EntityPlayer aPlayer) {
+ String oreDistance = orename + StatCollector.translateToLocal("detrav.scanner.distance.texts." + distTextIndex); // orename
+ // +
+ // the
+ // textual
+ // distance
+ // of
+ // the
+ // ore
+ if (!ores.containsKey(oreDistance)) {
+ if (DetravScannerMod.DEBUG_ENABLED) aPlayer.addChatMessage(
+ new ChatComponentText(EnumChatFormatting.GREEN + " Adding to oremap " + oreDistance));
+ ores.put(oreDistance, 1);
+ } else {
+ int val = ores.get(oreDistance);
+ ores.put(oreDistance, val + 1);
+ }
+ }
+
+ void addChatMassageByValue(EntityPlayer aPlayer, int value, String name) {
+ if (value < 0) {
+ aPlayer.addChatMessage(
+ new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name));
+ } else if (value < 1) {
+ aPlayer.addChatMessage(
+ new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.0")));
+ } else if (value < 10) aPlayer.addChatMessage(
+ new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.1")));
+ else if (value < 30) aPlayer.addChatMessage(
+ new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.2")));
+ else if (value < 60) aPlayer.addChatMessage(
+ new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.3")));
+ else if (value < 100) aPlayer.addChatMessage(
+ new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.4")));
+ else aPlayer.addChatMessage(
+ new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.5")));
+ }
+
+ // Same as addChatMassageByValue but appends to a list of chat messages and spelled correctly
+ void appendChatMessageByValue(List<ChatComponentText> chatMessageList, EntityPlayer aPlayer, int value,
+ String name) {
+ if (value < 0) {
+ chatMessageList
+ .add(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name));
+ } else if (value < 1) {
+ chatMessageList.add(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.0")));
+ } else if (value < 10) chatMessageList
+ .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.1")));
+ else if (value < 30) chatMessageList
+ .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.2")));
+ else if (value < 60) chatMessageList
+ .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.3")));
+ else if (value < 100) chatMessageList
+ .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.4")));
+ else chatMessageList
+ .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.5")));
+ }
+
+ public static int getPolution(World aWorld, int aX, int aZ) {
+ return GT_Pollution.getPollution(aWorld.getChunkFromBlockCoords(aX, aZ));
+ }
+}
diff --git a/src/main/java/com/detrav/items/processing/ProcessingDetravToolProspector.java b/src/main/java/com/detrav/items/processing/ProcessingDetravToolProspector.java
new file mode 100644
index 0000000000..cc4bc7c081
--- /dev/null
+++ b/src/main/java/com/detrav/items/processing/ProcessingDetravToolProspector.java
@@ -0,0 +1,113 @@
+package com.detrav.items.processing;
+
+import static com.detrav.DetravScannerMod.DEBUG_ENABLED;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.oredict.OreDictionary;
+
+import com.detrav.items.DetravMetaGeneratedTool01;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+
+/**
+ * Created by wital_000 on 18.03.2016.
+ */
+public class ProcessingDetravToolProspector implements gregtech.api.interfaces.IOreRecipeRegistrator {
+
+ public ProcessingDetravToolProspector() {
+ OrePrefixes.toolHeadPickaxe.add(this);
+ }
+
+ public void registerOre(OrePrefixes aPrefix, Materials material, String aOreDictName, String aModName,
+ ItemStack aStack) {
+ if (!aPrefix.doGenerateItem(material)) return;
+ if (DEBUG_ENABLED) return;
+ try {
+ // ULV disabled
+ // GT_ModHandler.addCraftingRecipe(DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(0, 1, aMaterial,
+ // Materials.Lead, null), GT_ModHandler.RecipeBits.DISMANTLEABLE |
+ // GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new
+ // Object[]{"SHE","CPC","PXP",'E',OreDictionary.getOres("cellSulfuricAcid").get(0),'S',OreDictionary.getOres("cellHydroxide").get(0),'H',OrePrefixes.toolHeadDrill.get(aMaterial),'P',OrePrefixes.plate.get(aMaterial),'C',OrePrefixes.circuit.get(Materials.Primitive),'X',gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList.Sensor_ULV});
+ GT_ModHandler.addCraftingRecipe(
+ DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(2, 1, material, Materials.Steel, null),
+ GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+ | GT_ModHandler.RecipeBits.BUFFERED,
+ new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellSulfuricAcid").get(0), 'S',
+ OreDictionary.getOres("cellHydroxide").get(0), 'H', OrePrefixes.toolHeadDrill.get(material),
+ 'P', OrePrefixes.plate.get(material), 'C', OrePrefixes.circuit.get(Materials.Basic), 'X',
+ ItemList.Sensor_LV });
+ GT_ModHandler.addCraftingRecipe(
+ DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(4, 1, material, Materials.Steel, null),
+ GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+ | GT_ModHandler.RecipeBits.BUFFERED,
+ new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellSulfuricAcid").get(0), 'S',
+ OreDictionary.getOres("cellHydroxide").get(0), 'H', OrePrefixes.toolHeadDrill.get(material),
+ 'P', OrePrefixes.plate.get(material), 'C', OrePrefixes.circuit.get(Materials.Good), 'X',
+ ItemList.Sensor_MV });
+
+ GT_ModHandler.addCraftingRecipe(
+ DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(6, 1, material, Materials.Steel, null),
+ GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+ | GT_ModHandler.RecipeBits.BUFFERED,
+ new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellNitricAcid").get(0), 'S',
+ OreDictionary.getOres("cellSodiumPersulfate").get(0), 'H',
+ OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C',
+ OrePrefixes.circuit.get(Materials.Advanced), 'X', ItemList.Sensor_HV });
+ GT_ModHandler.addCraftingRecipe(
+ DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(8, 1, material, Materials.Steel, null),
+ GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+ | GT_ModHandler.RecipeBits.BUFFERED,
+ new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellNitricAcid").get(0), 'S',
+ OreDictionary.getOres("cellSodiumPersulfate").get(0), 'H',
+ OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C',
+ OrePrefixes.circuit.get(Materials.Data), 'X', ItemList.Sensor_EV });
+ GT_ModHandler.addCraftingRecipe(
+ DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(10, 1, material, Materials.Steel, null),
+ GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+ | GT_ModHandler.RecipeBits.BUFFERED,
+ new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellNitricAcid").get(0), 'S',
+ OreDictionary.getOres("cellSodiumPersulfate").get(0), 'H',
+ OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C',
+ OrePrefixes.circuit.get(Materials.Elite), 'X', ItemList.Sensor_IV });
+
+ GT_ModHandler.addCraftingRecipe(
+ DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(12, 1, material, Materials.Steel, null),
+ GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+ | GT_ModHandler.RecipeBits.BUFFERED,
+ new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid").get(0), 'S',
+ OreDictionary.getOres("cellLithiumPeroxide").get(0), 'H',
+ OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C',
+ OrePrefixes.circuit.get(Materials.Master), 'X', ItemList.Sensor_LuV });
+ GT_ModHandler.addCraftingRecipe(
+ DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(14, 1, material, Materials.Steel, null),
+ GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+ | GT_ModHandler.RecipeBits.BUFFERED,
+ new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid").get(0), 'S',
+ OreDictionary.getOres("cellLithiumPeroxide").get(0), 'H',
+ OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C',
+ OrePrefixes.circuit.get(Materials.Ultimate), 'X', ItemList.Sensor_ZPM });
+ GT_ModHandler.addCraftingRecipe(
+ DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(16, 1, material, Materials.Steel, null),
+ GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+ | GT_ModHandler.RecipeBits.BUFFERED,
+ new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid").get(0), 'S',
+ OreDictionary.getOres("cellLithiumPeroxide").get(0), 'H',
+ OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C',
+ OrePrefixes.circuit.get(Materials.SuperconductorUHV), 'X', ItemList.Sensor_UV });
+
+ GT_ModHandler.addCraftingRecipe(
+ DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(18, 1, material, Materials.Steel, null),
+ GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+ | GT_ModHandler.RecipeBits.BUFFERED,
+ new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid").get(0), 'S',
+ OreDictionary.getOres("cellHydrogenPeroxide").get(0), 'H',
+ OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C',
+ OrePrefixes.circuit.get(Materials.Infinite), 'X', ItemList.Sensor_UHV });
+
+ } catch (Exception ignored) {}
+
+ }
+}
diff --git a/src/main/java/com/detrav/items/tools/DetravProspector.java b/src/main/java/com/detrav/items/tools/DetravProspector.java
new file mode 100644
index 0000000000..e6328844c8
--- /dev/null
+++ b/src/main/java/com/detrav/items/tools/DetravProspector.java
@@ -0,0 +1,35 @@
+package com.detrav.items.tools;
+
+import net.minecraft.item.ItemStack;
+
+import com.detrav.enums.Textures01;
+import com.detrav.items.behaviours.BehaviourDetravToolProspector;
+
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+public class DetravProspector extends DetravToolElectricProspectorBase {
+
+ private final int tier;
+
+ public DetravProspector(int tier) {
+ this.tier = tier;
+ }
+
+ public int getBaseQuality() {
+ return tier;
+ }
+
+ public float getMaxDurabilityMultiplier() {
+ double x = tier + 1;
+ return (float) (((float) 0.005D + Math.tanh(Math.pow(x, (x / 8D)) / 25D) * (x / 6D)) * 1.25);
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) {
+ return Textures01.mTextures[0];
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {
+ aItem.addItemBehavior(aID, new BehaviourDetravToolProspector(15));
+ }
+}
diff --git a/src/main/java/com/detrav/items/tools/DetravToolElectricProspector.java b/src/main/java/com/detrav/items/tools/DetravToolElectricProspector.java
new file mode 100644
index 0000000000..21eb432148
--- /dev/null
+++ b/src/main/java/com/detrav/items/tools/DetravToolElectricProspector.java
@@ -0,0 +1,34 @@
+package com.detrav.items.tools;
+
+import net.minecraft.item.ItemStack;
+
+import com.detrav.enums.Textures01;
+
+import gregtech.api.interfaces.IIconContainer;
+
+/**
+ * Created by wital_000 on 19.03.2016.
+ */
+public class DetravToolElectricProspector extends DetravToolElectricProspectorBase {
+
+ private final int tier;
+
+ public DetravToolElectricProspector(int tier) {
+ this.tier = tier;
+ }
+
+ public int getBaseQuality() {
+ return tier - 6;
+ }
+
+ public float getMaxDurabilityMultiplier() {
+ if (tier - 6 == 0) return (float) Math.pow(((float) ((tier - 6F) * 2F)), 0.0D);
+ else return (float) ((tier - 6F) * 2F);
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) {
+
+ if (tier <= 9 && tier >= 6) return Textures01.mTextures[tier - 5];
+ else return Textures01.mTextures[1];
+ }
+}
diff --git a/src/main/java/com/detrav/items/tools/DetravToolElectricProspectorBase.java b/src/main/java/com/detrav/items/tools/DetravToolElectricProspectorBase.java
new file mode 100644
index 0000000000..36a2f22790
--- /dev/null
+++ b/src/main/java/com/detrav/items/tools/DetravToolElectricProspectorBase.java
@@ -0,0 +1,201 @@
+package com.detrav.items.tools;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.world.World;
+import net.minecraftforge.event.world.BlockEvent;
+
+import com.detrav.enums.Textures01;
+import com.detrav.items.behaviours.BehaviourDetravToolElectricProspector;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.damagesources.GT_DamageSources;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.IToolStats;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+/**
+ * Created by wital_000 on 19.03.2016. modified by bartimaeusnek on 05.06.2018
+ */
+public class DetravToolElectricProspectorBase implements IToolStats {
+
+ public int getToolDamagePerBlockBreak() {
+ return 100;
+ }
+
+ public int getToolDamagePerDropConversion() {
+ return 100;
+ }
+
+ public int getToolDamagePerContainerCraft() {
+ return 100;
+ }
+
+ public int getToolDamagePerEntityAttack() {
+ return 2000;
+ }
+
+ public int getBaseQuality() {
+ return 0;
+ }
+
+ public float getBaseDamage() {
+ return 1.0F;
+ }
+
+ @Override
+ public int getHurtResistanceTime(int i, Entity entity) {
+ return i;
+ }
+
+ public float getSpeedMultiplier() {
+ return 1.0F;
+ }
+
+ public float getMaxDurabilityMultiplier() {
+ return 1.0F;
+ }
+
+ @Override
+ public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity) {
+ return GT_DamageSources.getCombatDamage(
+ (aPlayer instanceof EntityPlayer) ? "player" : "mob",
+ aPlayer,
+ (aEntity instanceof EntityLivingBase) ? getDeathMessage(aPlayer, (EntityLivingBase) aEntity) : null);
+ }
+
+ public String getCraftingSound() {
+ return null;
+ }
+
+ public String getEntityHitSound() {
+ return null;
+ }
+
+ public String getBreakingSound() {
+ return (String) GregTech_API.sSoundList.get(0);
+ }
+
+ @Override
+ public Enchantment[] getEnchantments(ItemStack itemStack) {
+ return new Enchantment[0];
+ }
+
+ @Override
+ public int[] getEnchantmentLevels(ItemStack itemStack) {
+ return new int[0];
+ }
+
+ public String getMiningSound() {
+ return null;
+ }
+
+ public boolean canBlock() {
+ return false;
+ }
+
+ public boolean isCrowbar() {
+ return false;
+ }
+
+ @Override
+ public boolean isGrafter() {
+ return false;
+ }
+
+ @Override
+ public boolean isChainsaw() {
+ return false;
+ }
+
+ @Override
+ public boolean isWrench() {
+ return false;
+ }
+
+ @Override
+ public boolean isWeapon() {
+ return false;
+ }
+
+ @Override
+ public boolean isRangedWeapon() {
+ return false;
+ }
+
+ @Override
+ public boolean isMiningTool() {
+ return false;
+ }
+
+ public boolean isMinableBlock(Block aBlock, byte aMetaData) {
+
+ return false;
+ }
+
+ @Override
+ public int convertBlockDrops(List<ItemStack> list, ItemStack itemStack, EntityPlayer entityPlayer, Block block,
+ int i, int i1, int i2, byte b, int i3, boolean b1, BlockEvent.HarvestDropsEvent harvestDropsEvent) {
+ return 0;
+ }
+
+ public ItemStack getBrokenItem(ItemStack aStack) {
+ return null;
+ }
+
+ @Override
+ public float getNormalDamageAgainstEntity(float v, Entity entity, ItemStack itemStack, EntityPlayer entityPlayer) {
+ return v;
+ }
+
+ @Override
+ public float getMagicDamageAgainstEntity(float v, Entity entity, ItemStack itemStack, EntityPlayer entityPlayer) {
+ return v;
+ }
+
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) {
+ return Textures01.mTextures[0];
+ }
+
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa
+ : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {
+ aItem.addItemBehavior(aID, new BehaviourDetravToolElectricProspector(getToolDamagePerBlockBreak()));
+ }
+
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) {
+
+ aPlayer.triggerAchievement(AchievementList.openInventory);
+ aPlayer.triggerAchievement(AchievementList.mineWood);
+ aPlayer.triggerAchievement(AchievementList.buildWorkBench);
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) {
+ return new ChatComponentText(
+ EnumChatFormatting.RED + aEntity.getCommandSenderName()
+ + EnumChatFormatting.WHITE
+ + " got Pick Up'ed by "
+ + EnumChatFormatting.GREEN
+ + aPlayer.getCommandSenderName()
+ + EnumChatFormatting.WHITE);
+ }
+
+ public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World aWorld,
+ int aX, int aY, int aZ) {
+ return aDefault;
+ }
+}