From 19c6e2ff2dc059a1d9d98ae97cf01e168abb90e8 Mon Sep 17 00:00:00 2001 From: PrototypeTrousers Date: Sun, 27 Mar 2022 08:52:37 -0300 Subject: [PATCH] support for IC2 damageable items --- gradle.properties | 2 +- src/main/java/appeng/util/Platform.java | 26 +++++++++++++------ .../java/appeng/util/item/AEItemStack.java | 16 +++++++++--- .../util/item/FuzzyItemVariantList.java | 15 +++++++++-- 4 files changed, 45 insertions(+), 14 deletions(-) diff --git a/gradle.properties b/gradle.properties index e05171c06..64569f115 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ aebuild=7 aegroup=appeng aebasename=appliedenergistics2 extended=extended_life -extendedversion=v51f +extendedversion=v51g ######################################################### # Versions # ######################################################### diff --git a/src/main/java/appeng/util/Platform.java b/src/main/java/appeng/util/Platform.java index ac826a7e3..7f7f45ca2 100644 --- a/src/main/java/appeng/util/Platform.java +++ b/src/main/java/appeng/util/Platform.java @@ -37,6 +37,8 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import gregtech.api.items.IToolItem; +import ic2.api.item.IC2Items; +import ic2.api.item.ICustomDamageItem; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; @@ -137,6 +139,7 @@ import appeng.util.prioritylist.IPartitionList; * @since rv0 */ @Optional.Interface( iface = "gregtech.api.items.IToolItem", modid = "gregtech" ) +@Optional.Interface( iface = "ic2.api.item.ICustomDamageItem", modid = "IC2" ) public class Platform { @@ -1252,20 +1255,22 @@ public class Platform split.setStackSize( itemToAdd ); leftover.add( cell.injectItems( split, Actionable.MODULATE, src ) ); - src.player().ifPresent( player -> { - final long diff = original - leftover.getStackSize(); - Stats.ItemsInserted.addToPlayer( player, (int) diff ); - } ); + src.player().ifPresent( player -> + { + final long diff = original - leftover.getStackSize(); + Stats.ItemsInserted.addToPlayer( player, (int) diff ); + } ); return leftover; } final T ret = cell.injectItems( input, Actionable.MODULATE, src ); - src.player().ifPresent( player -> { - final long diff = ret == null ? input.getStackSize() : input.getStackSize() - ret.getStackSize(); - Stats.ItemsInserted.addToPlayer( player, (int) diff ); - } ); + src.player().ifPresent( player -> + { + final long diff = ret == null ? input.getStackSize() : input.getStackSize() - ret.getStackSize(); + Stats.ItemsInserted.addToPlayer( player, (int) diff ); + } ); return ret; } @@ -1680,4 +1685,9 @@ public class Platform { return ( isModLoaded( "gregtech" ) && item instanceof IToolItem ); } + + public static boolean isIC2DamageableItem( Item item ) + { + return ( isModLoaded( "IC2" ) && item instanceof ICustomDamageItem ); + } } diff --git a/src/main/java/appeng/util/item/AEItemStack.java b/src/main/java/appeng/util/item/AEItemStack.java index 7029fead1..87417bf5f 100644 --- a/src/main/java/appeng/util/item/AEItemStack.java +++ b/src/main/java/appeng/util/item/AEItemStack.java @@ -27,6 +27,7 @@ import javax.annotation.Nullable; import com.google.common.primitives.Ints; import gregtech.api.items.IToolItem; +import ic2.api.item.ICustomDamageItem; import io.netty.buffer.ByteBuf; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -377,20 +378,29 @@ public class AEItemStack extends AEStack implements IAEItemStack } else if( mode == FuzzyMode.PERCENT_99 ) { - if( a.getItem().isDamageable() ) + if( Platform.isIC2DamageableItem( a.getItem() ) ) + { + return ( (ICustomDamageItem) a.getItem() ).getCustomDamage( a ) > 1 == ( (ICustomDamageItem) b.getItem() ).getCustomDamage( b ) > 1; + } + else if( a.getItem().isDamageable() ) { return a.getItemDamage() > 1 == b.getItemDamage() > 1; } else if( Platform.isGTDamageableItem( a.getItem() ) ) { - return ( (IToolItem) a.getItem() ).getItemDamage( a ) == ( (IToolItem) b.getItem() ).getItemDamage( b ); + return ( (IToolItem) a.getItem() ).getItemDamage( a ) > 1 == ( (IToolItem) b.getItem() ).getItemDamage( b ) > 1; } } else { float percentDamageOfA = 0; float percentDamageOfB = 0; - if( a.getItem().isDamageable() ) + if( Platform.isIC2DamageableItem( a.getItem() ) ) + { + percentDamageOfA = (float) ( (ICustomDamageItem) a.getItem() ).getCustomDamage( a ) / ( (ICustomDamageItem) a.getItem() ).getMaxCustomDamage( a ); + percentDamageOfB = (float) ( (ICustomDamageItem) b.getItem() ).getCustomDamage( b ) / ( (ICustomDamageItem) b.getItem() ).getMaxCustomDamage( b ); + } + else if( a.getItem().isDamageable() ) { percentDamageOfA = (float) a.getItemDamage() / a.getMaxDamage(); percentDamageOfB = (float) b.getItemDamage() / b.getMaxDamage(); diff --git a/src/main/java/appeng/util/item/FuzzyItemVariantList.java b/src/main/java/appeng/util/item/FuzzyItemVariantList.java index d80b55b03..aa444982a 100644 --- a/src/main/java/appeng/util/item/FuzzyItemVariantList.java +++ b/src/main/java/appeng/util/item/FuzzyItemVariantList.java @@ -26,6 +26,7 @@ import appeng.util.Platform; import com.google.common.base.Preconditions; import gregtech.api.items.IToolItem; +import ic2.api.item.ICustomDamageItem; import net.minecraft.item.ItemStack; import it.unimi.dsi.fastutil.objects.Object2ObjectAVLTreeMap; @@ -169,7 +170,12 @@ class FuzzyItemVariantList extends ItemVariantList int damage; int maxDamage; - if( Platform.isGTDamageableItem( stack.getItem() ) ) + if( Platform.isIC2DamageableItem( stack.getItem() ) ) + { + maxDamage = ( (ICustomDamageItem) stack.getItem() ).getMaxCustomDamage( stack ); + damage = ( (ICustomDamageItem) stack.getItem() ).getCustomDamage( stack ); + } + else if( Platform.isGTDamageableItem( stack.getItem() ) ) { maxDamage = ( (IToolItem) stack.getItem() ).getMaxItemDamage( stack ); damage = ( (IToolItem) stack.getItem() ).getItemDamage( stack ); @@ -212,7 +218,12 @@ class FuzzyItemVariantList extends ItemVariantList else { int maxDamage; - if( Platform.isGTDamageableItem( stack.getItem() ) ) + if( Platform.isIC2DamageableItem( stack.getItem() ) ) + { + maxDamage = ( (ICustomDamageItem) stack.getItem() ).getMaxCustomDamage( stack ); + damage = ( (ICustomDamageItem) stack.getItem() ).getCustomDamage( stack ); + } + else if( Platform.isGTDamageableItem( stack.getItem() ) ) { maxDamage = ( (IToolItem) stack.getItem() ).getMaxItemDamage( stack ); damage = ( (IToolItem) stack.getItem() ).getItemDamage( stack );