Merge remote-tracking branch 'origin/master' into fabric-1.16

# Conflicts:
#	build.gradle
#	gradle.properties
#	src/api/java/appeng/api/config/Upgrades.java
#	src/api/java/appeng/api/recipes/ResolverResult.java
#	src/main/java/appeng/block/AEBaseBlockItemChargeable.java
#	src/main/java/appeng/block/crafting/CraftingStorageItem.java
#	src/main/java/appeng/block/misc/ChargerBlock.java
#	src/main/java/appeng/block/networking/CableBusBlock.java
#	src/main/java/appeng/block/storage/ChestBlock.java
#	src/main/java/appeng/block/storage/DriveSlotCellType.java
#	src/main/java/appeng/capabilities/Capabilities.java
#	src/main/java/appeng/client/me/ItemRepo.java
#	src/main/java/appeng/client/render/cablebus/FacadeBuilder.java
#	src/main/java/appeng/client/render/effects/ChargedOreFX.java
#	src/main/java/appeng/client/render/effects/CraftingFx.java
#	src/main/java/appeng/client/render/effects/EnergyFx.java
#	src/main/java/appeng/client/render/effects/LightningArcFX.java
#	src/main/java/appeng/client/render/effects/LightningFX.java
#	src/main/java/appeng/client/render/effects/MatterCannonFX.java
#	src/main/java/appeng/client/render/effects/VibrantFX.java
#	src/main/java/appeng/client/render/spatial/SpatialPylonRendering.java
#	src/main/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java
#	src/main/java/appeng/container/AEBaseContainer.java
#	src/main/java/appeng/container/implementations/CellWorkbenchContainer.java
#	src/main/java/appeng/container/implementations/MolecularAssemblerContainer.java
#	src/main/java/appeng/container/implementations/PatternTermContainer.java
#	src/main/java/appeng/container/implementations/QuartzKnifeContainer.java
#	src/main/java/appeng/core/AEConfig.java
#	src/main/java/appeng/core/AEItemGroup.java
#	src/main/java/appeng/core/Api.java
#	src/main/java/appeng/core/AppEng.java
#	src/main/java/appeng/core/Registration.java
#	src/main/java/appeng/core/api/definitions/ApiBlocks.java
#	src/main/java/appeng/core/api/definitions/ApiParts.java
#	src/main/java/appeng/core/features/registries/MovableTileRegistry.java
#	src/main/java/appeng/core/features/registries/P2PTunnelRegistry.java
#	src/main/java/appeng/core/features/registries/WirelessRegistry.java
#	src/main/java/appeng/core/features/registries/WorldGenRegistry.java
#	src/main/java/appeng/core/features/registries/cell/BasicItemCellGuiHandler.java
#	src/main/java/appeng/core/sync/BasePacketHandler.java
#	src/main/java/appeng/core/sync/packets/ClickPacket.java
#	src/main/java/appeng/core/sync/packets/PatternSlotPacket.java
#	src/main/java/appeng/crafting/CraftingTreeProcess.java
#	src/main/java/appeng/debug/ReplicatorCardItem.java
#	src/main/java/appeng/entity/ChargedQuartzEntity.java
#	src/main/java/appeng/entity/SingularityEntity.java
#	src/main/java/appeng/entity/TinyTNTPrimedEntity.java
#	src/main/java/appeng/fluids/helper/DualityFluidInterface.java
#	src/main/java/appeng/fluids/helper/FluidCellConfig.java
#	src/main/java/appeng/fluids/parts/FluidFormationPlanePart.java
#	src/main/java/appeng/fluids/parts/FluidHandlerAdapter.java
#	src/main/java/appeng/forge/data/providers/IAE2DataProvider.java
#	src/main/java/appeng/forge/data/providers/recipes/SlabStairRecipes.java
#	src/main/java/appeng/helpers/CraftingPatternDetails.java
#	src/main/java/appeng/helpers/DualityInterface.java
#	src/main/java/appeng/helpers/WirelessTerminalGuiObject.java
#	src/main/java/appeng/hooks/IBlockTool.java
#	src/main/java/appeng/hooks/TickHandler.java
#	src/main/java/appeng/integration/modules/jei/CondenserCategory.java
#	src/main/java/appeng/integration/modules/jei/JEIPlugin.java
#	src/main/java/appeng/items/misc/EncodedPatternItem.java
#	src/main/java/appeng/items/parts/FacadeItem.java
#	src/main/java/appeng/items/parts/PartItem.java
#	src/main/java/appeng/items/storage/AbstractStorageCell.java
#	src/main/java/appeng/items/storage/CreativeStorageCellItem.java
#	src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java
#	src/main/java/appeng/items/tools/powered/EntropyManipulatorItem.java
#	src/main/java/appeng/items/tools/powered/MatterCannonItem.java
#	src/main/java/appeng/items/tools/powered/WirelessTerminalItem.java
#	src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java
#	src/main/java/appeng/me/storage/MEMonitorIFluidHandler.java
#	src/main/java/appeng/parts/PartPlacement.java
#	src/main/java/appeng/parts/automation/FormationPlanePart.java
#	src/main/java/appeng/parts/p2p/FluidP2PTunnelPart.java
#	src/main/java/appeng/parts/reporting/PatternTerminalPart.java
#	src/main/java/appeng/spatial/CachedPlane.java
#	src/main/java/appeng/spatial/StorageChunkGenerator.java
#	src/main/java/appeng/spatial/StorageHelper.java
#	src/main/java/appeng/tile/crafting/CraftingBlockEntity.java
#	src/main/java/appeng/tile/crafting/CraftingStorageBlockEntity.java
#	src/main/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java
#	src/main/java/appeng/tile/inventory/AppEngInternalAEInventory.java
#	src/main/java/appeng/tile/misc/ChargerBlockEntity.java
#	src/main/java/appeng/tile/misc/CondenserBlockEntity.java
#	src/main/java/appeng/tile/misc/InscriberBlockEntity.java
#	src/main/java/appeng/tile/misc/InscriberRecipes.java
#	src/main/java/appeng/tile/qnb/QuantumBridgeBlockEntity.java
#	src/main/java/appeng/tile/storage/ChestBlockEntity.java
#	src/main/java/appeng/tile/storage/DriveBlockEntity.java
#	src/main/java/appeng/util/Platform.java
#	src/main/java/team/chisel/ctm/api/IFacade.java
#	src/main/resources/assets/appliedenergistics2/models/block/chest/base.json
#	src/unported/java/appeng/client/render/FacadeItemModel.java
#	src/unported/java/appeng/client/render/model/DriveBakedModel.java
#	src/unported/java/appeng/client/render/model/DriveModel.java
#	src/unported/java/appeng/core/PluginLoader.java
This commit is contained in:
Sebastian Hartte
2020-07-18 01:45:43 +02:00
233 changed files with 2321 additions and 1937 deletions
@@ -34,7 +34,6 @@ import net.minecraft.util.math.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockView;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.implementations.IPowerChannelState;
import appeng.api.networking.GridFlags;
@@ -49,6 +48,7 @@ import appeng.api.util.AEPartLocation;
import appeng.api.util.WorldCoord;
import appeng.block.crafting.AbstractCraftingUnitBlock;
import appeng.block.crafting.AbstractCraftingUnitBlock.CraftingUnitType;
import appeng.core.Api;
import appeng.me.cluster.IAECluster;
import appeng.me.cluster.IAEMultiBlock;
import appeng.me.cluster.implementations.CraftingCPUCalculator;
@@ -81,9 +81,9 @@ public class CraftingBlockEntity extends AENetworkBlockEntity implements IAEMult
Optional<ItemStack> is;
if (((CraftingBlockEntity) obj).isAccelerator()) {
is = AEApi.instance().definitions().blocks().craftingAccelerator().maybeStack(1);
is = Api.instance().definitions().blocks().craftingAccelerator().maybeStack(1);
} else {
is = AEApi.instance().definitions().blocks().craftingUnit().maybeStack(1);
is = Api.instance().definitions().blocks().craftingUnit().maybeStack(1);
}
return is.orElseGet(() -> super.getItemFromTile(obj));
@@ -243,6 +243,11 @@ public class CraftingBlockEntity extends AENetworkBlockEntity implements IAEMult
}
public void breakCluster() {
// Since breaking the cluster will most likely also update the TE's state,
// it's essential that we're not working with outdated block-state information,
// since this particular TE's block might already have been removed (state=air)
updateContainingBlockInfo();
if (this.cluster != null) {
this.cluster.cancel();
final IMEInventory<IAEItemStack> inv = this.cluster.getInventory();
@@ -275,7 +280,7 @@ public class CraftingBlockEntity extends AENetworkBlockEntity implements IAEMult
}
for (IAEItemStack ais : inv.getAvailableItems(
AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class).createList())) {
Api.instance().storage().getStorageChannel(IItemStorageChannel.class).createList())) {
ais = ais.copy();
ais.setStackSize(ais.getDefinition().getMaxCount());
while (true) {
@@ -34,10 +34,10 @@ import net.minecraft.util.math.Direction;
import net.fabricmc.api.EnvType;
import appeng.api.AEApi;
import appeng.api.implementations.tiles.IColorableTile;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AEColor;
import appeng.core.Api;
import appeng.util.item.AEItemStack;
public class CraftingMonitorBlockEntity extends CraftingBlockEntity implements IColorableTile {
@@ -162,7 +162,7 @@ public class CraftingMonitorBlockEntity extends CraftingBlockEntity implements I
@Override
protected ItemStack getItemFromTile(final Object obj) {
final Optional<ItemStack> is = AEApi.instance().definitions().blocks().craftingMonitor().maybeStack(1);
final Optional<ItemStack> is = Api.instance().definitions().blocks().craftingMonitor().maybeStack(1);
return is.orElseGet(() -> super.getItemFromTile(obj));
}
@@ -23,9 +23,9 @@ import java.util.Optional;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.item.ItemStack;
import appeng.api.AEApi;
import appeng.api.definitions.IBlocks;
import appeng.block.crafting.AbstractCraftingUnitBlock;
import appeng.core.Api;
public class CraftingStorageBlockEntity extends CraftingBlockEntity {
private static final int KILO_SCALAR = 1024;
@@ -36,7 +36,7 @@ public class CraftingStorageBlockEntity extends CraftingBlockEntity {
@Override
protected ItemStack getItemFromTile(final Object obj) {
final IBlocks blocks = AEApi.instance().definitions().blocks();
final IBlocks blocks = Api.instance().definitions().blocks();
final int storage = ((CraftingBlockEntity) obj).getStorageBytes() / KILO_SCALAR;
Optional<ItemStack> is;
@@ -20,7 +20,6 @@ package appeng.tile.crafting;
import alexiil.mc.lib.attributes.Simulation;
import alexiil.mc.lib.attributes.item.FixedItemInv;
import appeng.api.AEApi;
import appeng.api.config.*;
import appeng.api.definitions.ITileDefinition;
import appeng.api.implementations.IPowerChannelState;
@@ -39,6 +38,7 @@ import appeng.api.util.AEPartLocation;
import appeng.api.util.DimensionalCoord;
import appeng.api.util.IConfigManager;
import appeng.container.ContainerNull;
import appeng.core.Api;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.network.TargetPoint;
import appeng.core.sync.packets.AssemblerAnimationPacket;
@@ -101,7 +101,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity
public MolecularAssemblerBlockEntity(BlockEntityType<?> tileEntityTypeIn) {
super(tileEntityTypeIn);
final ITileDefinition assembler = AEApi.instance().definitions().blocks().molecularAssembler();
final ITileDefinition assembler = Api.instance().definitions().blocks().molecularAssembler();
this.settings = new ConfigManager(this);
this.settings.registerSetting(Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE);
@@ -220,8 +220,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity
if (!myPat.isEmpty() && myPat.getItem() instanceof EncodedPatternItem) {
final World w = this.getWorld();
final EncodedPatternItem iep = (EncodedPatternItem) myPat.getItem();
final ICraftingPatternDetails ph = iep.getPatternForItem(myPat, w);
final ICraftingPatternDetails ph = Api.instance().crafting().decodePattern(myPat, w);
if (ph != null && ph.isCraftable()) {
this.forcePlan = true;
this.myPlan = ph;
@@ -247,8 +246,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity
if (!is.isEmpty() && is.getItem() instanceof EncodedPatternItem) {
if (!ItemStack.areItemsEqual(is, this.myPattern)) {
final World w = this.getWorld();
final EncodedPatternItem iep = (EncodedPatternItem) is.getItem();
final ICraftingPatternDetails ph = iep.getPatternForItem(is, w);
final ICraftingPatternDetails ph = Api.instance().crafting().decodePattern(is, w);
if (ph != null && ph.isCraftable()) {
this.progress = 0;
@@ -31,10 +31,10 @@ import alexiil.mc.lib.attributes.item.InvMarkDirtyListener;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import appeng.api.AEApi;
import appeng.api.storage.channels.IItemStorageChannel;
import appeng.api.storage.data.IAEItemStack;
import appeng.core.AELog;
import appeng.core.Api;
import appeng.util.Platform;
import appeng.util.inv.IAEAppEngInventory;
import appeng.util.inv.InvOperation;
@@ -134,7 +134,7 @@ public class AppEngInternalAEInventory implements FixedItemInv, Iterable<ItemSta
}
ItemStack oldStack = this.getInvStack(slot).copy();
this.inv[slot] = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class)
this.inv[slot] = Api.instance().storage().getStorageChannel(IItemStorageChannel.class)
.createStack(to);
ItemStack newStack = to.copy();
@@ -31,7 +31,6 @@ import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.math.Direction;
import alexiil.mc.lib.attributes.item.FixedItemInv;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.config.PowerUnits;
@@ -47,6 +46,7 @@ import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.api.util.DimensionalCoord;
import appeng.core.Api;
import appeng.core.settings.TickRates;
import appeng.me.GridAccessException;
import appeng.tile.grid.AENetworkPowerBlockEntity;
@@ -116,7 +116,7 @@ public class ChargerBlockEntity extends AENetworkPowerBlockEntity implements ICr
final ItemStack myItem = this.inv.getInvStack(0);
if (this.getInternalCurrentPower() > POWER_THRESHOLD) {
final IMaterials materials = AEApi.instance().definitions().materials();
final IMaterials materials = Api.instance().definitions().materials();
if (materials.certusQuartzCrystal().isSameAs(myItem)) {
this.extractAEPower(this.getInternalMaxPower(), Actionable.MODULATE, PowerMultiplier.CONFIG);
@@ -158,7 +158,7 @@ public class ChargerBlockEntity extends AENetworkPowerBlockEntity implements ICr
if (myItem.isEmpty()) {
ItemStack held = player.inventory.getMainHandStack();
if (AEApi.instance().definitions().materials().certusQuartzCrystal().isSameAs(held)
if (Api.instance().definitions().materials().certusQuartzCrystal().isSameAs(held)
|| Platform.isChargeable(held)) {
held = player.inventory.removeStack(player.inventory.selectedSlot, 1);
this.inv.setInvStack(0, held, Simulation.ACTION);
@@ -186,13 +186,13 @@ public class ChargerBlockEntity extends AENetworkPowerBlockEntity implements ICr
boolean changed = false;
if (!myItem.isEmpty()) {
final IMaterials materials = AEApi.instance().definitions().materials();
final IMaterials materials = Api.instance().definitions().materials();
if (Platform.isChargeable(myItem)) {
final IAEItemPowerStorage ps = (IAEItemPowerStorage) myItem.getItem();
if (ps.getAEMaxPower(myItem) > ps.getAECurrentPower(myItem)) {
final double chargeRate = AEApi.instance().registries().charger().getChargeRate(myItem.getItem());
final double chargeRate = Api.instance().registries().charger().getChargeRate(myItem.getItem());
double extractedAmount = this.extractAEPower(chargeRate, Actionable.MODULATE,
PowerMultiplier.CONFIG);
@@ -255,7 +255,7 @@ public class ChargerBlockEntity extends AENetworkPowerBlockEntity implements ICr
private class ChargerInvFilter implements IAEItemFilter {
@Override
public boolean allowInsert(FixedItemInv inv, final int i, final ItemStack itemstack) {
final IItemDefinition cert = AEApi.instance().definitions().materials().certusQuartzCrystal();
final IItemDefinition cert = Api.instance().definitions().materials().certusQuartzCrystal();
return Platform.isChargeable(itemstack) || cert.isSameAs(itemstack);
}
@@ -271,7 +271,7 @@ public class ChargerBlockEntity extends AENetworkPowerBlockEntity implements ICr
}
}
return AEApi.instance().definitions().materials().certusQuartzCrystalCharged().isSameAs(extractedItem);
return Api.instance().definitions().materials().certusQuartzCrystalCharged().isSameAs(extractedItem);
}
}
}
@@ -35,7 +35,6 @@ import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import appeng.api.AEApi;
import appeng.api.config.CondenserOutput;
import appeng.api.config.Settings;
import appeng.api.definitions.IMaterials;
@@ -51,6 +50,7 @@ import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEStack;
import appeng.api.util.IConfigManager;
import appeng.api.util.IConfigurableObject;
import appeng.core.Api;
import appeng.tile.AEBaseInvBlockEntity;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.util.ConfigManager;
@@ -142,7 +142,7 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi
}
private ItemStack getOutput() {
final IMaterials materials = AEApi.instance().definitions().materials();
final IMaterials materials = Api.instance().definitions().materials();
switch ((CondenserOutput) this.cm.getSetting(Settings.CONDENSER_OUTPUT)) {
case MATTER_BALLS:
@@ -223,7 +223,7 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi
@Override
public FluidVolume attemptInsertion(FluidVolume fluid, Simulation simulation) {
if (simulation == Simulation.ACTION) {
final IStorageChannel<IAEFluidStack> chan = AEApi.instance().storage()
final IStorageChannel<IAEFluidStack> chan = Api.instance().storage()
.getStorageChannel(IFluidStorageChannel.class);
CondenserBlockEntity.this
.addPower((fluid.isEmpty() ? 0.0 : fluid.getAmount_F().asInexactDouble() * 1000.0) / chan.transferFactor());
@@ -260,7 +260,7 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi
@Override
public <T extends IAEStack<T>> IMEMonitor<T> getInventory(IStorageChannel<T> channel) {
if (channel == AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class)) {
if (channel == Api.instance().storage().getStorageChannel(IItemStorageChannel.class)) {
return (IMEMonitor<T>) this.itemInventory;
} else {
return new CondenserVoidInventory<>(CondenserBlockEntity.this, channel);
@@ -26,7 +26,6 @@ import alexiil.mc.lib.attributes.Simulation;
import alexiil.mc.lib.attributes.item.filter.ConstantItemFilter;
import net.minecraft.item.ItemStack;
import appeng.api.AEApi;
import appeng.api.config.AccessRestriction;
import appeng.api.config.Actionable;
import appeng.api.networking.security.IActionSource;
@@ -37,6 +36,7 @@ import appeng.api.storage.IStorageChannel;
import appeng.api.storage.channels.IItemStorageChannel;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.core.Api;
import appeng.me.helpers.BaseActionSource;
import appeng.me.storage.ITickingMonitor;
import appeng.util.item.AEItemStack;
@@ -94,7 +94,7 @@ class CondenserItemInventory implements IMEMonitor<IAEItemStack>, ITickingMonito
@Override
public IStorageChannel<IAEItemStack> getChannel() {
return AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class);
return Api.instance().storage().getStorageChannel(IItemStorageChannel.class);
}
@Override
@@ -36,7 +36,6 @@ import net.minecraft.util.math.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.config.Settings;
@@ -53,6 +52,7 @@ import appeng.api.networking.ticking.TickingRequest;
import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.api.util.IConfigManager;
import appeng.core.Api;
import appeng.core.settings.TickRates;
import appeng.me.GridAccessException;
import appeng.parts.automation.DefinitionUpgradeInventory;
@@ -107,7 +107,7 @@ public class InscriberBlockEntity extends AENetworkPowerBlockEntity
this.getProxy().setIdlePowerUsage(0);
this.settings = new ConfigManager(this);
final ITileDefinition inscriberDefinition = AEApi.instance().definitions().blocks().inscriber();
final ITileDefinition inscriberDefinition = Api.instance().definitions().blocks().inscriber();
this.upgrades = new DefinitionUpgradeInventory(inscriberDefinition, this, this.getUpgradeSlots());
this.sideItemHandler.setMaxStackSize(1, 64);
@@ -432,7 +432,7 @@ public class InscriberBlockEntity extends AENetworkPowerBlockEntity
}
if (inv == InscriberBlockEntity.this.topItemHandler || inv == InscriberBlockEntity.this.bottomItemHandler) {
if (AEApi.instance().definitions().materials().namePress().isSameAs(stack)) {
if (Api.instance().definitions().materials().namePress().isSameAs(stack)) {
return true;
}
return InscriberRecipes.isValidOptionalIngredient(getWorld(), stack);
@@ -3,6 +3,7 @@ package appeng.tile.misc;
import appeng.api.AEApi;
import appeng.api.definitions.IComparableDefinition;
import appeng.api.features.InscriberProcessType;
import appeng.core.Api;
import appeng.core.AppEng;
import appeng.items.materials.MaterialItem;
import appeng.recipes.handlers.InscriberRecipe;
@@ -38,7 +39,7 @@ public final class InscriberRecipes {
public static InscriberRecipe findRecipe(World world, ItemStack input, ItemStack plateA, ItemStack plateB,
boolean supportNamePress) {
if (supportNamePress) {
IComparableDefinition namePress = AEApi.instance().definitions().materials().namePress();
IComparableDefinition namePress = Api.instance().definitions().materials().namePress();
boolean isNameA = namePress.isSameAs(plateA);
boolean isNameB = namePress.isSameAs(plateB);
@@ -38,7 +38,6 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import alexiil.mc.lib.attributes.item.FixedItemInv;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.config.Upgrades;
import appeng.api.networking.IGridNode;
@@ -57,6 +56,7 @@ import appeng.api.util.AEPartLocation;
import appeng.api.util.DimensionalCoord;
import appeng.api.util.IConfigManager;
import appeng.container.implementations.InterfaceContainer;
import appeng.core.Api;
import appeng.helpers.DualityInterface;
import appeng.helpers.IInterfaceHost;
import appeng.helpers.IPriorityHost;
@@ -302,7 +302,7 @@ public class InterfaceBlockEntity extends AENetworkInvBlockEntity
@Override
public ItemStack getItemStackRepresentation() {
return AEApi.instance().definitions().blocks().iface().maybeStack(1).orElse(ItemStack.EMPTY);
return Api.instance().definitions().blocks().iface().maybeStack(1).orElse(ItemStack.EMPTY);
}
@Override
@@ -36,7 +36,6 @@ import net.minecraft.util.math.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import appeng.api.AEApi;
import appeng.api.config.SecurityPermissions;
import appeng.api.config.Settings;
import appeng.api.config.SortDir;
@@ -66,6 +65,7 @@ import appeng.api.util.AEColor;
import appeng.api.util.AEPartLocation;
import appeng.api.util.DimensionalCoord;
import appeng.api.util.IConfigManager;
import appeng.core.Api;
import appeng.helpers.PlayerSecurityWrapper;
import appeng.me.GridAccessException;
import appeng.me.helpers.MEMonitorHandler;
@@ -253,7 +253,7 @@ public class SecurityStationBlockEntity extends AENetworkBlockEntity implements
@Override
public <T extends IAEStack<T>> IMEMonitor<T> getInventory(IStorageChannel<T> channel) {
if (channel == AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class)) {
if (channel == Api.instance().storage().getStorageChannel(IItemStorageChannel.class)) {
return (IMEMonitor<T>) this.securityMonitor;
}
return null;
@@ -286,7 +286,7 @@ public class SecurityStationBlockEntity extends AENetworkBlockEntity implements
@Override
public void readPermissions(final Map<Integer, EnumSet<SecurityPermissions>> playerPerms) {
final IPlayerRegistry pr = AEApi.instance().registries().players();
final IPlayerRegistry pr = Api.instance().registries().players();
// read permissions
for (final IAEItemStack ais : this.inventory.getStoredItems()) {
@@ -27,7 +27,6 @@ import net.minecraft.network.PacketByteBuf;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.util.math.Direction;
import appeng.api.AEApi;
import appeng.api.implementations.IPowerChannelState;
import appeng.api.implementations.tiles.IWirelessAccessPoint;
import appeng.api.networking.GridFlags;
@@ -39,6 +38,7 @@ import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.api.util.DimensionalCoord;
import appeng.core.AEConfig;
import appeng.core.Api;
import appeng.me.GridAccessException;
import appeng.tile.grid.AENetworkInvBlockEntity;
import appeng.tile.inventory.AppEngInternalInventory;
@@ -56,7 +56,7 @@ public class WirelessBlockEntity extends AENetworkInvBlockEntity implements IWir
public WirelessBlockEntity(BlockEntityType<?> tileEntityTypeIn) {
super(tileEntityTypeIn);
this.inv.setFilter(new AEItemDefinitionFilter(AEApi.instance().definitions().materials().wirelessBooster()));
this.inv.setFilter(new AEItemDefinitionFilter(Api.instance().definitions().materials().wirelessBooster()));
this.getProxy().setFlags(GridFlags.REQUIRE_CHANNEL);
this.getProxy().setValidSides(EnumSet.noneOf(Direction.class));
}
@@ -34,7 +34,6 @@ import net.minecraft.util.math.Direction;
import alexiil.mc.lib.attributes.item.impl.EmptyFixedItemInv;
import appeng.api.AEApi;
import appeng.api.definitions.IBlockDefinition;
import appeng.api.networking.GridFlags;
import appeng.api.networking.events.MENetworkEventSubscribe;
@@ -43,6 +42,7 @@ import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.api.util.DimensionalCoord;
import appeng.block.qnb.QnbFormedState;
import appeng.core.Api;
import appeng.me.GridAccessException;
import appeng.me.cluster.IAECluster;
import appeng.me.cluster.IAEMultiBlock;
@@ -128,7 +128,7 @@ public class QuantumBridgeBlockEntity extends AENetworkInvBlockEntity implements
}
private boolean isCenter() {
return AEApi.instance().definitions().blocks().quantumLink().maybeBlock()
return Api.instance().definitions().blocks().quantumLink().maybeBlock()
.map(link -> getCachedState().getBlock() == link).orElse(false);
}
@@ -147,7 +147,7 @@ public class QuantumBridgeBlockEntity extends AENetworkInvBlockEntity implements
public void onReady() {
super.onReady();
final IBlockDefinition quantumRing = AEApi.instance().definitions().blocks().quantumRing();
final IBlockDefinition quantumRing = Api.instance().definitions().blocks().quantumRing();
final Optional<Block> maybeLinkBlock = quantumRing.maybeBlock();
final Optional<ItemStack> maybeLinkStack = quantumRing.maybeStack(1);
@@ -283,6 +283,11 @@ public class QuantumBridgeBlockEntity extends AENetworkInvBlockEntity implements
}
public void breakCluster() {
// Since breaking the cluster will most likely also update the TE's state,
// it's essential that we're not working with outdated block-state information,
// since this particular TE's block might already have been removed (state=air)
updateContainingBlockInfo();
if (this.cluster != null) {
this.cluster.destroy();
}
@@ -52,6 +52,7 @@ import appeng.api.storage.data.IAEStack;
import appeng.api.util.AEColor;
import appeng.api.util.IConfigManager;
import appeng.container.implementations.MEMonitorableContainer;
import appeng.core.Api;
import appeng.fluids.util.AEFluidStack;
import appeng.helpers.IPriorityHost;
import appeng.me.GridAccessException;
@@ -112,6 +113,10 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
private ChestMonitorHandler cellHandler;
private Accessor accessor;
private FluidInsertable fluidInsertable;
// This is only used on the client to display the right cell model without
// synchronizing the entire
// cell's inventory when a chest comes into view.
private Item cellItem = Items.AIR;
public ChestBlockEntity(BlockEntityType<?> tileEntityTypeIn) {
super(tileEntityTypeIn);
@@ -188,11 +193,11 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
final ItemStack is = this.getCell();
if (!is.isEmpty()) {
this.isCached = true;
ICellHandler cellHandler = AEApi.instance().registries().cell().getHandler(is);
ICellHandler cellHandler = Api.instance().registries().cell().getHandler(is);
if (cellHandler != null) {
double power = 1.0;
for (IStorageChannel channel : AEApi.instance().storage().storageChannels()) {
for (IStorageChannel channel : Api.instance().storage().storageChannels()) {
final ICellInventoryHandler<IAEItemStack> newCell = cellHandler.getCellInventory(is, this,
channel);
if (newCell != null) {
@@ -205,7 +210,7 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
this.getProxy().setIdlePowerUsage(power);
this.accessor = new Accessor();
if (this.cellHandler != null && this.cellHandler.getChannel() == AEApi.instance().storage()
if (this.cellHandler != null && this.cellHandler.getChannel() == Api.instance().storage()
.getStorageChannel(IFluidStorageChannel.class)) {
this.fluidInsertable = new FluidHandler();
}
@@ -237,7 +242,7 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
this.updateHandler();
final ItemStack cell = this.getCell();
final ICellHandler ch = AEApi.instance().registries().cell().getHandler(cell);
final ICellHandler ch = Api.instance().registries().cell().getHandler(cell);
if (this.cellHandler != null && ch != null) {
return ch.getStatusForCell(cell, this.cellHandler.getInternalHandler());
@@ -252,6 +257,10 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
if (slot != 0) {
return null;
}
// Client-side we'll need to actually use the synced state
if (world == null || world.isRemote) {
return cellItem;
}
ItemStack cell = getCell();
return cell.isEmpty() ? null : cell.getItem();
}
@@ -343,6 +352,12 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
data.writeByte(this.state);
data.writeByte(this.paintedColor.ordinal());
// Note that we trust that the change detection in recalculateDisplay will trip
// when it changes from
// empty->non-empty, so when the cell is changed, it should re-send the state
// because of that
data.writeRegistryIdUnsafe(ForgeRegistries.ITEMS, getCell().getItem().getRegistryName());
}
@Override
@@ -354,6 +369,7 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
this.state = data.readByte();
final AEColor oldPaintedColor = this.paintedColor;
this.paintedColor = AEColor.values()[data.readByte()];
this.cellItem = data.readRegistryIdUnsafe(ForgeRegistries.ITEMS);
this.lastStateChange = this.world.getTime();
@@ -444,7 +460,7 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
if (!ItemHandlerUtil.isEmpty(this.inputInventory)) {
this.updateHandler();
if (this.cellHandler != null && this.cellHandler.getChannel() == AEApi.instance().storage()
if (this.cellHandler != null && this.cellHandler.getChannel() == Api.instance().storage()
.getStorageChannel(IItemStorageChannel.class)) {
final IAEItemStack returns = Platform.poweredInsert(this, this.cellHandler,
AEItemStack.fromItemStack(this.inputInventory.getInvStack(0)), this.mySrc);
@@ -514,10 +530,10 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
public boolean openGui(final PlayerEntity p) {
this.updateHandler();
if (this.cellHandler != null) {
final ICellHandler ch = AEApi.instance().registries().cell().getHandler(this.getCell());
final ICellHandler ch = Api.instance().registries().cell().getHandler(this.getCell());
if (ch != null) {
final ICellGuiHandler chg = AEApi.instance().registries().cell()
final ICellGuiHandler chg = Api.instance().registries().cell()
.getGuiHandler(this.cellHandler.getChannel(), this.getCell());
if (chg != null) {
chg.openChestGui(p, this, ch, this.cellHandler, this.getCell(), this.cellHandler.getChannel());
@@ -679,7 +695,7 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
private class FluidHandler implements FluidInsertable {
private boolean canAcceptLiquids() {
return ChestBlockEntity.this.cellHandler != null && ChestBlockEntity.this.cellHandler.getChannel() == AEApi
return ChestBlockEntity.this.cellHandler != null && ChestBlockEntity.this.cellHandler.getChannel() == Api
.instance().storage().getStorageChannel(IFluidStorageChannel.class);
}
@@ -729,8 +745,8 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
public boolean allowInsert(FixedItemInv inv, int slot, ItemStack stack) {
if (ChestBlockEntity.this.isPowered()) {
ChestBlockEntity.this.updateHandler();
return ChestBlockEntity.this.cellHandler != null && ChestBlockEntity.this.cellHandler
.getChannel() == AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class);
return ChestBlockEntity.this.cellHandler != null && ChestBlockEntity.this.cellHandler.getChannel() == Api
.instance().storage().getStorageChannel(IItemStorageChannel.class);
}
return false;
}
@@ -745,25 +761,25 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity
@Override
public boolean allowInsert(FixedItemInv inv, int slot, ItemStack stack) {
return AEApi.instance().registries().cell().getHandler(stack) != null;
return Api.instance().registries().cell().getHandler(stack) != null;
}
}
@Override
public ItemStack getItemStackRepresentation() {
return AEApi.instance().definitions().blocks().chest().maybeStack(1).orElse(ItemStack.EMPTY);
return Api.instance().definitions().blocks().chest().maybeStack(1).orElse(ItemStack.EMPTY);
}
@Override
public ScreenHandlerType<?> getContainerType() {
this.updateHandler();
if (this.cellHandler != null) {
if (this.cellHandler.getChannel() == AEApi.instance().storage()
if (this.cellHandler.getChannel() == Api.instance().storage()
.getStorageChannel(IItemStorageChannel.class)) {
return MEMonitorableContainer.TYPE;
}
if (this.cellHandler.getChannel() == AEApi.instance().storage()
if (this.cellHandler.getChannel() == Api.instance().storage()
.getStorageChannel(IFluidStorageChannel.class)) {
throw new IllegalStateException();
// FIXME FABRIC return FluidTerminalContainer.TYPE;
@@ -39,7 +39,6 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;
import appeng.api.AEApi;
import appeng.api.implementations.tiles.IChestOrDrive;
import appeng.api.networking.GridFlags;
import appeng.api.networking.events.MENetworkCellArrayUpdate;
@@ -62,6 +61,7 @@ import appeng.api.util.DimensionalCoord;
import appeng.block.storage.DriveSlotsState;
import appeng.client.render.model.DriveModelData;
import appeng.container.implementations.DriveContainer;
import appeng.core.Api;
import appeng.helpers.IPriorityHost;
import appeng.me.GridAccessException;
import appeng.me.helpers.MachineSource;
@@ -345,7 +345,7 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO
private void updateState() {
if (!this.isCached) {
final Collection<IStorageChannel<? extends IAEStack<?>>> storageChannels = AEApi.instance().storage()
final Collection<IStorageChannel<? extends IAEStack<?>>> storageChannels = Api.instance().storage()
.storageChannels();
storageChannels.forEach(channel -> this.inventoryHandlers.put(channel, new ArrayList<>(10)));
@@ -357,7 +357,7 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO
this.handlersBySlot[x] = null;
if (!is.isEmpty()) {
this.handlersBySlot[x] = AEApi.instance().registries().cell().getHandler(is);
this.handlersBySlot[x] = Api.instance().registries().cell().getHandler(is);
if (this.handlersBySlot[x] != null) {
for (IStorageChannel<? extends IAEStack<?>> channel : storageChannels) {
@@ -435,7 +435,7 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO
@Override
public ItemStack getItemStackRepresentation() {
return AEApi.instance().definitions().blocks().drive().maybeStack(1).orElse(ItemStack.EMPTY);
return Api.instance().definitions().blocks().drive().maybeStack(1).orElse(ItemStack.EMPTY);
}
@Override
@@ -33,7 +33,6 @@ import net.minecraft.util.math.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.config.FullnessMode;
import appeng.api.config.OperationMode;
@@ -58,6 +57,7 @@ import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.api.util.DimensionalCoord;
import appeng.api.util.IConfigManager;
import appeng.core.Api;
import appeng.core.settings.TickRates;
import appeng.me.GridAccessException;
import appeng.me.helpers.MachineSource;
@@ -108,7 +108,7 @@ public class IOPortBlockEntity extends AENetworkInvBlockEntity
this.mySrc = new MachineSource(this);
this.lastRedstoneState = YesNo.UNDECIDED;
final Block ioPortBlock = AEApi.instance().definitions().blocks().iOPort().maybeBlock().get();
final Block ioPortBlock = Api.instance().definitions().blocks().iOPort().maybeBlock().get();
this.upgrades = new BlockUpgradeInventory(ioPortBlock, this, NUMBER_OF_UPGRADE_SLOTS);
}
@@ -267,7 +267,7 @@ public class IOPortBlockEntity extends AENetworkInvBlockEntity
if (!is.isEmpty()) {
boolean shouldMove = true;
for (IStorageChannel<? extends IAEStack<?>> c : AEApi.instance().storage().storageChannels()) {
for (IStorageChannel<? extends IAEStack<?>> c : Api.instance().storage().storageChannels()) {
if (itemsToMove > 0) {
final IMEMonitor<? extends IAEStack<?>> network = this.getProxy().getStorage()
.getInventory(c);
@@ -318,8 +318,8 @@ public class IOPortBlockEntity extends AENetworkInvBlockEntity
this.currentCell = is;
this.cachedInventories = new IdentityHashMap<>();
for (IStorageChannel<? extends IAEStack<?>> c : AEApi.instance().storage().storageChannels()) {
this.cachedInventories.put(c, AEApi.instance().registries().cell().getCellInventory(is, null, c));
for (IStorageChannel<? extends IAEStack<?>> c : Api.instance().storage().storageChannels()) {
this.cachedInventories.put(c, Api.instance().registries().cell().getCellInventory(is, null, c));
}
}