diff options
author | BlueWeabo <ilia.iliev@tuta.com> | 2024-08-30 18:16:57 +0300 |
---|---|---|
committer | BlueWeabo <ilia.iliev@tuta.com> | 2024-08-30 18:16:57 +0300 |
commit | 3ed88dde64660e29c3f318d2c61b76082cc52ed9 (patch) | |
tree | dc56fdfef9a0dd30005bf926e0b46c23900d264d /src/main/java/com/detrav/items | |
parent | 557fb75ff46f2ad422e64b45887a33a42fe6cafb (diff) | |
download | GT5-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')
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 + * &>_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; + } +} |