1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-11-04 15:43:00 +00:00

Make upgrade recipe requirements a little more lax

- Move some common upgrade code to IUpgradeBase. 99% sure this this
   preserves binary compatibility (on the JVM at least).

 - Instead of requiring the share tag to match, allow upgrades to
   specify their own predicate. IMO this is a little ugly, but required
   to fix #614 as other mods chuck their own NBT on items.
This commit is contained in:
Jonathan Coates
2020-12-23 15:52:33 +00:00
parent e3a672099c
commit 2f0cae0bc1
8 changed files with 121 additions and 138 deletions

View File

@@ -28,6 +28,7 @@ import net.minecraft.entity.item.ArmorStandEntity;
import net.minecraft.fluid.IFluidState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Direction;
@@ -38,6 +39,7 @@ import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.event.entity.player.AttackEntityEvent;
import net.minecraftforge.event.world.BlockEvent;
import org.apache.commons.lang3.tuple.Pair;
@@ -68,6 +70,24 @@ public class TurtleTool extends AbstractTurtleUpgrade
this.item = toolItem;
}
@Override
public boolean isItemSuitable( @Nonnull ItemStack stack )
{
CompoundNBT tag = stack.getTag();
if( tag == null || tag.isEmpty() ) return true;
// Check we've not got anything vaguely interesting on the item. We allow other mods to add their
// own NBT, with the understanding such details will be lost to the mist of time.
if( stack.isDamaged() || stack.isEnchanted() || stack.hasDisplayName() ) return false;
if( tag.contains( "AttributeModifiers", Constants.NBT.TAG_LIST ) &&
!tag.getList( "AttributeModifiers", Constants.NBT.TAG_COMPOUND ).isEmpty() )
{
return false;
}
return true;
}
@Nonnull
@Override
@OnlyIn( Dist.CLIENT )