diff --git a/README.md b/README.md index b31f6cc..1ba81c4 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Submit any bug reports / suggestions via [issue tracker](https://github.com/Jack ## Contact Me - Twitter - [@JackyyTV](https://twitter.com/JackyyTV) -- Discord - Jacky#3044 +- Discord - Jacky#1234 - Twitch - [Jackyy](https://www.twitch.tv/jackyy) - Reddit - [Jacky1356400](https://www.reddit.com/message/compose/?to=Jacky1356400) diff --git a/gradle.properties b/gradle.properties index fd8de9a..63960d5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,5 +3,5 @@ org.gradle.jvmargs=-Xmx4G mc_version=1.10.2 forge_version=1.10.2-12.18.3.2511 -mod_version=1.8.2 +mod_version=1.8.3 mappings_version=snapshot_20161111 diff --git a/src/main/java/jackyy/exchangers/Exchangers.java b/src/main/java/jackyy/exchangers/Exchangers.java index 3069ac2..75abd5e 100644 --- a/src/main/java/jackyy/exchangers/Exchangers.java +++ b/src/main/java/jackyy/exchangers/Exchangers.java @@ -19,7 +19,7 @@ @Mod(modid = Exchangers.MODID, version = Exchangers.VERSION, name = Exchangers.MODNAME, dependencies = Exchangers.DEPENDS, guiFactory = Exchangers.GUIFACTORY, certificateFingerprint = "@FINGERPRINT@", acceptedMinecraftVersions = Exchangers.MCVERSION, useMetadata = true) public class Exchangers { - public static final String VERSION = "1.10.2-1.8.2"; + public static final String VERSION = "1.10.2-1.8.3"; public static final String MCVERSION = "[1.10,1.11)"; public static final String MODID = "exchangers"; public static final String MODNAME = "Exchangers"; diff --git a/src/main/java/jackyy/exchangers/handler/ClientEventsHandler.java b/src/main/java/jackyy/exchangers/handler/ClientEventsHandler.java index e47622e..a9ab2db 100644 --- a/src/main/java/jackyy/exchangers/handler/ClientEventsHandler.java +++ b/src/main/java/jackyy/exchangers/handler/ClientEventsHandler.java @@ -22,6 +22,7 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTUtil; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -132,11 +133,10 @@ public void renderWorldLastEvent(RenderWorldLastEvent event) { IBlockState state = world.getBlockState(mouseOver.getBlockPos()); Block block = state.getBlock(); if (block.getMaterial(state) != Material.AIR) { - int meta = block.getMetaFromState(state); ItemStack stack = player.getHeldItemMainhand(); float partialTicks = event.getPartialTicks(); if (stack != null && stack.getItem() instanceof ItemExchangerBase && stack.getTagCompound() != null && mouseOver.sideHit != null) { - Set coordinates = ExchangerHandler.findSuitableBlocks(stack, player.getEntityWorld(), mouseOver.sideHit, mouseOver.getBlockPos(), block, meta); + Set coordinates = ExchangerHandler.findSuitableBlocks(stack, player.getEntityWorld(), mouseOver.sideHit, mouseOver.getBlockPos(), block, block.getMetaFromState(state)); double offsetX = player.prevPosX + (player.posX - player.prevPosX) * (double) partialTicks; double offsetY = player.prevPosY + (player.posY - player.prevPosY) * (double) partialTicks; double offsetZ = player.prevPosZ + (player.posZ - player.prevPosZ) * (double) partialTicks; @@ -153,10 +153,10 @@ public void renderWorldLastEvent(RenderWorldLastEvent event) { for (BlockPos coordinate : coordinates) { String exId = ExchangerHandler.getTagCompound(stack).getString("block"); + IBlockState exState = NBTUtil.readBlockState(ExchangerHandler.getTagCompound(stack).getCompoundTag("blockstate")); Block exBlock = Block.getBlockFromName(exId); - int exMeta = ExchangerHandler.getTagCompound(stack).getInteger("meta"); float blockHardness = block.getBlockHardness(state, world, coordinate); - if (world.isAirBlock(coordinate) || (exBlock == block && exMeta == meta)) { + if (world.isAirBlock(coordinate) || (exBlock == block && exState == state)) { continue; } double renderX = coordinate.getX() - offsetX; diff --git a/src/main/java/jackyy/exchangers/handler/ExchangerHandler.java b/src/main/java/jackyy/exchangers/handler/ExchangerHandler.java index c1c4d3c..7e088d5 100644 --- a/src/main/java/jackyy/exchangers/handler/ExchangerHandler.java +++ b/src/main/java/jackyy/exchangers/handler/ExchangerHandler.java @@ -5,7 +5,7 @@ import jackyy.exchangers.helper.StringHelper; import jackyy.exchangers.registry.ModConfig; import jackyy.exchangers.util.IExchanger; -import net.minecraft.block.*; +import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.item.EntityItem; @@ -18,6 +18,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -33,20 +34,6 @@ public class ExchangerHandler extends Item implements IExchanger { - public static final int MODE_1X1 = 0; - public static final int MODE_3X3 = 1; - public static final int MODE_5X5 = 2; - public static final int MODE_7X7 = 3; - public static final int MODE_9X9 = 4; - public static final int MODE_11X11 = 5; - public static final int MODE_13X13 = 6; - public static final int MODE_15X15 = 7; - public static final int MODE_17X17 = 8; - public static final int MODE_19X19 = 9; - public static final int MODE_21X21 = 10; - public static final int MODE_23X23 = 11; - public static final int MODE_25X25 = 12; - public static final String[] modeSwitchList = new String[] { "1x1", "3x3", "5x5", "7x7", "9x9", "11x11", "13x13", "15x15", "17x17", @@ -56,19 +43,21 @@ public static void setDefaultTagCompound(ItemStack stack) { if (stack.getTagCompound() == null) { NBTTagCompound compound = new NBTTagCompound(); compound.setString("block", "minecraft:air"); - compound.setInteger("meta", 0); + compound.setTag("blockstate", new NBTTagCompound()); compound.setInteger("mode", 0); compound.setBoolean("forceDropItems", false); stack.setTagCompound(compound); } else { if (!stack.getTagCompound().hasKey("block")) { stack.getTagCompound().setString("block", "minecraft:air"); - } else if (!stack.getTagCompound().hasKey("meta")) { - stack.getTagCompound().setInteger("meta", 0); + } else if (!stack.getTagCompound().hasKey("blockstate")) { + stack.getTagCompound().setTag("blockstate", new NBTTagCompound()); } else if (!stack.getTagCompound().hasKey("mode")) { stack.getTagCompound().setInteger("mode", 0); } else if (!stack.getTagCompound().hasKey("forceDropItems")) { stack.getTagCompound().setBoolean("forceDropItems", false); + } else if (stack.getTagCompound().hasKey("meta")) { + stack.getTagCompound().removeTag("meta"); } } } @@ -84,14 +73,14 @@ public void addInformation(ItemStack stack, EntityPlayer player, List to NBTTagCompound compound = stack.getTagCompound(); String id = compound.getString("block"); + IBlockState state = NBTUtil.readBlockState(compound.getCompoundTag("blockstate")); if (StringHelper.isShiftKeyDown()) { if (id.equals("minecraft:air")) { tooltip.add(StringHelper.localize("tooltip.no_selected_block")); } else { Block block = Block.getBlockFromName(id); - int meta = compound.getInteger("meta"); - tooltip.add(StringHelper.localize("tooltip.selected_block") + " " + getBlockName(block, meta)); + tooltip.add(StringHelper.localize("tooltip.selected_block") + " " + getBlockName(block, state.getBlock().getMetaFromState(state))); } tooltip.add(StringHelper.localize("tooltip.current_range") + " " + modeSwitchList[compound.getInteger("mode")]); tooltip.add(StringHelper.localize("tooltip.max_range") + " " + modeSwitchList[getMaxRange()]); @@ -134,8 +123,8 @@ public void switchMode(EntityPlayer player, ItemStack stack) { ItemStack heldItem = player.getHeldItemMainhand(); if (heldItem != null) { if (modeSwitch > getMaxRange()) { - modeSwitch = MODE_1X1; - } else if (modeSwitch < MODE_1X1) { + modeSwitch = 0; + } else if (modeSwitch < 0) { modeSwitch = getMaxRange(); } } @@ -171,7 +160,7 @@ public static boolean isWhitelisted(World world, BlockPos pos) { return true; } } - return world.getBlockState(pos).getBlock().getRegistryName().getResourceDomain().equals("tconstruct"); + return world.getBlockState(pos).getBlock().getRegistryName().equals("tconstruct:seared"); } public static boolean isBlacklisted(World world, BlockPos pos) { @@ -183,34 +172,20 @@ public static boolean isBlacklisted(World world, BlockPos pos) { return false; } - private boolean isSpecial(Block block) { - return block instanceof BlockLog - || block instanceof BlockTrapDoor - || block instanceof BlockDoor - || block instanceof BlockFenceGate; - } - - private boolean isMoreSpecial(Block block) { - return block instanceof BlockTorch; - } - @SuppressWarnings("deprecation") private void placeBlock(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side) { NBTTagCompound tagCompound = stack.getTagCompound(); - Block block; - int meta; String id = tagCompound.getString("block"); - block = Block.getBlockFromName(id); - meta = tagCompound.getInteger("meta"); - + Block block = Block.getBlockFromName(id); + IBlockState state = NBTUtil.readBlockState(tagCompound.getCompoundTag("blockstate")); IBlockState oldState = world.getBlockState(pos); Block oldblock = oldState.getBlock(); - int oldmeta = oldblock.getMetaFromState(oldState); float blockHardness = oldblock.getBlockHardness(oldState, world, pos); + if (id.equals("minecraft:air")) { return; - } else if ((block == oldblock) && (meta == oldmeta)) { + } else if ((block == oldblock) && (state == oldState)) { return; } else if (world.getTileEntity(pos) != null && !isWhitelisted(world, pos)) { ChatHelper.msgPlayer(player, "error.invalid_block.te"); @@ -228,14 +203,16 @@ private void placeBlock(ItemStack stack, EntityPlayer player, World world, Block ChatHelper.msgPlayer(player, "error.low_harvest_level"); return; } + Set coordinates = findSuitableBlocks(stack, world, side, pos, oldblock, oldmeta); boolean notEnough = false; world.captureBlockSnapshots = false; + for (BlockPos coordinate : coordinates) { BlockEvent.PlaceEvent event = new BlockEvent.PlaceEvent(BlockSnapshot.getBlockSnapshot(world, coordinate, 3), Blocks.AIR.getDefaultState(), player, player.getActiveHand()); - world.setBlockState(coordinate, block.getStateFromMeta(meta), 3); + world.setBlockState(coordinate, state, 3); if (!MinecraftForge.EVENT_BUS.post(event)) { - if (consumeItemInInventory(Item.getItemFromBlock(block), meta, player.inventory, player)) { + if (consumeItemInInventory(Item.getItemFromBlock(block), state.getBlock().getItem(world, pos, state).getMetadata(), player.inventory, player)) { if (!player.capabilities.isCreativeMode && !isCreative()) { if (ModConfig.misc.doExchangersSilkTouch || EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0) { ItemStack oldblockItem = oldblock.getItem(world, pos, oldState); @@ -280,21 +257,9 @@ private void selectBlock(ItemStack stack, EntityPlayer player, World world, Bloc setDefaultTagCompound(stack); IBlockState state = world.getBlockState(pos); Block block = state.getBlock(); - int meta; - if (isSpecial(block)) { - meta = block.getDefaultState().getBlock().getMetaFromState(block.getDefaultState()); - } else if (isMoreSpecial(block)) { - meta = 0; - } else { - meta = block.getMetaFromState(state); - } NBTTagCompound tagCompound = getTagCompound(stack); - String name = getBlockName(block, meta); float blockHardness = block.getBlockHardness(state, world, pos); - if (name == null) { - ChatHelper.msgPlayer(player, "error.invalid_block.null"); - return; - } else if (world.getTileEntity(pos) != null && !isWhitelisted(world, pos)) { + if (world.getTileEntity(pos) != null && !isWhitelisted(world, pos)) { ChatHelper.msgPlayer(player, "error.invalid_block.te"); return; } else if (isBlacklisted(world, pos)) { @@ -306,7 +271,7 @@ private void selectBlock(ItemStack stack, EntityPlayer player, World world, Bloc } String id = Block.REGISTRY.getNameForObject(block).toString(); tagCompound.setString("block", id); - tagCompound.setInteger("meta", meta); + NBTUtil.writeBlockState(tagCompound.getCompoundTag("blockstate"), state); } protected static Set findSuitableBlocks(ItemStack stack, World world, EnumFacing sideHit, BlockPos pos, Block centerBlock, int centerMeta) { @@ -473,7 +438,14 @@ protected static NBTTagCompound getTagCompound(ItemStack stack) { private static String getBlockName(Block block, int meta) { ItemStack stack = new ItemStack(block, 1, meta); - return stack.getDisplayName(); + String name; + try { + name = stack.getDisplayName(); + return name; + } catch (NullPointerException e) { + e.printStackTrace(); + } + return "Unable to fetch block name."; } } diff --git a/src/main/java/jackyy/exchangers/helper/NBTHelper.java b/src/main/java/jackyy/exchangers/helper/NBTHelper.java index bb37afd..5c13f89 100644 --- a/src/main/java/jackyy/exchangers/helper/NBTHelper.java +++ b/src/main/java/jackyy/exchangers/helper/NBTHelper.java @@ -3,6 +3,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import java.io.*; + public class NBTHelper { public static NBTTagCompound getTag(ItemStack stack) { @@ -47,4 +49,17 @@ public static int getEnergyStored(ItemStack container) { return getInt(container, "Energy"); } + public static byte[] serializeToBytes(Object obj) throws IOException { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + ObjectOutputStream objOutput = new ObjectOutputStream(output); + objOutput.writeObject(obj); + return output.toByteArray(); + } + + public static Object deserializeToObject(byte[] data) throws IOException, ClassNotFoundException { + ByteArrayInputStream input = new ByteArrayInputStream(data); + ObjectInputStream objInput = new ObjectInputStream(input); + return objInput.readObject(); + } + } diff --git a/src/main/java/jackyy/exchangers/item/enderio/ItemConductiveIronExchanger.java b/src/main/java/jackyy/exchangers/item/enderio/ItemConductiveIronExchanger.java index 0b338fb..e124707 100644 --- a/src/main/java/jackyy/exchangers/item/enderio/ItemConductiveIronExchanger.java +++ b/src/main/java/jackyy/exchangers/item/enderio/ItemConductiveIronExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_3X3; + return ModConfig.enderIOTweaks.conductiveMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/enderio/ItemDarkSteelExchanger.java b/src/main/java/jackyy/exchangers/item/enderio/ItemDarkSteelExchanger.java index 0ef316a..29d0b27 100644 --- a/src/main/java/jackyy/exchangers/item/enderio/ItemDarkSteelExchanger.java +++ b/src/main/java/jackyy/exchangers/item/enderio/ItemDarkSteelExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_13X13; + return ModConfig.enderIOTweaks.darkSteelMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/enderio/ItemElectricalSteelExchanger.java b/src/main/java/jackyy/exchangers/item/enderio/ItemElectricalSteelExchanger.java index 1c2ab86..8579fe2 100644 --- a/src/main/java/jackyy/exchangers/item/enderio/ItemElectricalSteelExchanger.java +++ b/src/main/java/jackyy/exchangers/item/enderio/ItemElectricalSteelExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_9X9; + return ModConfig.enderIOTweaks.electricalSteelMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/enderio/ItemEnergeticExchanger.java b/src/main/java/jackyy/exchangers/item/enderio/ItemEnergeticExchanger.java index 914b419..edc8b6e 100644 --- a/src/main/java/jackyy/exchangers/item/enderio/ItemEnergeticExchanger.java +++ b/src/main/java/jackyy/exchangers/item/enderio/ItemEnergeticExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_11X11; + return ModConfig.enderIOTweaks.energeticMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/enderio/ItemPulsatingIronExchanger.java b/src/main/java/jackyy/exchangers/item/enderio/ItemPulsatingIronExchanger.java index 3c2083c..1b783f1 100644 --- a/src/main/java/jackyy/exchangers/item/enderio/ItemPulsatingIronExchanger.java +++ b/src/main/java/jackyy/exchangers/item/enderio/ItemPulsatingIronExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_5X5; + return ModConfig.enderIOTweaks.pulsatingMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/enderio/ItemVibrantExchanger.java b/src/main/java/jackyy/exchangers/item/enderio/ItemVibrantExchanger.java index 8d36c8f..0c1166b 100644 --- a/src/main/java/jackyy/exchangers/item/enderio/ItemVibrantExchanger.java +++ b/src/main/java/jackyy/exchangers/item/enderio/ItemVibrantExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_15X15; + return ModConfig.enderIOTweaks.vibrantMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemHVExchanger.java b/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemHVExchanger.java index c650631..92336c0 100644 --- a/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemHVExchanger.java +++ b/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemHVExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_15X15; + return ModConfig.immersiveEngineeringTweaks.hvMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemLVExchanger.java b/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemLVExchanger.java index cfac041..15bdfab 100644 --- a/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemLVExchanger.java +++ b/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemLVExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_5X5; + return ModConfig.immersiveEngineeringTweaks.lvMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemMVExchanger.java b/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemMVExchanger.java index 0cbcbed..d8eb6ed 100644 --- a/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemMVExchanger.java +++ b/src/main/java/jackyy/exchangers/item/immersiveengineering/ItemMVExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_11X11; + return ModConfig.immersiveEngineeringTweaks.mvMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/mekanism/ItemAdvancedExchanger.java b/src/main/java/jackyy/exchangers/item/mekanism/ItemAdvancedExchanger.java index a4a08b4..a6928b5 100644 --- a/src/main/java/jackyy/exchangers/item/mekanism/ItemAdvancedExchanger.java +++ b/src/main/java/jackyy/exchangers/item/mekanism/ItemAdvancedExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_11X11; + return ModConfig.mekanismTweaks.advancedMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/mekanism/ItemBasicExchanger.java b/src/main/java/jackyy/exchangers/item/mekanism/ItemBasicExchanger.java index 96e8721..1b9273d 100644 --- a/src/main/java/jackyy/exchangers/item/mekanism/ItemBasicExchanger.java +++ b/src/main/java/jackyy/exchangers/item/mekanism/ItemBasicExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_7X7; + return ModConfig.mekanismTweaks.basicMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/mekanism/ItemEliteExchanger.java b/src/main/java/jackyy/exchangers/item/mekanism/ItemEliteExchanger.java index 9e2453d..3005ece 100644 --- a/src/main/java/jackyy/exchangers/item/mekanism/ItemEliteExchanger.java +++ b/src/main/java/jackyy/exchangers/item/mekanism/ItemEliteExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_13X13; + return ModConfig.mekanismTweaks.eliteMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/mekanism/ItemUltimateExchanger.java b/src/main/java/jackyy/exchangers/item/mekanism/ItemUltimateExchanger.java index 1896373..58cdd59 100644 --- a/src/main/java/jackyy/exchangers/item/mekanism/ItemUltimateExchanger.java +++ b/src/main/java/jackyy/exchangers/item/mekanism/ItemUltimateExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_15X15; + return ModConfig.mekanismTweaks.ultimateMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/special/ItemCreativeExchanger.java b/src/main/java/jackyy/exchangers/item/special/ItemCreativeExchanger.java index be26216..2f4bb61 100644 --- a/src/main/java/jackyy/exchangers/item/special/ItemCreativeExchanger.java +++ b/src/main/java/jackyy/exchangers/item/special/ItemCreativeExchanger.java @@ -30,7 +30,7 @@ public int getTier() { @Override public int getHarvestLevel() { - return 9001; + return Integer.MAX_VALUE; } @Override @@ -40,7 +40,7 @@ public boolean isCreative() { @Override public int getMaxRange() { - return MODE_25X25; + return 12; } @Override diff --git a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemHardenedExchanger.java b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemHardenedExchanger.java index ba4d924..007b19a 100644 --- a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemHardenedExchanger.java +++ b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemHardenedExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_7X7; + return ModConfig.thermalExpansionTweaks.hardenedMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemLeadstoneExchanger.java b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemLeadstoneExchanger.java index 66fbce6..97b146f 100644 --- a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemLeadstoneExchanger.java +++ b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemLeadstoneExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_3X3; + return ModConfig.thermalExpansionTweaks.leadstoneMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemReinforcedExchanger.java b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemReinforcedExchanger.java index 20b478e..543cf5b 100644 --- a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemReinforcedExchanger.java +++ b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemReinforcedExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_11X11; + return ModConfig.thermalExpansionTweaks.reinforcedMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemResonantExchanger.java b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemResonantExchanger.java index 2a6cfbe..ba85a38 100644 --- a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemResonantExchanger.java +++ b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemResonantExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_15X15; + return ModConfig.thermalExpansionTweaks.resonantMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemSignalumExchanger.java b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemSignalumExchanger.java index 4c067e6..71daf76 100644 --- a/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemSignalumExchanger.java +++ b/src/main/java/jackyy/exchangers/item/thermalexpansion/ItemSignalumExchanger.java @@ -50,7 +50,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_13X13; + return ModConfig.thermalExpansionTweaks.signalumMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/vanilla/ItemDiamondExchanger.java b/src/main/java/jackyy/exchangers/item/vanilla/ItemDiamondExchanger.java index 96b8a2e..4e263b2 100644 --- a/src/main/java/jackyy/exchangers/item/vanilla/ItemDiamondExchanger.java +++ b/src/main/java/jackyy/exchangers/item/vanilla/ItemDiamondExchanger.java @@ -36,7 +36,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_9X9; + return ModConfig.vanillaTweaks.diamondMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/vanilla/ItemEmeraldExchanger.java b/src/main/java/jackyy/exchangers/item/vanilla/ItemEmeraldExchanger.java index d6fab70..d0fee90 100644 --- a/src/main/java/jackyy/exchangers/item/vanilla/ItemEmeraldExchanger.java +++ b/src/main/java/jackyy/exchangers/item/vanilla/ItemEmeraldExchanger.java @@ -38,7 +38,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_11X11; + return ModConfig.vanillaTweaks.emeraldMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/vanilla/ItemGoldenExchanger.java b/src/main/java/jackyy/exchangers/item/vanilla/ItemGoldenExchanger.java index 54ee597..c62d9b7 100644 --- a/src/main/java/jackyy/exchangers/item/vanilla/ItemGoldenExchanger.java +++ b/src/main/java/jackyy/exchangers/item/vanilla/ItemGoldenExchanger.java @@ -36,7 +36,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_5X5; + return ModConfig.vanillaTweaks.goldenMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/vanilla/ItemIronExchanger.java b/src/main/java/jackyy/exchangers/item/vanilla/ItemIronExchanger.java index 356666b..2c69e6f 100644 --- a/src/main/java/jackyy/exchangers/item/vanilla/ItemIronExchanger.java +++ b/src/main/java/jackyy/exchangers/item/vanilla/ItemIronExchanger.java @@ -36,7 +36,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_7X7; + return ModConfig.vanillaTweaks.ironMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/vanilla/ItemObsidianExchanger.java b/src/main/java/jackyy/exchangers/item/vanilla/ItemObsidianExchanger.java index 8371f1e..829e1eb 100644 --- a/src/main/java/jackyy/exchangers/item/vanilla/ItemObsidianExchanger.java +++ b/src/main/java/jackyy/exchangers/item/vanilla/ItemObsidianExchanger.java @@ -36,7 +36,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_15X15; + return ModConfig.vanillaTweaks.obsidianMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/vanilla/ItemStoneExchanger.java b/src/main/java/jackyy/exchangers/item/vanilla/ItemStoneExchanger.java index 5665eb1..7439a0e 100644 --- a/src/main/java/jackyy/exchangers/item/vanilla/ItemStoneExchanger.java +++ b/src/main/java/jackyy/exchangers/item/vanilla/ItemStoneExchanger.java @@ -36,7 +36,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_3X3; + return ModConfig.vanillaTweaks.stoneMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/item/vanilla/ItemWoodenExchanger.java b/src/main/java/jackyy/exchangers/item/vanilla/ItemWoodenExchanger.java index 17a098a..0f55c2d 100644 --- a/src/main/java/jackyy/exchangers/item/vanilla/ItemWoodenExchanger.java +++ b/src/main/java/jackyy/exchangers/item/vanilla/ItemWoodenExchanger.java @@ -35,7 +35,7 @@ public int getHarvestLevel() { @Override public int getMaxRange() { - return MODE_1X1; + return ModConfig.vanillaTweaks.woodenMaxRange; } @Override diff --git a/src/main/java/jackyy/exchangers/registry/ModConfig.java b/src/main/java/jackyy/exchangers/registry/ModConfig.java index 2f9d5a8..cfec546 100644 --- a/src/main/java/jackyy/exchangers/registry/ModConfig.java +++ b/src/main/java/jackyy/exchangers/registry/ModConfig.java @@ -50,42 +50,63 @@ public static class VanillaTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Wooden Exchanger") public int woodenMaxHarvestLevel = 0; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Wooden Exchanger") + public int woodenMaxRange = 0; @Config.RangeInt(min = 1) @Config.Comment("Set the durability for Stone Exchanger") public int stoneMaxDmg = 384; @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Stone Exchanger") public int stoneMaxHarvestLevel = 1; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Stone Exchanger") + public int stoneMaxRange = 1; @Config.RangeInt(min = 1) @Config.Comment("Set the durability for Golden Exchanger") public int goldenMaxDmg = 512; @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Golden Exchanger") public int goldenMaxHarvestLevel = 1; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Golden Exchanger") + public int goldenMaxRange = 2; @Config.RangeInt(min = 1) @Config.Comment("Set the durability for Iron Exchanger") public int ironMaxDmg = 1024; @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Iron Exchanger") public int ironMaxHarvestLevel = 2; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Iron Exchanger") + public int ironMaxRange = 3; @Config.RangeInt(min = 1) @Config.Comment("Set the durability for Diamond Exchanger") public int diamondMaxDmg = 4096; @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Diamond Exchanger") public int diamondMaxHarvestLevel = 3; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Diamond Exchanger") + public int diamondMaxRange = 4; @Config.RangeInt(min = 1) @Config.Comment("Set the durability for Emerald Exchanger") public int emeraldMaxDmg = 8192; @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Emerald Exchanger") public int emeraldMaxHarvestLevel = 4; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Emerald Exchanger") + public int emeraldMaxRange = 5; @Config.RangeInt(min = 1) @Config.Comment("Set the durability for Obsidian Exchanger") public int obsidianMaxDmg = 16384; @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Obsidian Exchanger") public int obsidianMaxHarvestLevel = 4; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Obsidian Exchanger") + public int obsidianMaxRange = 7; } public static class EnderIOTweaks { @@ -98,6 +119,9 @@ public static class EnderIOTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Conductive Iron Exchanger") public int conductiveMaxHarvestLevel = 1; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Conductive Iron Exchanger") + public int conductiveMaxRange = 1; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Pulsating Iron Exchanger") public int pulsatingMaxEnergy = 400000; @@ -107,6 +131,9 @@ public static class EnderIOTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Pulsating Iron Exchanger") public int pulsatingMaxHarvestLevel = 2; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Pulsating Iron Exchanger") + public int pulsatingMaxRange = 2; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Electrical Steel Exchanger") public int electricalSteelMaxEnergy = 800000; @@ -116,6 +143,9 @@ public static class EnderIOTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Electrical Steel Exchanger") public int electricalSteelMaxHarvestLevel = 3; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Electrical Steel Exchanger") + public int electricalSteelMaxRange = 4; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Energetic Exchanger") public int energeticMaxEnergy = 5000000; @@ -125,6 +155,9 @@ public static class EnderIOTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Energetic Exchanger") public int energeticMaxHarvestLevel = 3; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Energetic Exchanger") + public int energeticMaxRange = 5; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Dark Steel Exchanger") public int darkSteelMaxEnergy = 10000000; @@ -134,6 +167,9 @@ public static class EnderIOTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Dark Steel Exchanger") public int darkSteelMaxHarvestLevel = 4; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Dark Steel Exchanger") + public int darkSteelMaxRange = 6; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Vibrant Exchanger") public int vibrantMaxEnergy = 20000000; @@ -143,6 +179,9 @@ public static class EnderIOTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Vibrant Exchanger") public int vibrantMaxHarvestLevel = 4; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Vibrant Exchanger") + public int vibrantMaxRange = 7; } public static class ThermalExpansionTweaks { @@ -155,6 +194,9 @@ public static class ThermalExpansionTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Leadstone Exchanger") public int leadstoneMaxHarvestLevel = 1; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Leadstone Exchanger") + public int leadstoneMaxRange = 1; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Hardened Exchanger") public int hardenedMaxEnergy = 500000; @@ -164,6 +206,9 @@ public static class ThermalExpansionTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Hardened Exchanger") public int hardenedMaxHarvestLevel = 2; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Hardened Exchanger") + public int hardenedMaxRange = 3; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Reinforced Exchanger") public int reinforcedMaxEnergy = 1000000; @@ -173,6 +218,9 @@ public static class ThermalExpansionTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Reinforced Exchanger") public int reinforcedMaxHarvestLevel = 3; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Reinforced Exchanger") + public int reinforcedMaxRange = 5; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Signalum Exchanger") public int signalumMaxEnergy = 10000000; @@ -182,6 +230,9 @@ public static class ThermalExpansionTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Signalum Exchanger") public int signalumMaxHarvestLevel = 4; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Signalum Exchanger") + public int signalumMaxRange = 6; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Resonant Exchanger") public int resonantMaxEnergy = 20000000; @@ -191,6 +242,9 @@ public static class ThermalExpansionTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Resonant Exchanger") public int resonantMaxHarvestLevel = 4; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Resonant Exchanger") + public int resonantMaxRange = 7; } public static class MekanismTweaks { @@ -203,6 +257,9 @@ public static class MekanismTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Basic Exchanger") public int basicMaxHarvestLevel = 1; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Basic Exchanger") + public int basicMaxRange = 3; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Advanced Exchanger") public int advancedMaxEnergy = 800000; @@ -212,6 +269,9 @@ public static class MekanismTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Advanced Exchanger") public int advancedMaxHarvestLevel = 2; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Advanced Exchanger") + public int advancedMaxRange = 5; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Elite Exchanger") public int eliteMaxEnergy = 5000000; @@ -221,6 +281,9 @@ public static class MekanismTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Elite Exchanger") public int eliteMaxHarvestLevel = 3; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Elite Exchanger") + public int eliteMaxRange = 6; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for Ultimate Exchanger") public int ultimateMaxEnergy = 10000000; @@ -230,6 +293,9 @@ public static class MekanismTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for Ultimate Exchanger") public int ultimateMaxHarvestLevel = 4; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for Ultimate Exchanger") + public int ultimateMaxRange = 7; } public static class ImmersiveEngineeringTweaks { @@ -242,6 +308,9 @@ public static class ImmersiveEngineeringTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for LV Exchanger") public int lvMaxHarvestLevel = 2; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for LV Exchanger") + public int lvMaxRange = 3; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for MV Exchanger") public int mvMaxEnergy = 500000; @@ -251,6 +320,9 @@ public static class ImmersiveEngineeringTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for MV Exchanger") public int mvMaxHarvestLevel = 3; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for MV Exchanger") + public int mvMaxRange = 5; @Config.RangeInt(min = 1000) @Config.Comment("Set the RF capacity for HV Exchanger") public int hvMaxEnergy = 2500000; @@ -260,6 +332,9 @@ public static class ImmersiveEngineeringTweaks { @Config.RangeInt(min = 0) @Config.Comment("Set the max harvest level for HV Exchanger") public int hvMaxHarvestLevel = 4; + @Config.RangeInt(min = 0, max = 12) + @Config.Comment("Set the max range for HV Exchanger") + public int hvMaxRange = 7; } public static class RecipeTweaks { diff --git a/src/main/resources/assets/exchangers/lang/de_DE.lang b/src/main/resources/assets/exchangers/lang/de_DE.lang index 808b7b4..5812dca 100644 --- a/src/main/resources/assets/exchangers/lang/de_DE.lang +++ b/src/main/resources/assets/exchangers/lang/de_DE.lang @@ -29,7 +29,6 @@ exchangers.tooltip.silk_touch.off=§fSilk Touch mode is §4§ldisabled§r in con #Messages exchangers.error.invalid_block.te=§cFehler: Ungültiger Block! (Tile Entities) exchangers.error.invalid_block.unbreakable=§cFehler: Ungültiger Block! (Unbreakable Blocks) -exchangers.error.invalid_block.null=§cFehler: Ungültiger Block! (Null Display Name) exchangers.error.out_of_block=§cFehler: Nicht genügend Blöcke! exchangers.error.out_of_power=§cFehler: Nicht genügend Energie! exchangers.error.event_cancelled=§cFehler: Exchange event cancelled by other mods! diff --git a/src/main/resources/assets/exchangers/lang/en_US.lang b/src/main/resources/assets/exchangers/lang/en_US.lang index 018ebc2..5d7e319 100644 --- a/src/main/resources/assets/exchangers/lang/en_US.lang +++ b/src/main/resources/assets/exchangers/lang/en_US.lang @@ -36,12 +36,11 @@ exchangers.harvest_level.1=Iron exchangers.harvest_level.2=Diamond exchangers.harvest_level.3=Obsidian exchangers.harvest_level.4=Cobalt -exchangers.harvest_level.9001=§d§kOver 9000 +exchangers.harvest_level.2147483647=§d§kOver 9000 #Messages exchangers.error.invalid_block.te=§cError: Invalid block! (Tile Entities) exchangers.error.invalid_block.unbreakable=§cError: Invalid block! (Unbreakable Blocks) -exchangers.error.invalid_block.null=§cError: Invalid block! (Null Display Name) exchangers.error.blacklisted=§cError: This block is blacklisted by the config! exchangers.error.out_of_block=§cError: Out of block! exchangers.error.out_of_power=§cError: Out of power! diff --git a/src/main/resources/assets/exchangers/lang/pl_PL.lang b/src/main/resources/assets/exchangers/lang/pl_PL.lang index 8bb9f40..6079e85 100644 --- a/src/main/resources/assets/exchangers/lang/pl_PL.lang +++ b/src/main/resources/assets/exchangers/lang/pl_PL.lang @@ -29,7 +29,6 @@ exchangers.tooltip.silk_touch.off=§fSilk Touch mode is §4§ldisabled§r in con #Messages exchangers.error.invalid_block.te=§cError: Nieprwaidłowy Blok! (Tile Entities) exchangers.error.invalid_block.unbreakable=§cError: Nieprwaidłowy Blok! (Unbreakable Blocks) -exchangers.error.invalid_block.null=§cError: Nieprwaidłowy Blok! (Null Display Name) exchangers.error.out_of_block=§cError: Brak bloków! exchangers.error.out_of_power=§cError: Brak Energii! exchangers.error.event_cancelled=§cError: Exchange event cancelled by other mods! diff --git a/src/main/resources/assets/exchangers/lang/pt_BR.lang b/src/main/resources/assets/exchangers/lang/pt_BR.lang index 4d0ba27..a8b0ec5 100644 --- a/src/main/resources/assets/exchangers/lang/pt_BR.lang +++ b/src/main/resources/assets/exchangers/lang/pt_BR.lang @@ -29,7 +29,6 @@ exchangers.tooltip.silk_touch.off=§fSilk Touch mode is §4§ldisabled§r in con #Messages exchangers.error.invalid_block.te=§cErro: Bloco inválido! (Tile Entities) exchangers.error.invalid_block.unbreakable=§cErro: Bloco inválido! (Unbreakable Blocks) -exchangers.error.invalid_block.null=§cErro: Bloco inválido! (Null Display Name) exchangers.error.out_of_block=§cErro: Sem mais blocos! exchangers.error.out_of_power=§cErro: Sem energia! exchangers.error.event_cancelled=§cErro: Exchange event cancelled by other mods! diff --git a/src/main/resources/assets/exchangers/lang/zh_CN.lang b/src/main/resources/assets/exchangers/lang/zh_CN.lang index 16c4bfa..12cc134 100644 --- a/src/main/resources/assets/exchangers/lang/zh_CN.lang +++ b/src/main/resources/assets/exchangers/lang/zh_CN.lang @@ -29,7 +29,6 @@ exchangers.tooltip.silk_touch.off=§f精准采集模式已在配置里§4§l禁 #Messages exchangers.error.invalid_block.te=§c错误:对此方块无效!(方块实体) exchangers.error.invalid_block.unbreakable=§c错误:对此方块无效!(不可破坏的方块) -exchangers.error.invalid_block.null=§c错误:对此方块无效!(空值显示名称) exchangers.error.out_of_block=§c错误:选定方块耗尽! exchangers.error.out_of_power=§c错误:能量不足! exchangers.error.event_cancelled=§cError: Exchange event cancelled by other mods! diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index ea9938e..a962d89 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "exchangers", "name": "Exchangers", "description": "Block Exchangers.", - "version": "1.10.2-1.8.2", + "version": "1.10.2-1.8.3", "mcversion": "1.10.2", "url": "https://github.com/JackyyTV/Exchangers", "updateUrl": "",