Fix container item crafting (again)

avoid making some copies
fix crash without JEI
This commit is contained in:
PrototypeTrousers
2022-03-15 23:42:56 -03:00
parent ccc8486571
commit 706e577dab
12 changed files with 130 additions and 191 deletions
+10 -10
View File
@@ -18,7 +18,6 @@
package appeng.util.item;
import java.lang.ref.WeakReference;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@@ -27,7 +26,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.google.common.primitives.Ints;
import gregtech.common.items.MetaTool;
import gregtech.api.items.IToolItem;
import io.netty.buffer.ByteBuf;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -45,7 +44,7 @@ import appeng.core.Api;
import appeng.util.Platform;
public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemStack
public class AEItemStack extends AEStack<IAEItemStack> implements IAEItemStack
{
private static final String NBT_STACKSIZE = "Cnt";
private static final String NBT_REQUESTABLE = "Req";
@@ -363,7 +362,7 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
private boolean fuzzyItemStackComparison( ItemStack a, ItemStack b, FuzzyMode mode )
{
if( a.getItem() == b.getItem() && ( a.getItem().isDamageable() || Platform.isModLoaded( "gregtech" ) && a.getItem() instanceof MetaTool ) )
if( a.getItem() == b.getItem() && ( a.getItem().isDamageable() || Platform.isGTDamageableItem( a.getItem() ) ) )
{
if( mode == FuzzyMode.IGNORE_ALL )
{
@@ -371,7 +370,7 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
{
return true;
}
else if( Platform.isModLoaded( "gregtech" ) && a.getItem() instanceof MetaTool )
else if( Platform.isGTDamageableItem( a.getItem() ) )
{
return a.getItemDamage() == b.getItemDamage();
}
@@ -382,9 +381,9 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
{
return a.getItemDamage() > 1 == b.getItemDamage() > 1;
}
else if( Platform.isModLoaded( "gregtech" ) && a.getItem() instanceof MetaTool )
else if( Platform.isGTDamageableItem( a.getItem() ) )
{
return ( (MetaTool) a.getItem() ).getItemDamage( a ) == ( (MetaTool) b.getItem() ).getItemDamage( b );
return ( (IToolItem) a.getItem() ).getItemDamage( a ) == ( (IToolItem) b.getItem() ).getItemDamage( b );
}
}
else
@@ -396,10 +395,10 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
percentDamageOfA = (float) a.getItemDamage() / a.getMaxDamage();
percentDamageOfB = (float) b.getItemDamage() / b.getMaxDamage();
}
else if( Platform.isModLoaded( "gregtech" ) && a.getItem() instanceof MetaTool )
else if( Platform.isGTDamageableItem( a.getItem() ) )
{
percentDamageOfA = (float) ( (MetaTool) a.getItem() ).getItemDamage( a ) / ( (MetaTool) a.getItem() ).getMaxItemDamage( a );
percentDamageOfB = (float) ( (MetaTool) b.getItem() ).getItemDamage( b ) / ( (MetaTool) b.getItem() ).getMaxItemDamage( b );
percentDamageOfA = (float) ( (IToolItem) a.getItem() ).getItemDamage( a ) / ( (IToolItem) a.getItem() ).getMaxItemDamage( a );
percentDamageOfB = (float) ( (IToolItem) b.getItem() ).getItemDamage( b ) / ( (IToolItem) b.getItem() ).getMaxItemDamage( b );
}
return percentDamageOfA > mode.breakPoint == percentDamageOfB > mode.breakPoint;
@@ -408,4 +407,5 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
return false;
}
}
@@ -25,7 +25,7 @@ import java.util.Map;
import appeng.util.Platform;
import com.google.common.base.Preconditions;
import gregtech.common.items.MetaTool;
import gregtech.api.items.IToolItem;
import net.minecraft.item.ItemStack;
import it.unimi.dsi.fastutil.objects.Object2ObjectAVLTreeMap;
@@ -165,14 +165,14 @@ class FuzzyItemVariantList extends ItemVariantList
*/
static ItemDamageBound makeLowerBound( final ItemStack stack, final FuzzyMode fuzzy )
{
Preconditions.checkState( stack.getItem().isDamageable() || ( Platform.isModLoaded( "gregtech" ) && stack.getItem() instanceof MetaTool ), "Item#isDamageable() has to be true" );
Preconditions.checkState( stack.getItem().isDamageable() || ( Platform.isGTDamageableItem( stack.getItem() ) ), "Item#isDamageable() has to be true" );
int damage;
int maxDamage;
if( Platform.isModLoaded( "gregtech" ) && stack.getItem() instanceof MetaTool )
if( Platform.isGTDamageableItem( stack.getItem() ) )
{
maxDamage = ( (MetaTool) stack.getItem() ).getMaxItemDamage( stack );
damage = ( (MetaTool) stack.getItem() ).getItemDamage( stack );
maxDamage = ( (IToolItem) stack.getItem() ).getMaxItemDamage( stack );
damage = ( (IToolItem) stack.getItem() ).getItemDamage( stack );
}
else
{
@@ -202,7 +202,7 @@ class FuzzyItemVariantList extends ItemVariantList
*/
static ItemDamageBound makeUpperBound( final ItemStack stack, final FuzzyMode fuzzy )
{
Preconditions.checkState( stack.getItem().isDamageable() || ( Platform.isModLoaded( "gregtech" ) && stack.getItem() instanceof MetaTool ), "Item#isDamageable() has to be true" );
Preconditions.checkState( stack.getItem().isDamageable() || ( Platform.isGTDamageableItem( stack.getItem() ) ), "Item#isDamageable() has to be true" );
int damage;
if( fuzzy == FuzzyMode.IGNORE_ALL )
@@ -212,10 +212,10 @@ class FuzzyItemVariantList extends ItemVariantList
else
{
int maxDamage;
if( Platform.isModLoaded( "gregtech" ) && stack.getItem() instanceof MetaTool )
if( Platform.isGTDamageableItem( stack.getItem() ) )
{
maxDamage = ( (MetaTool) stack.getItem() ).getMaxItemDamage( stack );
damage = ( (MetaTool) stack.getItem() ).getItemDamage( stack );
maxDamage = ( (IToolItem) stack.getItem() ).getMaxItemDamage( stack );
damage = ( (IToolItem) stack.getItem() ).getItemDamage( stack );
}
else
{
+1 -2
View File
@@ -26,7 +26,6 @@ import java.util.NoSuchElementException;
import java.util.concurrent.atomic.AtomicInteger;
import appeng.util.Platform;
import gregtech.common.items.MetaTool;
import net.minecraft.item.Item;
import it.unimi.dsi.fastutil.objects.Reference2ObjectMap;
@@ -175,7 +174,7 @@ public final class ItemList implements IItemList<IAEItemStack>
private ItemVariantList makeRecordMap( Item item )
{
if( item.isDamageable() || ( Platform.isModLoaded( "gregtech" ) && item instanceof MetaTool ) )
if( item.isDamageable() || Platform.isGTDamageableItem( item ) )
{
return new FuzzyItemVariantList();
}