Skip to content

Commit

Permalink
2.7.1 Update
Browse files Browse the repository at this point in the history
- Added a harvest level gating system for all the Exchangers, closes #47

- Fixed a block dupe exploit with certain item containers, closes #48

- Exchanged blocks now drop on player's position instead of the blocks' positions

- All vanilla Exchangers are now repairable in Anvil except for Wooden Exchanger

- Tuberous Exchanger now only damages player if the player right click with it on any blocks

- Added a missing translation for the Force Drop Items mode keybind
  • Loading branch information
JackyyTV committed Mar 4, 2018
1 parent 67f6c57 commit f02ed6c
Show file tree
Hide file tree
Showing 55 changed files with 378 additions and 128 deletions.
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx4G
mc_version=1.12.2
forge_version=1.12.2-14.23.2.2618
mod_version=2.7
mappings_version=snapshot_20180219
forge_version=1.12.2-14.23.2.2624
mod_version=2.7.1
mappings_version=snapshot_20180304
2 changes: 1 addition & 1 deletion src/main/java/jackyy/exchangers/Exchangers.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
@Mod(modid = Exchangers.MODID, version = Exchangers.VERSION, name = Exchangers.MODNAME, dependencies = Exchangers.DEPENDS, certificateFingerprint = "@FINGERPRINT@", acceptedMinecraftVersions = Exchangers.MCVERSION, useMetadata = true)
public class Exchangers {

public static final String VERSION = "1.12.2-2.7";
public static final String VERSION = "1.12.2-2.7.1";
public static final String MCVERSION = "[1.12,1.13)";
public static final String MODID = "exchangers";
public static final String MODNAME = "Exchangers";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@
@SideOnly(Side.CLIENT)
public class ClientEventsHandler {

public static Minecraft mc = FMLClientHandler.instance().getClient();
public static final String DEV_CAPE = "https://jackyytv.github.io/imgs/mc_mods/exchangers/capes/cape_dev.png";
private static Minecraft mc = FMLClientHandler.instance().getClient();
private static final String DEV_CAPE = "https://jackyytv.github.io/imgs/mc_mods/exchangers/capes/cape_dev.png";

private Map<String, CapeBufferDownload> buffer = new HashMap<>();

Expand Down
62 changes: 38 additions & 24 deletions src/main/java/jackyy/exchangers/handler/ExchangerHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import net.minecraftforge.common.util.BlockSnapshot;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.wrapper.InvWrapper;
import net.minecraftforge.items.IItemHandler;

import java.util.*;

Expand Down Expand Up @@ -62,12 +62,13 @@ public static void setDefaultTagCompound(ItemStack stack) {
compound.setBoolean("forceDropItems", false);
stack.setTagCompound(compound);
} else {
if (stack.getTagCompound().hasKey("Energy") && !stack.getTagCompound().hasKey("mode")) {
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("mode")) {
stack.getTagCompound().setInteger("mode", 0);
}
if (!stack.getTagCompound().hasKey("forceDropItems")) {
} else if (!stack.getTagCompound().hasKey("forceDropItems")) {
stack.getTagCompound().setBoolean("forceDropItems", false);
}
}
Expand All @@ -88,15 +89,14 @@ public void addInformation(ItemStack stack, World world, List<String> tooltip, I
if (StringHelper.isShiftKeyDown()) {
if (id.equals("minecraft:air")) {
tooltip.add(StringHelper.localize("tooltip.no_selected_block"));
tooltip.add(StringHelper.localize("tooltip.current_range") + " " + modeSwitchList[compound.getInteger("mode")]);
tooltip.add(StringHelper.localize("tooltip.max_range") + " " + modeSwitchList[getMaxRange()]);
} 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.current_range") + " " + modeSwitchList[compound.getInteger("mode")]);
tooltip.add(StringHelper.localize("tooltip.max_range") + " " + modeSwitchList[getMaxRange()]);
}
tooltip.add(StringHelper.localize("tooltip.current_range") + " " + modeSwitchList[compound.getInteger("mode")]);
tooltip.add(StringHelper.localize("tooltip.max_range") + " " + modeSwitchList[getMaxRange()]);
tooltip.add(StringHelper.localize("tooltip.max_harvest_level") + " " + StringHelper.formatHarvestLevel(getHarvestLevel()));
if (ModConfig.misc.doExchangersSilkTouch) {
tooltip.add(StringHelper.localize("tooltip.silk_touch.on"));
} else {
Expand Down Expand Up @@ -172,8 +172,7 @@ public static boolean isWhitelisted(World world, BlockPos pos) {
return true;
}
}
return world.getBlockState(pos).getBlock().getRegistryName().getResourceDomain().equals("tconstruct")
|| world.getBlockState(pos).getBlock().getRegistryName().getResourceDomain().equals("blockcraftery");
return world.getBlockState(pos).getBlock().getRegistryName().getResourceDomain().equals("tconstruct");
}

private boolean isSpecial(Block block) {
Expand Down Expand Up @@ -212,6 +211,9 @@ private void placeBlock(ItemStack stack, EntityPlayer player, World world, Block
} else if (!isCreative() && isPowered() && stack.getTagCompound().getInteger("Energy") < getPerBlockEnergy(stack)) {
ChatHelper.msgPlayer(player, "error.out_of_power");
return;
} else if (!isCreative() && getHarvestLevel() < oldblock.getHarvestLevel(oldState)) {
ChatHelper.msgPlayer(player, "error.low_harvest_level");
return;
}
Set<BlockPos> coordinates = findSuitableBlocks(stack, world, side, pos, oldblock, oldmeta);
boolean notEnough = false;
Expand All @@ -224,12 +226,12 @@ private void placeBlock(ItemStack stack, EntityPlayer player, World world, Block
if (!player.capabilities.isCreativeMode && !isCreative()) {
if (ModConfig.misc.doExchangersSilkTouch || EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0) {
ItemStack oldblockItem = oldblock.getItem(world, pos, oldState);
giveItem(world, player, pos, oldblockItem);
giveItem(world, player, oldblockItem);
} else {
int fortuneLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack);
List<ItemStack> oldblockItems = oldblock.getDrops(world, pos, oldState, fortuneLevel);
for (ItemStack oldblockItem : oldblockItems) {
giveItem(world, player, pos, oldblockItem);
giveItem(world, player, oldblockItem);
}
}
if (!isPowered()) {
Expand Down Expand Up @@ -385,15 +387,19 @@ private boolean consumeItemInInventory(Item item, int meta, InventoryPlayer play
if (player.capabilities.isCreativeMode || isCreative()) {
return true;
}
IInventory inv = playerInv;
int i = findItem(item, meta, inv);
int i = findItem(item, meta, playerInv);
if (i < 0) {
inv = findItemHolder(item, meta, inv);
IItemHandler inv = findItemHolder(playerInv);
if (inv == null)
return false;
i = findItem(item, meta, inv);
i = findItemInContainer(item, meta, inv);
if (i < 0)
return false;
ItemStack extracted = inv.extractItem(i, 1, false);
return extracted != ItemStack.EMPTY;

This comment has been minimized.

Copy link
@tterrag1098

tterrag1098 Apr 9, 2018

@JackyyTV This is an invalid comparison, use stack.isEmpty() always

This comment has been minimized.

Copy link
@JackyyTV

JackyyTV Apr 9, 2018

Author Owner

Noted, shall fix those on the next update whenever I have time.

} else {
playerInv.decrStackSize(i, 1);
}
inv.decrStackSize(i, 1);
return true;
}

Expand All @@ -407,20 +413,28 @@ private static int findItem(Item item, int meta, IInventory inv) {
return -1;
}

private static IInventory findItemHolder(Item item, int meta, IInventory inv) {
for (int i = 0; i < 36; i++) {
private static int findItemInContainer(Item item, int meta, IItemHandler inv) {
for (int i = 0; i < inv.getSlots(); i++) {
ItemStack stack = inv.getStackInSlot(i);
if (stack != ItemStack.EMPTY && (stack.getItem() == item) && (meta == stack.getItemDamage())) {
return i;
}
}
return -1;
}

private static IItemHandler findItemHolder(IInventory inv) {
for (int i = 0; i < inv.getSizeInventory(); i++) {
ItemStack stack = inv.getStackInSlot(i);
if (stack != ItemStack.EMPTY && stack.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null)) {
InvWrapper invW = (InvWrapper) stack.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
if (findItem(item, meta, invW.getInv()) != -1)
return invW.getInv();
return stack.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
}
}
return null;
}

private static void giveItem(World world, EntityPlayer player, BlockPos pos, ItemStack oldStack) {
EntityItem entityItem = new EntityItem(world, pos.getX(), pos.getY(), pos.getZ(), oldStack);
private static void giveItem(World world, EntityPlayer player, ItemStack oldStack) {
EntityItem entityItem = new EntityItem(world, player.posX, player.posY, player.posZ, oldStack);
if (player.getHeldItemMainhand().getTagCompound().getBoolean("forceDropItems")) {
world.spawnEntity(entityItem);
} else {
Expand Down
2 changes: 0 additions & 2 deletions src/main/java/jackyy/exchangers/helper/EnergyHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@
public class EnergyHelper {

public static ItemStack setDefaultEnergyTag(ItemStack container, int energy) {

if (!container.hasTagCompound()) {
container.setTagCompound(new NBTTagCompound());
}
container.getTagCompound().setInteger("Energy", energy);

return container;
}

Expand Down
8 changes: 6 additions & 2 deletions src/main/java/jackyy/exchangers/helper/StringHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import java.text.NumberFormat;

@SuppressWarnings("deprecation")
public class StringHelper {

public static String getTierText(int tier) {
Expand All @@ -25,7 +26,10 @@ public static String formatNumber(long number) {
return NumberFormat.getInstance().format(number);
}

@SuppressWarnings("deprecation")
public static String formatHarvestLevel(int harvestLevel) {
return localize("harvest_level." + harvestLevel);
}

public static String localize(String unlocalized, Object... args) {
String toLocalize = Exchangers.MODID + "." + unlocalized;
if (args != null && args.length > 0) {
Expand All @@ -36,4 +40,4 @@ public static String localize(String unlocalized, Object... args) {
}
}

}
}
2 changes: 1 addition & 1 deletion src/main/java/jackyy/exchangers/item/ItemCoreBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

public class ItemCoreBase extends Item {

public ItemCoreBase(){
public ItemCoreBase() {
setMaxStackSize(16);
setCreativeTab(Exchangers.TAB);
}
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/jackyy/exchangers/item/ItemExchangerBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

public class ItemExchangerBase extends ExchangerHandler {

public ItemExchangerBase(){
public ItemExchangerBase() {
setMaxStackSize(1);
setCreativeTab(Exchangers.TAB);
}
Expand All @@ -42,8 +42,7 @@ public void addInformation(ItemStack stack, World world, List<String> tooltip, I
}
}

@Override
@SideOnly(Side.CLIENT)
@Override @SideOnly(Side.CLIENT)
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> list) {
if (isInCreativeTab(tab)) {
if (checkLoaded()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,10 @@

import java.util.List;

@Optional.InterfaceList(value = {
@Optional.Interface(iface = "cofh.redstoneflux.api.IEnergyContainerItem", modid = "redstoneflux"),
@Optional.Interface(iface = "cofh.core.item.IEnchantableItem", modid = "cofhcore")
})
@Optional.Interface(iface = "cofh.core.item.IEnchantableItem", modid = "cofhcore")
public class ItemExchangerBasePowered extends ItemExchangerBase implements IEnergyContainerItem, IEnchantableItem {

public ItemExchangerBasePowered(){
public ItemExchangerBasePowered() {
setMaxDamage(1);
}

Expand Down Expand Up @@ -84,8 +81,7 @@ public void addInformation(ItemStack stack, World world, List<String> tooltip, I
}
}

@Override
@SideOnly(Side.CLIENT)
@Override @SideOnly(Side.CLIENT)
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> list) {
if (isInCreativeTab(tab)) {
if (checkLoaded()) {
Expand All @@ -106,7 +102,7 @@ public boolean isPowered() {
}

/* CAPABILITIES */
@Override @Optional.Method(modid = "redstoneflux")
@Override
public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) {
return new EnergyContainerItemWrapper(stack, this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

public class ItemConductiveIronExchanger extends ItemExchangerBasePowered {

public ItemConductiveIronExchanger(){
public ItemConductiveIronExchanger() {
setRegistryName(Exchangers.MODID + ":conductive_iron_exchanger");
setUnlocalizedName(Exchangers.MODID + ".conductive_iron_exchanger");
}
Expand Down Expand Up @@ -43,6 +43,11 @@ public int getTier() {
return 1;
}

@Override
public int getHarvestLevel() {
return ModConfig.enderIOTweaks.conductiveMaxHarvestLevel;
}

@Override
public int getMaxRange() {
return MODE_3X3;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

public class ItemDarkSteelExchanger extends ItemExchangerBasePowered {

public ItemDarkSteelExchanger(){
public ItemDarkSteelExchanger() {
setRegistryName(Exchangers.MODID + ":dark_steel_exchanger");
setUnlocalizedName(Exchangers.MODID + ".dark_steel_exchanger");
}
Expand Down Expand Up @@ -43,6 +43,11 @@ public int getTier() {
return 5;
}

@Override
public int getHarvestLevel() {
return ModConfig.enderIOTweaks.darkSteelMaxHarvestLevel;
}

@Override
public int getMaxRange() {
return MODE_13X13;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

public class ItemEIOExchangerCoreT1 extends ItemCoreBase {

public ItemEIOExchangerCoreT1(){
public ItemEIOExchangerCoreT1() {
setRegistryName(Exchangers.MODID + ":eio_exchanger_core_tier1");
setUnlocalizedName(Exchangers.MODID + ".eio_exchanger_core_tier1");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

public class ItemEIOExchangerCoreT2 extends ItemCoreBase {

public ItemEIOExchangerCoreT2(){
public ItemEIOExchangerCoreT2() {
setRegistryName(Exchangers.MODID + ":eio_exchanger_core_tier2");
setUnlocalizedName(Exchangers.MODID + ".eio_exchanger_core_tier2");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

public class ItemEIOExchangerCoreT3 extends ItemCoreBase {

public ItemEIOExchangerCoreT3(){
public ItemEIOExchangerCoreT3() {
setRegistryName(Exchangers.MODID + ":eio_exchanger_core_tier3");
setUnlocalizedName(Exchangers.MODID + ".eio_exchanger_core_tier3");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

public class ItemElectricalSteelExchanger extends ItemExchangerBasePowered {

public ItemElectricalSteelExchanger(){
public ItemElectricalSteelExchanger() {
setRegistryName(Exchangers.MODID + ":electrical_steel_exchanger");
setUnlocalizedName(Exchangers.MODID + ".electrical_steel_exchanger");
}
Expand Down Expand Up @@ -43,6 +43,11 @@ public int getTier() {
return 3;
}

@Override
public int getHarvestLevel() {
return ModConfig.enderIOTweaks.electricalSteelMaxHarvestLevel;
}

@Override
public int getMaxRange() {
return MODE_9X9;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

public class ItemEnergeticExchanger extends ItemExchangerBasePowered {

public ItemEnergeticExchanger(){
public ItemEnergeticExchanger() {
setRegistryName(Exchangers.MODID + ":energetic_exchanger");
setUnlocalizedName(Exchangers.MODID + ".energetic_exchanger");
}
Expand Down Expand Up @@ -43,6 +43,11 @@ public int getTier() {
return 4;
}

@Override
public int getHarvestLevel() {
return ModConfig.enderIOTweaks.energeticMaxHarvestLevel;
}

@Override
public int getMaxRange() {
return MODE_11X11;
Expand Down
Loading

0 comments on commit f02ed6c

Please sign in to comment.