fix client desync
This commit is contained in:
@@ -21,6 +21,7 @@ package appeng.container.implementations;
|
|||||||
|
|
||||||
import appeng.api.config.Upgrades;
|
import appeng.api.config.Upgrades;
|
||||||
import appeng.container.slot.*;
|
import appeng.container.slot.*;
|
||||||
|
import appeng.util.Platform;
|
||||||
import net.minecraft.entity.player.InventoryPlayer;
|
import net.minecraft.entity.player.InventoryPlayer;
|
||||||
|
|
||||||
import appeng.api.config.SecurityPermissions;
|
import appeng.api.config.SecurityPermissions;
|
||||||
@@ -43,6 +44,9 @@ public class ContainerInterface extends ContainerUpgradeable implements IOptiona
|
|||||||
@GuiSync( 4 )
|
@GuiSync( 4 )
|
||||||
public YesNo iTermMode = YesNo.YES;
|
public YesNo iTermMode = YesNo.YES;
|
||||||
|
|
||||||
|
@GuiSync( 7 )
|
||||||
|
public int patternExpansions = 0;
|
||||||
|
|
||||||
public ContainerInterface( final InventoryPlayer ip, final IInterfaceHost te )
|
public ContainerInterface( final InventoryPlayer ip, final IInterfaceHost te )
|
||||||
{
|
{
|
||||||
super( ip, te.getInterfaceDuality().getHost() );
|
super( ip, te.getInterfaceDuality().getHost() );
|
||||||
@@ -103,9 +107,22 @@ public class ContainerInterface extends ContainerUpgradeable implements IOptiona
|
|||||||
public void detectAndSendChanges()
|
public void detectAndSendChanges()
|
||||||
{
|
{
|
||||||
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
this.verifyPermissions( SecurityPermissions.BUILD, false );
|
||||||
|
|
||||||
|
if (patternExpansions != getPatternUpgrades())
|
||||||
|
{
|
||||||
|
patternExpansions = getPatternUpgrades();
|
||||||
|
this.myDuality.dropExcessPatterns();
|
||||||
|
}
|
||||||
super.detectAndSendChanges();
|
super.detectAndSendChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpdate( final String field, final Object oldValue, final Object newValue ) {
|
||||||
|
super.onUpdate(field, oldValue, newValue);
|
||||||
|
if ( Platform.isClient() && field.equals("patternExpansions"))
|
||||||
|
this.myDuality.dropExcessPatterns();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadSettingsFromHost( final IConfigManager cm )
|
protected void loadSettingsFromHost( final IConfigManager cm )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import java.util.*;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import appeng.api.definitions.IItemDefinition;
|
||||||
import appeng.integration.modules.gregtech.GTCEInventoryAdaptor;
|
import appeng.integration.modules.gregtech.GTCEInventoryAdaptor;
|
||||||
import appeng.util.*;
|
import appeng.util.*;
|
||||||
import appeng.util.inv.*;
|
import appeng.util.inv.*;
|
||||||
@@ -34,6 +35,7 @@ import gregtech.api.metatileentity.MetaTileEntity;
|
|||||||
import gregtech.api.metatileentity.MetaTileEntityHolder;
|
import gregtech.api.metatileentity.MetaTileEntityHolder;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
import net.minecraft.inventory.InventoryCrafting;
|
import net.minecraft.inventory.InventoryCrafting;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
@@ -176,7 +178,6 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( inv == this.config )
|
if( inv == this.config )
|
||||||
{
|
{
|
||||||
this.readConfig();
|
this.readConfig();
|
||||||
@@ -592,6 +593,28 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void dropExcessPatterns()
|
||||||
|
{
|
||||||
|
IItemHandler patterns = getPatterns();
|
||||||
|
|
||||||
|
List<ItemStack> dropList = new ArrayList<>();
|
||||||
|
for( int invSlot = 0; invSlot < patterns.getSlots(); invSlot++ )
|
||||||
|
{
|
||||||
|
if( invSlot >= 9 + ( this.getInstalledUpgrades( Upgrades.PATTERN_EXPANSION ) ) * 9 )
|
||||||
|
{
|
||||||
|
ItemStack is = patterns.getStackInSlot( invSlot );
|
||||||
|
if( is.isEmpty() ) continue;
|
||||||
|
dropList.add( patterns.extractItem( invSlot, Integer.MAX_VALUE, false ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( dropList.size() > 1 )
|
||||||
|
{
|
||||||
|
World world = this.getLocation().getWorld();
|
||||||
|
BlockPos blockPos = this.getLocation().getPos();
|
||||||
|
Platform.spawnDrops( world, blockPos, dropList );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canInsert( final ItemStack stack )
|
public boolean canInsert( final ItemStack stack )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,15 +20,19 @@ package appeng.parts.automation;
|
|||||||
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import appeng.api.AEApi;
|
||||||
import appeng.container.slot.SlotRestrictedInput;
|
import appeng.container.slot.SlotRestrictedInput;
|
||||||
import appeng.core.Api;
|
import appeng.core.Api;
|
||||||
import appeng.helpers.DualityInterface;
|
import appeng.helpers.DualityInterface;
|
||||||
import appeng.util.inv.ItemHandlerIterator;
|
import appeng.util.inv.ItemHandlerIterator;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
import appeng.api.config.Upgrades;
|
import appeng.api.config.Upgrades;
|
||||||
@@ -39,6 +43,9 @@ import appeng.util.inv.IAEAppEngInventory;
|
|||||||
import appeng.util.inv.InvOperation;
|
import appeng.util.inv.InvOperation;
|
||||||
import appeng.util.inv.filter.IAEItemFilter;
|
import appeng.util.inv.filter.IAEItemFilter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public abstract class UpgradeInventory extends AppEngInternalInventory implements IAEAppEngInventory
|
public abstract class UpgradeInventory extends AppEngInternalInventory implements IAEAppEngInventory
|
||||||
{
|
{
|
||||||
@@ -177,21 +184,6 @@ public abstract class UpgradeInventory extends AppEngInternalInventory implement
|
|||||||
@Override
|
@Override
|
||||||
public ItemStack extractItem( int slot, int amount, boolean simulate )
|
public ItemStack extractItem( int slot, int amount, boolean simulate )
|
||||||
{
|
{
|
||||||
if( patternExpansionUpgrades > 0 )
|
|
||||||
{
|
|
||||||
if( parent instanceof DualityInterface )
|
|
||||||
{
|
|
||||||
IItemHandler patternInv = ( (DualityInterface) parent ).getPatterns();
|
|
||||||
for( int invSlot = 0; invSlot < patternInv.getSlots(); invSlot++ )
|
|
||||||
{
|
|
||||||
ItemStack is = patternInv.getStackInSlot( invSlot );
|
|
||||||
if( invSlot > patternExpansionUpgrades * 9 && !is.isEmpty() )
|
|
||||||
{
|
|
||||||
return ItemStack.EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.extractItem( slot, amount, simulate );
|
return super.extractItem( slot, amount, simulate );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user