diff --git a/build.gradle b/build.gradle index 093858b65..ae99852c8 100644 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,7 @@ repositories { sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8 compileJava { sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8 + options.deprecation = false } // ensure everything uses UTF-8 and not some random codepage chosen by gradle diff --git a/src/api/java/appeng/api/movable/IMovableRegistry.java b/src/api/java/appeng/api/movable/IMovableRegistry.java index 0fde2a05e..f6acdb70a 100644 --- a/src/api/java/appeng/api/movable/IMovableRegistry.java +++ b/src/api/java/appeng/api/movable/IMovableRegistry.java @@ -72,7 +72,7 @@ public interface IMovableRegistry { * If you tile is handled with IMovableHandler or IMovableTile you do not need * to white list it. */ - void whiteListTileEntity(Class c); + void whiteListBlockEntity(Class c); /** * @param te to be moved block entity diff --git a/src/main/java/appeng/attributes/MEAttributes.java b/src/main/java/appeng/attributes/MEAttributes.java new file mode 100644 index 000000000..91e86d961 --- /dev/null +++ b/src/main/java/appeng/attributes/MEAttributes.java @@ -0,0 +1,66 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.attributes; + +import alexiil.mc.lib.attributes.Attribute; +import alexiil.mc.lib.attributes.Attributes; +import alexiil.mc.lib.attributes.SearchOptions; +import appeng.api.storage.IStorageMonitorableAccessor; +import appeng.parts.AEBasePart; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; + +/** + * Utility class that holds various attributes, both by AE2 and other Mods. + */ +public final class MEAttributes { + + private MEAttributes() { + } + + public static Attribute STORAGE_MONITORABLE_ACCESSOR + = Attributes.createDefaulted(IStorageMonitorableAccessor.class, new NullMENetworkAccessor()); + + public static T getFirstAttributeOnSide(Attribute attribute, BlockEntity be, Direction side) { + World world = be.getWorld(); + if (world == null) { + return null; + } + + return attribute.getFirstOrNull(world, be.getPos().offset(side), SearchOptions.inDirection(side.getOpposite())); + } + + // Convenience function to get an attribute of the block that is in front of a part + public static T getAttributeInFrontOfPart(Attribute attribute, AEBasePart part) { + BlockEntity self = part.getHost().getTile(); + Direction direction = part.getSide().getFacing(); + final World w = self.getWorld(); + BlockPos neighborPos = self.getPos().offset(direction); + // Do not force-load a neighboring chunk for this. + ChunkPos chunkPos = new ChunkPos(neighborPos); + if (!w.getChunkManager().isChunkLoaded(chunkPos.x, chunkPos.z)) { + return null; + } + return attribute.getFirstOrNull(w, neighborPos, SearchOptions.inDirection(direction)); + } + +} diff --git a/src/unported/java/appeng/capabilities/NullMENetworkAccessor.java b/src/main/java/appeng/attributes/NullMENetworkAccessor.java similarity index 97% rename from src/unported/java/appeng/capabilities/NullMENetworkAccessor.java rename to src/main/java/appeng/attributes/NullMENetworkAccessor.java index bc8488410..def69006d 100644 --- a/src/unported/java/appeng/capabilities/NullMENetworkAccessor.java +++ b/src/main/java/appeng/attributes/NullMENetworkAccessor.java @@ -16,7 +16,7 @@ * along with Applied Energistics 2. If not, see . */ -package appeng.capabilities; +package appeng.attributes; import appeng.api.networking.security.IActionSource; import appeng.api.storage.IStorageMonitorable; diff --git a/src/unported/java/appeng/block/crafting/AbstractCraftingUnitBlock.java b/src/main/java/appeng/block/crafting/AbstractCraftingUnitBlock.java similarity index 100% rename from src/unported/java/appeng/block/crafting/AbstractCraftingUnitBlock.java rename to src/main/java/appeng/block/crafting/AbstractCraftingUnitBlock.java diff --git a/src/unported/java/appeng/block/crafting/CraftingMonitorBlock.java b/src/main/java/appeng/block/crafting/CraftingMonitorBlock.java similarity index 100% rename from src/unported/java/appeng/block/crafting/CraftingMonitorBlock.java rename to src/main/java/appeng/block/crafting/CraftingMonitorBlock.java diff --git a/src/unported/java/appeng/block/crafting/CraftingStorageBlock.java b/src/main/java/appeng/block/crafting/CraftingStorageBlock.java similarity index 100% rename from src/unported/java/appeng/block/crafting/CraftingStorageBlock.java rename to src/main/java/appeng/block/crafting/CraftingStorageBlock.java diff --git a/src/unported/java/appeng/block/crafting/CraftingStorageItem.java b/src/main/java/appeng/block/crafting/CraftingStorageItem.java similarity index 69% rename from src/unported/java/appeng/block/crafting/CraftingStorageItem.java rename to src/main/java/appeng/block/crafting/CraftingStorageItem.java index d826dbf6b..71332c23d 100644 --- a/src/unported/java/appeng/block/crafting/CraftingStorageItem.java +++ b/src/main/java/appeng/block/crafting/CraftingStorageItem.java @@ -19,6 +19,7 @@ package appeng.block.crafting; import net.minecraft.block.Block; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import appeng.api.AEApi; @@ -32,13 +33,14 @@ public class CraftingStorageItem extends AEBaseBlockItem { super(id, props); } - @Override - public ItemStack getRecipeRemainder(final ItemStack itemStack) { - return AEApi.instance().definitions().blocks().craftingUnit().maybeStack(1).orElse(ItemStack.EMPTY); - } - - @Override - public boolean hasRecipeRemainder(final ItemStack stack) { - return AEConfig.instance().isFeatureEnabled(AEFeature.ENABLE_DISASSEMBLY_CRAFTING); - } +// FIXME FABRIC needs to move to disassembly crafting recipes +// FIXME FABRIC @Override +// FIXME FABRIC public Item getRecipeRemainder() { +// FIXME FABRIC return AEApi.instance().definitions().blocks().craftingUnit().item(); +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC @Override +// FIXME FABRIC public boolean hasRecipeRemainder() { +// FIXME FABRIC return AEConfig.instance().isFeatureEnabled(AEFeature.ENABLE_DISASSEMBLY_CRAFTING); +// FIXME FABRIC } } diff --git a/src/unported/java/appeng/block/crafting/CraftingUnitBlock.java b/src/main/java/appeng/block/crafting/CraftingUnitBlock.java similarity index 100% rename from src/unported/java/appeng/block/crafting/CraftingUnitBlock.java rename to src/main/java/appeng/block/crafting/CraftingUnitBlock.java diff --git a/src/unported/java/appeng/block/crafting/MolecularAssemblerBlock.java b/src/main/java/appeng/block/crafting/MolecularAssemblerBlock.java similarity index 100% rename from src/unported/java/appeng/block/crafting/MolecularAssemblerBlock.java rename to src/main/java/appeng/block/crafting/MolecularAssemblerBlock.java diff --git a/src/unported/java/appeng/block/grindstone/CrankBlock.java b/src/main/java/appeng/block/grindstone/CrankBlock.java similarity index 98% rename from src/unported/java/appeng/block/grindstone/CrankBlock.java rename to src/main/java/appeng/block/grindstone/CrankBlock.java index fc1a6ba85..df548af8e 100644 --- a/src/unported/java/appeng/block/grindstone/CrankBlock.java +++ b/src/main/java/appeng/block/grindstone/CrankBlock.java @@ -20,6 +20,7 @@ package appeng.block.grindstone; import javax.annotation.Nullable; +import appeng.util.FakePlayer; import net.minecraft.block.Block; import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; @@ -40,7 +41,6 @@ import net.minecraft.world.BlockView; import net.minecraft.world.WorldAccess; import net.minecraft.world.WorldView; import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; import appeng.api.implementations.tiles.ICrankable; import appeng.block.AEBaseTileBlock; @@ -57,7 +57,7 @@ public class CrankBlock extends AEBaseTileBlock { @Override public ActionResult onActivated(final World w, final BlockPos pos, final PlayerEntity player, final Hand hand, final @Nullable ItemStack heldItem, final BlockHitResult hit) { - if (player instanceof FakePlayer || player == null) { + if (FakePlayer.isFakePlayer(player) || player == null) { this.dropCrank(w, pos); return ActionResult.SUCCESS; } diff --git a/src/unported/java/appeng/block/grindstone/GrinderBlock.java b/src/main/java/appeng/block/grindstone/GrinderBlock.java similarity index 100% rename from src/unported/java/appeng/block/grindstone/GrinderBlock.java rename to src/main/java/appeng/block/grindstone/GrinderBlock.java diff --git a/src/unported/java/appeng/block/misc/CellWorkbenchBlock.java b/src/main/java/appeng/block/misc/CellWorkbenchBlock.java similarity index 100% rename from src/unported/java/appeng/block/misc/CellWorkbenchBlock.java rename to src/main/java/appeng/block/misc/CellWorkbenchBlock.java diff --git a/src/unported/java/appeng/block/misc/ChargerBlock.java b/src/main/java/appeng/block/misc/ChargerBlock.java similarity index 98% rename from src/unported/java/appeng/block/misc/ChargerBlock.java rename to src/main/java/appeng/block/misc/ChargerBlock.java index 02079bb9b..92eaae571 100644 --- a/src/unported/java/appeng/block/misc/ChargerBlock.java +++ b/src/main/java/appeng/block/misc/ChargerBlock.java @@ -64,7 +64,7 @@ import appeng.util.Platform; public class ChargerBlock extends AEBaseTileBlock { public ChargerBlock() { - super(defaultProps(Material.METAL).solidBlock(false)); + super(defaultProps(Material.METAL).solidBlock((state, world, pos) -> false)); } @Override diff --git a/src/unported/java/appeng/block/misc/CondenserBlock.java b/src/main/java/appeng/block/misc/CondenserBlock.java similarity index 100% rename from src/unported/java/appeng/block/misc/CondenserBlock.java rename to src/main/java/appeng/block/misc/CondenserBlock.java diff --git a/src/unported/java/appeng/block/misc/InscriberBlock.java b/src/main/java/appeng/block/misc/InscriberBlock.java similarity index 100% rename from src/unported/java/appeng/block/misc/InscriberBlock.java rename to src/main/java/appeng/block/misc/InscriberBlock.java diff --git a/src/unported/java/appeng/block/misc/InscriberRendering.java b/src/main/java/appeng/block/misc/InscriberRendering.java similarity index 100% rename from src/unported/java/appeng/block/misc/InscriberRendering.java rename to src/main/java/appeng/block/misc/InscriberRendering.java diff --git a/src/unported/java/appeng/block/misc/InterfaceBlock.java b/src/main/java/appeng/block/misc/InterfaceBlock.java similarity index 100% rename from src/unported/java/appeng/block/misc/InterfaceBlock.java rename to src/main/java/appeng/block/misc/InterfaceBlock.java diff --git a/src/unported/java/appeng/block/misc/QuartzGrowthAcceleratorBlock.java b/src/main/java/appeng/block/misc/QuartzGrowthAcceleratorBlock.java similarity index 100% rename from src/unported/java/appeng/block/misc/QuartzGrowthAcceleratorBlock.java rename to src/main/java/appeng/block/misc/QuartzGrowthAcceleratorBlock.java diff --git a/src/unported/java/appeng/block/misc/SecurityStationBlock.java b/src/main/java/appeng/block/misc/SecurityStationBlock.java similarity index 100% rename from src/unported/java/appeng/block/misc/SecurityStationBlock.java rename to src/main/java/appeng/block/misc/SecurityStationBlock.java diff --git a/src/unported/java/appeng/block/misc/SecurityStationRendering.java b/src/main/java/appeng/block/misc/SecurityStationRendering.java similarity index 100% rename from src/unported/java/appeng/block/misc/SecurityStationRendering.java rename to src/main/java/appeng/block/misc/SecurityStationRendering.java diff --git a/src/unported/java/appeng/block/misc/VibrationChamberBlock.java b/src/main/java/appeng/block/misc/VibrationChamberBlock.java similarity index 100% rename from src/unported/java/appeng/block/misc/VibrationChamberBlock.java rename to src/main/java/appeng/block/misc/VibrationChamberBlock.java diff --git a/src/main/java/appeng/block/networking/CableBusBlock.java b/src/main/java/appeng/block/networking/CableBusBlock.java index 7e57b54ae..ab2c8ea22 100644 --- a/src/main/java/appeng/block/networking/CableBusBlock.java +++ b/src/main/java/appeng/block/networking/CableBusBlock.java @@ -158,8 +158,8 @@ public class CableBusBlock extends AEBaseTileBlock implemen // FIXME FABRIC Hook does not exist // FIXME FABRIC @Override // FIXME FABRIC public boolean removedByPlayer(BlockState state, World world, BlockPos pos, PlayerEntity player, -// FIXME FABRIC boolean willHarvest, IFluidState fluid) { -// FIXME FABRIC if (player.abilities.isCreativeMode) { +// FIXME FABRIC boolean willHarvest, FluidState fluid) { +// FIXME FABRIC if (player.isCreative()) { // FIXME FABRIC final AEBaseBlockEntity tile = this.getBlockEntity(world, pos); // FIXME FABRIC if (tile != null) { // FIXME FABRIC tile.disableDrops(); diff --git a/src/unported/java/appeng/block/networking/ControllerBlock.java b/src/main/java/appeng/block/networking/ControllerBlock.java similarity index 100% rename from src/unported/java/appeng/block/networking/ControllerBlock.java rename to src/main/java/appeng/block/networking/ControllerBlock.java index 8b15133e3..b410bea35 100644 --- a/src/unported/java/appeng/block/networking/ControllerBlock.java +++ b/src/main/java/appeng/block/networking/ControllerBlock.java @@ -18,6 +18,7 @@ package appeng.block.networking; +import appeng.tile.networking.ControllerBlockEntity; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Material; @@ -30,7 +31,6 @@ import net.minecraft.world.WorldAccess; import net.minecraft.world.World; import appeng.block.AEBaseTileBlock; -import appeng.tile.networking.ControllerBlockEntity; public class ControllerBlock extends AEBaseTileBlock { diff --git a/src/unported/java/appeng/block/networking/ControllerRendering.java b/src/main/java/appeng/block/networking/ControllerRendering.java similarity index 100% rename from src/unported/java/appeng/block/networking/ControllerRendering.java rename to src/main/java/appeng/block/networking/ControllerRendering.java diff --git a/src/unported/java/appeng/block/networking/CreativeEnergyCellBlock.java b/src/main/java/appeng/block/networking/CreativeEnergyCellBlock.java similarity index 100% rename from src/unported/java/appeng/block/networking/CreativeEnergyCellBlock.java rename to src/main/java/appeng/block/networking/CreativeEnergyCellBlock.java diff --git a/src/unported/java/appeng/block/networking/DenseEnergyCellBlock.java b/src/main/java/appeng/block/networking/DenseEnergyCellBlock.java similarity index 100% rename from src/unported/java/appeng/block/networking/DenseEnergyCellBlock.java rename to src/main/java/appeng/block/networking/DenseEnergyCellBlock.java diff --git a/src/unported/java/appeng/block/networking/EnergyAcceptorBlock.java b/src/main/java/appeng/block/networking/EnergyAcceptorBlock.java similarity index 100% rename from src/unported/java/appeng/block/networking/EnergyAcceptorBlock.java rename to src/main/java/appeng/block/networking/EnergyAcceptorBlock.java diff --git a/src/unported/java/appeng/block/networking/EnergyCellBlock.java b/src/main/java/appeng/block/networking/EnergyCellBlock.java similarity index 83% rename from src/unported/java/appeng/block/networking/EnergyCellBlock.java rename to src/main/java/appeng/block/networking/EnergyCellBlock.java index dbd54101d..e6debbcb3 100644 --- a/src/unported/java/appeng/block/networking/EnergyCellBlock.java +++ b/src/main/java/appeng/block/networking/EnergyCellBlock.java @@ -18,15 +18,13 @@ package appeng.block.networking; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; -import net.minecraft.state.IntegerProperty; import net.minecraft.state.StateManager; +import net.minecraft.state.property.IntProperty; import net.minecraft.util.collection.DefaultedList; import appeng.block.AEBaseTileBlock; @@ -35,16 +33,15 @@ import appeng.tile.networking.EnergyCellBlockEntity; public class EnergyCellBlock extends AEBaseTileBlock { - public static final IntegerProperty ENERGY_STORAGE = IntegerProperty.create("fullness", 0, 7); + public static final IntProperty ENERGY_STORAGE = IntProperty.of("fullness", 0, 7); public EnergyCellBlock() { super(defaultProps(AEMaterials.GLASS)); } @Override - @Environment(EnvType.CLIENT) - public void appendStacks(ItemGroup group, DefaultedList itemStacks) { - super.appendStacks(group, itemStacks); + public void addStacksForDisplay(ItemGroup group, DefaultedList itemStacks) { + super.addStacksForDisplay(group, itemStacks); final ItemStack charged = new ItemStack(this, 1); final CompoundTag tag = charged.getOrCreateTag(); diff --git a/src/unported/java/appeng/block/networking/WirelessBlock.java b/src/main/java/appeng/block/networking/WirelessBlock.java similarity index 100% rename from src/unported/java/appeng/block/networking/WirelessBlock.java rename to src/main/java/appeng/block/networking/WirelessBlock.java diff --git a/src/unported/java/appeng/block/networking/WirelessRendering.java b/src/main/java/appeng/block/networking/WirelessRendering.java similarity index 100% rename from src/unported/java/appeng/block/networking/WirelessRendering.java rename to src/main/java/appeng/block/networking/WirelessRendering.java diff --git a/src/unported/java/appeng/block/paint/PaintSplotches.java b/src/main/java/appeng/block/paint/PaintSplotches.java similarity index 100% rename from src/unported/java/appeng/block/paint/PaintSplotches.java rename to src/main/java/appeng/block/paint/PaintSplotches.java diff --git a/src/unported/java/appeng/block/paint/PaintSplotchesBakedModel.java b/src/main/java/appeng/block/paint/PaintSplotchesBakedModel.java similarity index 77% rename from src/unported/java/appeng/block/paint/PaintSplotchesBakedModel.java rename to src/main/java/appeng/block/paint/PaintSplotchesBakedModel.java index bfaede0fd..650f05b69 100644 --- a/src/unported/java/appeng/block/paint/PaintSplotchesBakedModel.java +++ b/src/main/java/appeng/block/paint/PaintSplotchesBakedModel.java @@ -1,39 +1,40 @@ package appeng.block.paint; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import com.google.common.collect.ImmutableList; - -import net.minecraft.block.BlockState; -import net.minecraft.client.render.model.BakedQuad; -import net.minecraft.client.render.model.json.ModelOverrideList; -import net.minecraft.client.util.SpriteIdentifier; -import net.minecraft.client.texture.SpriteAtlasTexture; -import net.minecraft.client.texture.Sprite; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.Direction; -import net.minecraftforge.client.model.data.IDynamicBakedModel; - - import appeng.client.render.cablebus.CubeBuilder; import appeng.core.AppEng; import appeng.helpers.Splotch; -import appeng.tile.misc.PaintSplotchesBlockEntity; +import com.google.common.collect.ImmutableList; +import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel; +import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; +import net.fabricmc.fabric.api.rendering.data.v1.RenderAttachedBlockView; +import net.minecraft.block.BlockState; +import net.minecraft.client.render.model.BakedModel; +import net.minecraft.client.render.model.BakedQuad; +import net.minecraft.client.render.model.json.ModelOverrideList; +import net.minecraft.client.render.model.json.ModelTransformation; +import net.minecraft.client.texture.Sprite; +import net.minecraft.client.texture.SpriteAtlasTexture; +import net.minecraft.client.util.SpriteIdentifier; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.BlockRenderView; + +import javax.annotation.Nullable; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.function.Function; +import java.util.function.Supplier; /** * Renders paint blocks, which render multiple "splotches" that have been * applied to the sides of adjacent blocks using a matter cannon with paint * balls. */ -class PaintSplotchesBakedModel implements IDynamicBakedModel { +class PaintSplotchesBakedModel implements BakedModel, FabricBakedModel { private static final SpriteIdentifier TEXTURE_PAINT1 = new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/paint1")); @@ -49,30 +50,23 @@ class PaintSplotchesBakedModel implements IDynamicBakedModel { bakedTextureGetter.apply(TEXTURE_PAINT2), bakedTextureGetter.apply(TEXTURE_PAINT3) }; } - @Nonnull @Override - public List getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, - @Nonnull IModelData extraData) { + public boolean isVanillaAdapter() { + return false; + } - if (side != null) { - return Collections.emptyList(); - } - - PaintSplotches splotchesState = extraData.getData(PaintSplotchesBlockEntity.SPLOTCHES); - - if (splotchesState == null) { - // This is the inventory model which should usually not be used other than in - // special cases - List quads = new ArrayList<>(1); - CubeBuilder builder = new CubeBuilder(quads); - builder.setTexture(this.textures[0]); - builder.addCube(0, 0, 0, 16, 16, 16); - return quads; + @Override + public void emitBlockQuads(BlockRenderView blockView, BlockState state, BlockPos pos, Supplier randomSupplier, RenderContext context) { + + Object renderAttachment = ((RenderAttachedBlockView) blockView).getBlockEntityRenderAttachment(pos); + if (!(renderAttachment instanceof PaintSplotches)) { + return; } + PaintSplotches splotchesState = (PaintSplotches) renderAttachment; List splotches = splotchesState.getSplotches(); - CubeBuilder builder = new CubeBuilder(); + CubeBuilder builder = new CubeBuilder(context.getEmitter()); float offsetConstant = 0.001f; for (final Splotch s : splotches) { @@ -137,8 +131,15 @@ class PaintSplotchesBakedModel implements IDynamicBakedModel { default: } } + } - return builder.getOutput(); + @Override + public void emitItemQuads(ItemStack stack, Supplier randomSupplier, RenderContext context) { + } + + @Override + public List getQuads(@Nullable BlockState state, @Nullable Direction face, Random random) { + return Collections.emptyList(); } @Override @@ -161,6 +162,11 @@ class PaintSplotchesBakedModel implements IDynamicBakedModel { return this.textures[0]; } + @Override + public ModelTransformation getTransformation() { + return null; + } + @Override public ModelOverrideList getOverrides() { return ModelOverrideList.EMPTY; @@ -174,4 +180,5 @@ class PaintSplotchesBakedModel implements IDynamicBakedModel { static List getRequiredTextures() { return ImmutableList.of(TEXTURE_PAINT1, TEXTURE_PAINT2, TEXTURE_PAINT3); } + } diff --git a/src/unported/java/appeng/block/paint/PaintSplotchesBlock.java b/src/main/java/appeng/block/paint/PaintSplotchesBlock.java similarity index 73% rename from src/unported/java/appeng/block/paint/PaintSplotchesBlock.java rename to src/main/java/appeng/block/paint/PaintSplotchesBlock.java index f03a32fce..10606289c 100644 --- a/src/unported/java/appeng/block/paint/PaintSplotchesBlock.java +++ b/src/main/java/appeng/block/paint/PaintSplotchesBlock.java @@ -42,13 +42,12 @@ import appeng.util.Platform; public class PaintSplotchesBlock extends AEBaseTileBlock { public PaintSplotchesBlock() { - super(defaultProps(Material.WATER, MaterialColor.CLEAR).notSolid()); + super(defaultProps(Material.WATER, MaterialColor.CLEAR).solidBlock((state, world, pos) -> false) + .air()); } @Override - @Environment(EnvType.CLIENT) - public void appendStacks(ItemGroup group, DefaultedList itemStacks) { - // do nothing + public void addStacksForDisplay(ItemGroup group, DefaultedList list) { } @Override @@ -67,35 +66,26 @@ public class PaintSplotchesBlock extends AEBaseTileBlock textureGetter, ModelBakeSettings rotationContainer, Identifier modelId) { + return new PaintSplotchesBakedModel(textureGetter); + } + + @Override + public Collection getTextureDependencies(Function unbakedModelGetter, Set> unresolvedTextureReferences) { + return PaintSplotchesBakedModel.getRequiredTextures(); + } + + @Override + public Collection getModelDependencies() { + return Collections.emptyList(); + } +} diff --git a/src/unported/java/appeng/block/paint/PaintSplotchesRendering.java b/src/main/java/appeng/block/paint/PaintSplotchesRendering.java similarity index 100% rename from src/unported/java/appeng/block/paint/PaintSplotchesRendering.java rename to src/main/java/appeng/block/paint/PaintSplotchesRendering.java diff --git a/src/unported/java/appeng/block/qnb/QnbFormedState.java b/src/main/java/appeng/block/qnb/QnbFormedState.java similarity index 100% rename from src/unported/java/appeng/block/qnb/QnbFormedState.java rename to src/main/java/appeng/block/qnb/QnbFormedState.java diff --git a/src/unported/java/appeng/block/qnb/QuantumBaseBlock.java b/src/main/java/appeng/block/qnb/QuantumBaseBlock.java similarity index 100% rename from src/unported/java/appeng/block/qnb/QuantumBaseBlock.java rename to src/main/java/appeng/block/qnb/QuantumBaseBlock.java diff --git a/src/unported/java/appeng/block/qnb/QuantumBridgeRendering.java b/src/main/java/appeng/block/qnb/QuantumBridgeRendering.java similarity index 100% rename from src/unported/java/appeng/block/qnb/QuantumBridgeRendering.java rename to src/main/java/appeng/block/qnb/QuantumBridgeRendering.java diff --git a/src/unported/java/appeng/block/qnb/QuantumLinkChamberBlock.java b/src/main/java/appeng/block/qnb/QuantumLinkChamberBlock.java similarity index 100% rename from src/unported/java/appeng/block/qnb/QuantumLinkChamberBlock.java rename to src/main/java/appeng/block/qnb/QuantumLinkChamberBlock.java diff --git a/src/unported/java/appeng/block/qnb/QuantumRingBlock.java b/src/main/java/appeng/block/qnb/QuantumRingBlock.java similarity index 100% rename from src/unported/java/appeng/block/qnb/QuantumRingBlock.java rename to src/main/java/appeng/block/qnb/QuantumRingBlock.java diff --git a/src/unported/java/appeng/block/spatial/MatrixFrameBlock.java b/src/main/java/appeng/block/spatial/MatrixFrameBlock.java similarity index 71% rename from src/unported/java/appeng/block/spatial/MatrixFrameBlock.java rename to src/main/java/appeng/block/spatial/MatrixFrameBlock.java index c27deb176..a012e4aa5 100644 --- a/src/unported/java/appeng/block/spatial/MatrixFrameBlock.java +++ b/src/main/java/appeng/block/spatial/MatrixFrameBlock.java @@ -18,27 +18,19 @@ package appeng.block.spatial; -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockRenderType; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.MaterialColor; +import appeng.block.AEBaseBlock; +import net.minecraft.block.*; import net.minecraft.block.piston.PistonBehavior; -import net.minecraft.entity.Entity; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; -import net.minecraft.block.ShapeContext; import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.explosion.Explosion; import net.minecraft.world.BlockView; -import net.minecraft.world.WorldView; import net.minecraft.world.World; -import net.fabricmc.api.EnvType; - -import appeng.block.AEBaseBlock; +import net.minecraft.world.WorldView; +import net.minecraft.world.explosion.Explosion; /** * This block is used to fill empty space in spatial dimensions and delinates @@ -46,11 +38,10 @@ import appeng.block.AEBaseBlock; */ public class MatrixFrameBlock extends AEBaseBlock { - private static final Material MATERIAL = new Material(MaterialColor.CLEAR, false, true, true, false, false, false, - false, PistonBehavior.PUSH_ONLY); + private static final Material MATERIAL = new Material(MaterialColor.CLEAR, false, true, true, false, false, false, PistonBehavior.PUSH_ONLY); public MatrixFrameBlock() { - super(Settings.create(MATERIAL).strength(-1.0F, 6000000.0F).notSolid().noDrops()); + super(Settings.of(MATERIAL).strength(-1.0F, 6000000.0F).solidBlock((state, world, pos) -> false).dropsNothing()); } @Override @@ -59,8 +50,7 @@ public class MatrixFrameBlock extends AEBaseBlock { } @Override - @Environment(EnvType.CLIENT) - public void appendStacks(ItemGroup group, DefaultedList itemStacks) { + public void addStacksForDisplay(ItemGroup group, DefaultedList list) { // do nothing } @@ -82,8 +72,8 @@ public class MatrixFrameBlock extends AEBaseBlock { } @Override - public void onExplosionDestroy(final World world, final BlockPos pos, final Explosion explosion) { - // Don't explode. + public void onDestroyedByExplosion(World world, BlockPos pos, Explosion explosion) { + world.setBlockState(pos, getDefaultState(), 3); } @Override @@ -92,13 +82,8 @@ public class MatrixFrameBlock extends AEBaseBlock { } @Override - public float getAmbientOcclusionLightValue(BlockState state, BlockView worldIn, BlockPos pos) { + public float getAmbientOcclusionLightLevel(BlockState state, BlockView world, BlockPos pos) { return 1.0f; } - @Override - public boolean canEntityDestroy(final BlockState state, final BlockView world, final BlockPos pos, - final Entity entity) { - return false; - } } diff --git a/src/unported/java/appeng/block/spatial/SpatialIOPortBlock.java b/src/main/java/appeng/block/spatial/SpatialIOPortBlock.java similarity index 100% rename from src/unported/java/appeng/block/spatial/SpatialIOPortBlock.java rename to src/main/java/appeng/block/spatial/SpatialIOPortBlock.java diff --git a/src/unported/java/appeng/block/spatial/SpatialPylonBlock.java b/src/main/java/appeng/block/spatial/SpatialPylonBlock.java similarity index 76% rename from src/unported/java/appeng/block/spatial/SpatialPylonBlock.java rename to src/main/java/appeng/block/spatial/SpatialPylonBlock.java index d5053007b..a95ca963c 100644 --- a/src/unported/java/appeng/block/spatial/SpatialPylonBlock.java +++ b/src/main/java/appeng/block/spatial/SpatialPylonBlock.java @@ -43,13 +43,14 @@ public class SpatialPylonBlock extends AEBaseTileBlock } } - @Override - public int getLightValue(final BlockState state, final BlockView w, final BlockPos pos) { - final SpatialPylonBlockEntity tsp = this.getBlockEntity(w, pos); - if (tsp != null) { - return tsp.getLightValue(); - } - return super.getLightValue(state, w, pos); - } +// FIXME FABRIC Must use block states for dynamic lighting +// FIXME FABRIC @Override +// FIXME FABRIC public int getLightValue(final BlockState state, final BlockView w, final BlockPos pos) { +// FIXME FABRIC final SpatialPylonBlockEntity tsp = this.getBlockEntity(w, pos); +// FIXME FABRIC if (tsp != null) { +// FIXME FABRIC return tsp.getLightValue(); +// FIXME FABRIC } +// FIXME FABRIC return super.getLightValue(state, w, pos); +// FIXME FABRIC } } diff --git a/src/main/java/appeng/block/storage/ChestBlock.java b/src/main/java/appeng/block/storage/ChestBlock.java index e5d2f3e39..a76086c43 100644 --- a/src/main/java/appeng/block/storage/ChestBlock.java +++ b/src/main/java/appeng/block/storage/ChestBlock.java @@ -20,6 +20,9 @@ package appeng.block.storage; import javax.annotation.Nullable; +import appeng.container.ContainerLocator; +import appeng.container.ContainerOpener; +import appeng.container.implementations.ChestContainer; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Material; @@ -83,8 +86,8 @@ public class ChestBlock extends AEBaseTileBlock { p.sendSystemMessage(PlayerMessages.ChestCannotReadStorageCell.get(), Util.NIL_UUID); } } else { - // FIXME FABRIC ContainerOpener.openContainer(ChestContainer.TYPE, p, - // FIXME FABRIC ContainerLocator.forTileEntitySide(tg, hit.getSide())); + ContainerOpener.openContainer(ChestContainer.TYPE, p, + ContainerLocator.forTileEntitySide(tg, hit.getSide())); throw new IllegalStateException(); } diff --git a/src/unported/java/appeng/block/storage/DriveBlock.java b/src/main/java/appeng/block/storage/DriveBlock.java similarity index 100% rename from src/unported/java/appeng/block/storage/DriveBlock.java rename to src/main/java/appeng/block/storage/DriveBlock.java diff --git a/src/unported/java/appeng/block/storage/DriveRendering.java b/src/main/java/appeng/block/storage/DriveRendering.java similarity index 100% rename from src/unported/java/appeng/block/storage/DriveRendering.java rename to src/main/java/appeng/block/storage/DriveRendering.java diff --git a/src/unported/java/appeng/block/storage/DriveSlotCellType.java b/src/main/java/appeng/block/storage/DriveSlotCellType.java similarity index 100% rename from src/unported/java/appeng/block/storage/DriveSlotCellType.java rename to src/main/java/appeng/block/storage/DriveSlotCellType.java diff --git a/src/unported/java/appeng/block/storage/DriveSlotsState.java b/src/main/java/appeng/block/storage/DriveSlotsState.java similarity index 100% rename from src/unported/java/appeng/block/storage/DriveSlotsState.java rename to src/main/java/appeng/block/storage/DriveSlotsState.java diff --git a/src/unported/java/appeng/block/storage/IOPortBlock.java b/src/main/java/appeng/block/storage/IOPortBlock.java similarity index 100% rename from src/unported/java/appeng/block/storage/IOPortBlock.java rename to src/main/java/appeng/block/storage/IOPortBlock.java diff --git a/src/main/java/appeng/client/AppEngClient.java b/src/main/java/appeng/client/AppEngClient.java index 9fdfea53e..b61b6d9b6 100644 --- a/src/main/java/appeng/client/AppEngClient.java +++ b/src/main/java/appeng/client/AppEngClient.java @@ -6,9 +6,12 @@ import appeng.bootstrap.components.IClientSetupComponent; import appeng.bootstrap.components.IItemColorRegistrationComponent; import appeng.bootstrap.components.IModelBakeComponent; import appeng.bootstrap.components.ITileEntityRegistrationComponent; +import appeng.client.gui.implementations.*; import appeng.client.render.cablebus.CableBusModelLoader; import appeng.client.render.effects.*; +import appeng.client.render.tesr.InscriberTESR; import appeng.client.render.tesr.SkyChestTESR; +import appeng.container.implementations.*; import appeng.core.Api; import appeng.core.ApiDefinitions; import appeng.core.AppEng; @@ -24,9 +27,12 @@ import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; +import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; import net.fabricmc.fabric.api.event.client.ClientSpriteRegistryCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.options.KeyBinding; import net.minecraft.client.render.entity.ItemEntityRenderer; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.util.InputUtil; @@ -39,10 +45,7 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.world.World; import javax.annotation.Nonnull; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Random; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -55,6 +58,8 @@ public final class AppEngClient extends AppEngBase { private final ClientTickHandler tickHandler; + private final EnumMap bindings = new EnumMap<>(ActionKey.class); + public static AppEngClient instance() { return (AppEngClient) AppEng.instance(); } @@ -75,6 +80,7 @@ public final class AppEngClient extends AppEngBase { registerEntityRenderers(); registerItemColors(); registerTextures(); + registerScreens(); // On the client, we'll register for server startup/shutdown to properly setup WorldData // each time the integrated server starts&stops @@ -153,8 +159,8 @@ public final class AppEngClient extends AppEngBase { } @Override - public boolean isActionKey(@Nonnull ActionKey key, InputUtil.Key input) { - return false; + public boolean isActionKey(@Nonnull ActionKey key, int keyCode, int scanCode) { + return this.bindings.get(key).matchesKey(keyCode, scanCode); } protected void registerParticleRenderers() { @@ -194,9 +200,9 @@ public final class AppEngClient extends AppEngBase { } public void registerTextures() { - // FIXME FABRIC InscriberTESR.registerTexture(); Stream> sprites = Stream.of( - SkyChestTESR.SPRITES + SkyChestTESR.SPRITES, + InscriberTESR.SPRITES ); // Group every needed sprite by atlas, since every atlas has their own event @@ -241,4 +247,49 @@ public final class AppEngClient extends AppEngBase { // FIXME FABRIC new CableBusModelLoader()); } + private void registerScreens() { + ScreenRegistry.register(GrinderContainer.TYPE, GrinderScreen::new); + ScreenRegistry.register(QNBContainer.TYPE, QNBScreen::new); + ScreenRegistry.register(SkyChestContainer.TYPE, SkyChestScreen::new); + ScreenRegistry.register(ChestContainer.TYPE, ChestScreen::new); + ScreenRegistry.register(WirelessContainer.TYPE, WirelessScreen::new); +// FIXME FABRIC ScreenRegistry.>register( +// FIXME FABRIC MEMonitorableContainer.TYPE, MEMonitorableScreen::new); +// FIXME FABRIC ScreenRegistry.register(MEPortableCellContainer.TYPE, MEPortableCellScreen::new); +// FIXME FABRIC ScreenRegistry.register(WirelessTermContainer.TYPE, WirelessTermScreen::new); +// FIXME FABRIC ScreenRegistry.register(NetworkStatusContainer.TYPE, NetworkStatusScreen::new); +// FIXME FABRIC ScreenRegistry.>register( +// FIXME FABRIC CraftingCPUContainer.TYPE, CraftingCPUScreen::new); +// FIXME FABRIC ScreenRegistry.register(NetworkToolContainer.TYPE, NetworkToolScreen::new); +// FIXME FABRIC ScreenRegistry.register(QuartzKnifeContainer.TYPE, QuartzKnifeScreen::new); +// FIXME FABRIC ScreenRegistry.register(DriveContainer.TYPE, DriveScreen::new); +// FIXME FABRIC ScreenRegistry.register(VibrationChamberContainer.TYPE, VibrationChamberScreen::new); +// FIXME FABRIC ScreenRegistry.register(CondenserContainer.TYPE, CondenserScreen::new); +// FIXME FABRIC ScreenRegistry.register(InterfaceContainer.TYPE, InterfaceScreen::new); +// FIXME FABRIC ScreenRegistry.register(FluidInterfaceContainer.TYPE, FluidInterfaceScreen::new); +// FIXME FABRIC ScreenRegistry.>register( +// FIXME FABRIC UpgradeableContainer.TYPE, UpgradeableScreen::new); +// FIXME FABRIC ScreenRegistry.register(FluidIOContainer.TYPE, FluidIOScreen::new); +// FIXME FABRIC ScreenRegistry.register(IOPortContainer.TYPE, IOPortScreen::new); +// FIXME FABRIC ScreenRegistry.register(StorageBusContainer.TYPE, StorageBusScreen::new); +// FIXME FABRIC ScreenRegistry.register(FluidStorageBusContainer.TYPE, FluidStorageBusScreen::new); +// FIXME FABRIC ScreenRegistry.register(FormationPlaneContainer.TYPE, FormationPlaneScreen::new); +// FIXME FABRIC ScreenRegistry.register(FluidFormationPlaneContainer.TYPE, FluidFormationPlaneScreen::new); +// FIXME FABRIC ScreenRegistry.register(PriorityContainer.TYPE, PriorityScreen::new); +// FIXME FABRIC ScreenRegistry.register(SecurityStationContainer.TYPE, SecurityStationScreen::new); +// FIXME FABRIC ScreenRegistry.register(CraftingTermContainer.TYPE, CraftingTermScreen::new); +// FIXME FABRIC ScreenRegistry.register(PatternTermContainer.TYPE, PatternTermScreen::new); +// FIXME FABRIC ScreenRegistry.register(FluidTerminalContainer.TYPE, FluidTerminalScreen::new); +// FIXME FABRIC ScreenRegistry.register(LevelEmitterContainer.TYPE, LevelEmitterScreen::new); +// FIXME FABRIC ScreenRegistry.register(FluidLevelEmitterContainer.TYPE, FluidLevelEmitterScreen::new); +// FIXME FABRIC ScreenRegistry.register(SpatialIOPortContainer.TYPE, SpatialIOPortScreen::new); +// FIXME FABRIC ScreenRegistry.register(InscriberContainer.TYPE, InscriberScreen::new); +// FIXME FABRIC ScreenRegistry.register(CellWorkbenchContainer.TYPE, CellWorkbenchScreen::new); +// FIXME FABRIC ScreenRegistry.register(MolecularAssemblerContainer.TYPE, MolecularAssemblerScreen::new); +// FIXME FABRIC ScreenRegistry.register(CraftAmountContainer.TYPE, CraftAmountScreen::new); +// FIXME FABRIC ScreenRegistry.register(CraftConfirmContainer.TYPE, CraftConfirmScreen::new); +// FIXME FABRIC ScreenRegistry.register(InterfaceTerminalContainer.TYPE, InterfaceTerminalScreen::new); +// FIXME FABRIC ScreenRegistry.register(CraftingStatusContainer.TYPE, CraftingStatusScreen::new); + } + } diff --git a/src/unported/java/appeng/client/gui/AEBaseMEScreen.java b/src/main/java/appeng/client/gui/AEBaseMEScreen.java similarity index 72% rename from src/unported/java/appeng/client/gui/AEBaseMEScreen.java rename to src/main/java/appeng/client/gui/AEBaseMEScreen.java index e727608ad..8a58a96b0 100644 --- a/src/unported/java/appeng/client/gui/AEBaseMEScreen.java +++ b/src/main/java/appeng/client/gui/AEBaseMEScreen.java @@ -22,8 +22,9 @@ import java.text.NumberFormat; import java.util.List; import java.util.Locale; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.slot.Slot; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -41,14 +42,14 @@ public abstract class AEBaseMEScreen extends AEBaseSc } @Override - protected void renderTooltip(final ItemStack stack, final int x, final int y) { + protected void renderTooltip(MatrixStack matrices, final ItemStack stack, final int x, final int y) { final Slot s = this.getSlot(x, y); if (s instanceof SlotME && !stack.isEmpty()) { final int bigNumber = AEConfig.instance().isUseLargeFonts() ? 999 : 9999; IAEItemStack myStack = null; - final List currentToolTip = this.getTooltipFromItem(stack); + final List currentToolTip = this.getTooltipFromItem(stack); try { final SlotME theSlotField = (SlotME) s; @@ -58,38 +59,31 @@ public abstract class AEBaseMEScreen extends AEBaseSc if (myStack != null) { if (myStack.getStackSize() > bigNumber || (myStack.getStackSize() > 1 && stack.isDamaged())) { - final String local = ButtonToolTips.ItemsStored.getLocal(); final String formattedAmount = NumberFormat.getNumberInstance(Locale.US) .format(myStack.getStackSize()); - final String format = String.format(local, formattedAmount); - - currentToolTip.add(Formatting.GRAY + format); + currentToolTip.add(ButtonToolTips.ItemsStored.text(formattedAmount) + .formatted(Formatting.GRAY)); } if (myStack.getCountRequestable() > 0) { - final String local = ButtonToolTips.ItemsRequestable.getLocal(); final String formattedAmount = NumberFormat.getNumberInstance(Locale.US) .format(myStack.getCountRequestable()); - final String format = String.format(local, formattedAmount); - - currentToolTip.add(format); + currentToolTip.add(ButtonToolTips.ItemsRequestable.text(formattedAmount)); } - this.renderTooltip(currentToolTip, x, y, this.font); + + this.renderTooltip(matrices, currentToolTip, x, y); return; } else if (stack.getCount() > bigNumber) { - final String local = ButtonToolTips.ItemsStored.getLocal(); final String formattedAmount = NumberFormat.getNumberInstance(Locale.US).format(stack.getCount()); - final String format = String.format(local, formattedAmount); + currentToolTip.add(ButtonToolTips.ItemsStored.text(formattedAmount).formatted(Formatting.GRAY)); - currentToolTip.add(Formatting.GRAY + format); - - this.renderTooltip(currentToolTip, x, y, this.font); + this.renderTooltip(matrices, currentToolTip, x, y); return; } } - super.renderTooltip(stack, x, y); + super.renderTooltip(matrices, stack, x, y); } } \ No newline at end of file diff --git a/src/unported/java/appeng/client/gui/AEBaseScreen.java b/src/main/java/appeng/client/gui/AEBaseScreen.java similarity index 68% rename from src/unported/java/appeng/client/gui/AEBaseScreen.java rename to src/main/java/appeng/client/gui/AEBaseScreen.java index 5021e92e7..886aebca4 100644 --- a/src/unported/java/appeng/client/gui/AEBaseScreen.java +++ b/src/main/java/appeng/client/gui/AEBaseScreen.java @@ -25,38 +25,34 @@ import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; +import appeng.mixins.SlotMixin; import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; -import com.google.common.collect.Lists; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.gui.widget.AbstractButtonWidget; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormats; -import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.InputUtil; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.StringRenderable; +import net.minecraft.text.Style; import net.minecraft.util.Formatting; import org.lwjgl.glfw.GLFW; import org.lwjgl.opengl.GL11; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.gui.screen.inventory.ContainerScreen; -import net.minecraft.client.gui.widget.Widget; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.texture.SpriteAtlasTexture; -import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.fluid.Fluid; -import net.minecraft.inventory.container.ClickType; -import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.screen.ScreenHandler; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import net.minecraft.text.Text; -import net.minecraftforge.fluids.FluidAttributes; -import net.minecraftforge.fml.client.gui.GuiUtils; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; @@ -88,7 +84,7 @@ import appeng.fluids.client.render.FluidStackSizeRenderer; import appeng.fluids.container.slots.IMEFluidSlot; import appeng.helpers.InventoryAction; -public abstract class AEBaseScreen extends ContainerScreen { +public abstract class AEBaseScreen extends HandledScreen { private final List meSlots = new ArrayList<>(); // drag y private final Set drag_click = new HashSet<>(); @@ -105,6 +101,18 @@ public abstract class AEBaseScreen extends ContainerS super(container, playerInventory, title); } + public MinecraftClient getClient() { + return Preconditions.checkNotNull(client); + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + @Override public void init() { super.init(); @@ -118,55 +126,55 @@ public abstract class AEBaseScreen extends ContainerS } private List getInventorySlots() { - return this.container.inventorySlots; + return this.handler.slots; } @Override - public void render(final int mouseX, final int mouseY, final float partialTicks) { - super.renderBackground(); - super.render(mouseX, mouseY, partialTicks); + public void render(MatrixStack matrices, final int mouseX, final int mouseY, final float partialTicks) { + super.renderBackground(matrices); + super.render(matrices, mouseX, mouseY, partialTicks); RenderSystem.pushMatrix(); - RenderSystem.translatef(this.guiLeft, this.guiTop, 0.0F); + RenderSystem.translatef(this.x, this.y, 0.0F); RenderSystem.enableDepthTest(); for (final CustomSlotWidget c : this.guiSlots) { - this.drawGuiSlot(c, mouseX, mouseY, partialTicks); + this.drawGuiSlot(matrices, c, mouseX, mouseY, partialTicks); } RenderSystem.disableDepthTest(); for (final CustomSlotWidget c : this.guiSlots) { - this.drawTooltip(c, mouseX - this.guiLeft, mouseY - this.guiTop); + this.drawTooltip(matrices, c, mouseX - this.x, mouseY - this.y); } RenderSystem.popMatrix(); RenderSystem.enableDepthTest(); - this.renderHoveredToolTip(mouseX, mouseY); + this.drawMouseoverTooltip(matrices, mouseX, mouseY); for (final Object c : this.buttons) { if (c instanceof ITooltip) { - this.drawTooltip((ITooltip) c, mouseX, mouseY); + this.drawTooltip(matrices, (ITooltip) c, mouseX, mouseY); } } } - protected void drawGuiSlot(CustomSlotWidget slot, int mouseX, int mouseY, float partialTicks) { + protected void drawGuiSlot(MatrixStack matrices, CustomSlotWidget slot, int mouseX, int mouseY, float partialTicks) { if (slot.isSlotEnabled()) { final int left = slot.xPos(); final int top = slot.yPos(); final int right = left + slot.getWidth(); final int bottom = top + slot.getHeight(); - slot.drawContent(getMinecraft(), mouseX, mouseY, partialTicks); + slot.drawContent(getClient(), mouseX, mouseY, partialTicks); - if (this.isPointInRegion(left, top, slot.getWidth(), slot.getHeight(), mouseX, mouseY) + if (this.isPointWithinBounds(left, top, slot.getWidth(), slot.getHeight(), mouseX, mouseY) && slot.canClick(getPlayer())) { RenderSystem.colorMask(true, true, true, false); - this.fillGradient(left, top, right, bottom, -2130706433, -2130706433); + this.fillGradient(matrices, left, top, right, bottom, -2130706433, -2130706433); RenderSystem.colorMask(true, true, true, true); } } } - private void drawTooltip(ITooltip tooltip, int mouseX, int mouseY) { + private void drawTooltip(MatrixStack matrices, ITooltip tooltip, int mouseX, int mouseY) { final int x = tooltip.xPos(); // ((GuiImgButton) c).x; int y = tooltip.yPos(); // ((GuiImgButton) c).y; @@ -176,60 +184,61 @@ public abstract class AEBaseScreen extends ContainerS y = 15; } - final String msg = tooltip.getMessage(); + final Text msg = tooltip.getMessage(); if (msg != null) { - this.drawTooltip(x + 11, y + 4, msg); + this.drawTooltip(matrices, x + 11, y + 4, msg); } } } } - protected void drawTooltip(int x, int y, String message) { - String[] lines = message.split("\n"); - this.drawTooltip(x, y, Arrays.asList(lines)); + protected void drawTooltip(MatrixStack matrices, int x, int y, Text message) { + String[] lines = message.getString().split("\n"); // FIXME FABRIC + this.drawTooltip(matrices, x, y, Arrays.asList(lines)); } - protected void drawTooltip(int x, int y, List lines) { + // FIXME FABRIC: move out to json (?) + private static final Style TOOLTIP_HEADER = Style.EMPTY.withColor(Formatting.WHITE); + private static final Style TOOLTIP_BODY = Style.EMPTY.withColor(Formatting.GRAY); + + protected void drawTooltip(MatrixStack matrices, int x, int y, List lines) { if (lines.isEmpty()) { return; } - // For an explanation of the formatting codes, see - // http://minecraft.gamepedia.com/Formatting_codes - lines = Lists.newArrayList(lines); // Make a copy + List renderableLines = new ArrayList<>(lines.size()); // Make the first line white - lines.set(0, Formatting.WHITE + lines.get(0)); - // All lines after the first are colored gray - for (int i = 1; i < lines.size(); i++) { - lines.set(i, Formatting.GRAY + lines.get(i)); + for (int i = 0; i < lines.size(); i++) { + Style style = (i == 0) ? TOOLTIP_HEADER : TOOLTIP_BODY; + renderableLines.add(StringRenderable.styled(lines.get(0), style)); } - this.renderTooltip(lines, x, y, this.font); + this.renderTooltip(matrices, renderableLines, x, y); } @Override - protected final void drawGuiContainerForegroundLayer(final int x, final int y) { - final int ox = this.guiLeft; // (width - xSize) / 2; - final int oy = this.guiTop; // (height - ySize) / 2; + protected final void drawForeground(MatrixStack matrices, final int x, final int y) { + final int ox = this.x; // (width - xSize) / 2; + final int oy = this.y; // (height - ySize) / 2; RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); if (this.getScrollBar() != null) { - this.getScrollBar().draw(this); + this.getScrollBar().draw(matrices, this); } - this.drawFG(ox, oy, x, y); + this.drawFG(matrices, ox, oy, x, y); } - public abstract void drawFG(int offsetX, int offsetY, int mouseX, int mouseY); + public abstract void drawFG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY); @Override - protected final void drawGuiContainerBackgroundLayer(final float f, final int x, final int y) { - final int ox = this.guiLeft; // (width - xSize) / 2; - final int oy = this.guiTop; // (height - ySize) / 2; + protected final void drawBackground(MatrixStack matrices, final float f, final int x, final int y) { + final int ox = this.x; // (width - xSize) / 2; + final int oy = this.y; // (height - ySize) / 2; RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - this.drawBG(ox, oy, x, y, f); + this.drawBG(matrices, ox, oy, x, y, f); final List slots = this.getInventorySlots(); for (final Slot slot : slots) { @@ -238,13 +247,13 @@ public abstract class AEBaseScreen extends ContainerS if (optionalSlot.isRenderDisabled()) { final AppEngSlot aeSlot = (AppEngSlot) slot; if (aeSlot.isSlotEnabled()) { - GuiUtils.drawTexturedModalRect(ox + aeSlot.xPos - 1, oy + aeSlot.yPos - 1, - optionalSlot.getSourceX() - 1, optionalSlot.getSourceY() - 1, 18, 18, getBlitOffset()); + drawTexture(matrices, ox + aeSlot.x - 1, oy + aeSlot.y - 1, + optionalSlot.getSourceX() - 1, optionalSlot.getSourceY() - 1, 18, 18); } else { RenderSystem.color4f(1.0F, 1.0F, 1.0F, 0.4F); RenderSystem.enableBlend(); - GuiUtils.drawTexturedModalRect(ox + aeSlot.xPos - 1, oy + aeSlot.yPos - 1, - optionalSlot.getSourceX() - 1, optionalSlot.getSourceY() - 1, 18, 18, getBlitOffset()); + drawTexture(matrices, ox + aeSlot.x - 1, oy + aeSlot.y - 1, + optionalSlot.getSourceX() - 1, optionalSlot.getSourceY() - 1, 18, 18); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); } } @@ -252,7 +261,7 @@ public abstract class AEBaseScreen extends ContainerS } for (final CustomSlotWidget slot : this.guiSlots) { - slot.drawBackground(ox, oy, getBlitOffset()); + slot.drawBackground(ox, oy, getZOffset()); } } @@ -263,7 +272,7 @@ public abstract class AEBaseScreen extends ContainerS if (btn == 1) { for (final Object o : this.buttons) { - final Widget widget = (Widget) o; + final AbstractButtonWidget widget = (AbstractButtonWidget) o; if (widget.isMouseOver(xCoord, yCoord)) { return super.mouseClicked(xCoord, yCoord, 0); } @@ -271,14 +280,14 @@ public abstract class AEBaseScreen extends ContainerS } for (CustomSlotWidget slot : this.guiSlots) { - if (this.isPointInRegion(slot.xPos(), slot.yPos(), slot.getWidth(), slot.getHeight(), xCoord, yCoord) + if (this.isPointWithinBounds(slot.xPos(), slot.yPos(), slot.getWidth(), slot.getHeight(), xCoord, yCoord) && slot.canClick(getPlayer())) { - slot.slotClicked(getPlayer().inventory.getItemStack(), btn); + slot.slotClicked(getPlayer().inventory.getCursorStack(), btn); } } if (this.getScrollBar() != null) { - this.getScrollBar().click(xCoord - this.guiLeft, yCoord - this.guiTop); + this.getScrollBar().click(xCoord - this.x, yCoord - this.y); } return super.mouseClicked(xCoord, yCoord, btn); @@ -288,11 +297,11 @@ public abstract class AEBaseScreen extends ContainerS public boolean mouseDragged(double mouseX, double mouseY, int mouseButton, double dragX, double dragY) { final Slot slot = this.getSlot((int) mouseX, (int) mouseY); - final ItemStack itemstack = getPlayer().inventory.getItemStack(); + final ItemStack itemstack = getPlayer().inventory.getCursorStack(); if (this.getScrollBar() != null) { // FIXME: Coordinate system of mouseX/mouseY is unclear - this.getScrollBar().click((int) mouseX - this.guiLeft, (int) mouseY - this.guiTop); + this.getScrollBar().click((int) mouseX - this.x, (int) mouseY - this.y); } if (slot instanceof FakeSlot && !itemstack.isEmpty()) { @@ -301,7 +310,7 @@ public abstract class AEBaseScreen extends ContainerS for (final Slot dr : this.drag_click) { final InventoryActionPacket p = new InventoryActionPacket( mouseButton == 0 ? InventoryAction.PICKUP_OR_SET_DOWN : InventoryAction.PLACE_SINGLE, - dr.slotNumber, 0); + dr.id, 0); NetworkHandler.instance().sendToServer(p); } } @@ -312,10 +321,10 @@ public abstract class AEBaseScreen extends ContainerS } } - // TODO 1.9.4 aftermath - Whole ClickType thing, to be checked. + // TODO 1.9.4 aftermath - Whole SlotActionType thing, to be checked. @Override - protected void handleMouseClick(final Slot slot, final int slotIdx, final int mouseButton, - final ClickType clickType) { + protected void onMouseClick(final Slot slot, final int slotIdx, final int mouseButton, + final SlotActionType clickType) { final PlayerEntity player = getPlayer(); if (slot instanceof FakeSlot) { @@ -357,7 +366,7 @@ public abstract class AEBaseScreen extends ContainerS return; } - if (InputMappings.isKeyDown(MinecraftClient.getInstance().getMainWindow().getHandle(), GLFW.GLFW_KEY_SPACE)) { + if (InputUtil.isKeyPressed(MinecraftClient.getInstance().getWindow().getHandle(), GLFW.GLFW_KEY_SPACE)) { if (this.enableSpaceClicking()) { IAEItemStack stack = null; if (slot instanceof SlotME) { @@ -367,10 +376,10 @@ public abstract class AEBaseScreen extends ContainerS int slotNum = this.getInventorySlots().size(); if (!(slot instanceof SlotME) && slot != null) { - slotNum = slot.slotNumber; + slotNum = slot.id; } - ((AEBaseContainer) this.container).setTargetStack(stack); + this.handler.setTargetStack(stack); final InventoryActionPacket p = new InventoryActionPacket(InventoryAction.MOVE_REGION, slotNum, 0); NetworkHandler.instance().sendToServer(p); return; @@ -391,7 +400,7 @@ public abstract class AEBaseScreen extends ContainerS case CLONE: // creative dupe: - if (player.abilities.isCreativeMode) { + if (player.isCreative()) { action = InventoryAction.CREATIVE_DUPLICATE; } @@ -402,7 +411,7 @@ public abstract class AEBaseScreen extends ContainerS } if (action != null) { - final InventoryActionPacket p = new InventoryActionPacket(action, slot.getSlotIndex(), + final InventoryActionPacket p = new InventoryActionPacket(action, getSlotIndex(slot), ((SlotDisconnected) slot).getSlot().getId()); NetworkHandler.instance().sendToServer(p); } @@ -421,7 +430,7 @@ public abstract class AEBaseScreen extends ContainerS stack = ((SlotME) slot).getAEStack(); if (stack != null && action == InventoryAction.PICKUP_OR_SET_DOWN && stack.getStackSize() == 0 - && player.inventory.getItemStack().isEmpty()) { + && player.inventory.getCursorStack().isEmpty()) { action = InventoryAction.AUTO_CRAFT; } @@ -436,7 +445,7 @@ public abstract class AEBaseScreen extends ContainerS stack = ((SlotME) slot).getAEStack(); if (stack != null && stack.isCraftable()) { action = InventoryAction.AUTO_CRAFT; - } else if (player.abilities.isCreativeMode) { + } else if (player.isCreative()) { final IAEItemStack slotItem = ((SlotME) slot).getAEStack(); if (slotItem != null) { action = InventoryAction.CREATIVE_DUPLICATE; @@ -449,7 +458,7 @@ public abstract class AEBaseScreen extends ContainerS } if (action != null) { - this.container.setTargetStack(stack); + this.handler.setTargetStack(stack); final InventoryActionPacket p = new InventoryActionPacket(action, this.getInventorySlots().size(), 0); NetworkHandler.instance().sendToServer(p); } @@ -466,7 +475,7 @@ public abstract class AEBaseScreen extends ContainerS this.bl_clicked = slot; this.dbl_clickTimer = Stopwatch.createStarted(); if (slot != null) { - this.dbl_whichItem = slot.getHasStack() ? slot.getStack().copy() : ItemStack.EMPTY; + this.dbl_whichItem = slot.hasStack() ? slot.getStack().copy() : ItemStack.EMPTY; } else { this.dbl_whichItem = ItemStack.EMPTY; } @@ -475,10 +484,10 @@ public abstract class AEBaseScreen extends ContainerS final List slots = this.getInventorySlots(); for (final Slot inventorySlot : slots) { - if (inventorySlot != null && inventorySlot.canTakeStack(getPlayer()) && inventorySlot.getHasStack() - && inventorySlot.isSameInventory(slot) - && Container.canAddItemToSlot(inventorySlot, this.dbl_whichItem, true)) { - this.handleMouseClick(inventorySlot, inventorySlot.slotNumber, 0, ClickType.QUICK_MOVE); + if (inventorySlot != null && inventorySlot.canTakeItems(getPlayer()) && inventorySlot.hasStack() + && inventorySlot.inventory == slot.inventory + && ScreenHandler.canInsertItemIntoSlot(inventorySlot, this.dbl_whichItem, true)) { + this.onMouseClick(inventorySlot, inventorySlot.id, 0, SlotActionType.QUICK_MOVE); } } this.dbl_whichItem = ItemStack.EMPTY; @@ -487,43 +496,43 @@ public abstract class AEBaseScreen extends ContainerS this.disableShiftClick = false; } - super.handleMouseClick(slot, slotIdx, mouseButton, clickType); - } - - protected boolean func_195363_d(int keyCode, int scanCode) { - return checkHotbarKeys(InputMappings.getInputByCode(keyCode, scanCode)); + super.onMouseClick(slot, slotIdx, mouseButton, clickType); } protected ClientPlayerEntity getPlayer() { // Our UIs are usually not opened when not in-game, so this should not be a // problem - return Preconditions.checkNotNull(getMinecraft().player); + return Preconditions.checkNotNull(getClient().player); } - protected boolean checkHotbarKeys(final InputUtil.Key input) { - final Slot theSlot = this.getSlotUnderMouse(); + protected int getSlotIndex(Slot slot) { + return ((SlotMixin)slot).getIndex(); + } - if (getPlayer().inventory.getItemStack().isEmpty() && theSlot != null) { + protected boolean checkHotbarKeys(int keyCode, int scanCode) { + final Slot theSlot = this.focusedSlot; + + if (getPlayer().inventory.getCursorStack().isEmpty() && theSlot != null) { for (int j = 0; j < 9; ++j) { - if (getMinecraft().options.keyBindsHotbar[j].isActiveAndMatches(input)) { + if (getClient().options.keysHotbar[j].matchesKey(keyCode, scanCode)) { final List slots = this.getInventorySlots(); for (final Slot s : slots) { - if (s.getSlotIndex() == j && s.inventory == ((AEBaseContainer) this.container).getPlayerInv()) { - if (!s.canTakeStack(((AEBaseContainer) this.container).getPlayerInv().player)) { + if (getSlotIndex(s) == j && s.inventory == this.handler.getPlayerInv()) { + if (!s.canTakeItems(this.handler.getPlayerInv().player)) { return false; } } } - if (theSlot.getSlotStackLimit() == 64) { - this.handleMouseClick(theSlot, theSlot.slotNumber, j, ClickType.SWAP); + if (theSlot.getMaxStackAmount() == 64) { + this.onMouseClick(theSlot, theSlot.id, j, SlotActionType.SWAP); return true; } else { for (final Slot s : slots) { - if (s.getSlotIndex() == j - && s.inventory == ((AEBaseContainer) this.container).getPlayerInv()) { + if (getSlotIndex(s) == j + && s.inventory == this.handler.getPlayerInv()) { NetworkHandler.instance() - .sendToServer(new SwapSlotsPacket(s.slotNumber, theSlot.slotNumber)); + .sendToServer(new SwapSlotsPacket(s.id, theSlot.id)); return true; } } @@ -543,8 +552,8 @@ public abstract class AEBaseScreen extends ContainerS protected Slot getSlot(final int mouseX, final int mouseY) { final List slots = this.getInventorySlots(); for (final Slot slot : slots) { - // isPointInRegion - if (this.isPointInRegion(slot.xPos, slot.yPos, 16, 16, mouseX, mouseY)) { + // isPointWithinBounds + if (this.isPointWithinBounds(slot.x, slot.y, 16, 16, mouseX, mouseY)) { return slot; } } @@ -552,7 +561,7 @@ public abstract class AEBaseScreen extends ContainerS return null; } - public abstract void drawBG(int offsetX, int offsetY, int mouseX, int mouseY, float partialTicks); + public abstract void drawBG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY, float partialTicks); @Override public boolean mouseScrolled(double x, double y, double wheelDelta) { @@ -571,7 +580,7 @@ public abstract class AEBaseScreen extends ContainerS if (slot instanceof SlotME) { final IAEItemStack item = ((SlotME) slot).getAEStack(); if (item != null) { - ((AEBaseContainer) this.container).setTargetStack(item); + this.handler.setTargetStack(item); final InventoryAction direction = wheel > 0 ? InventoryAction.ROLL_DOWN : InventoryAction.ROLL_UP; final int times = (int) Math.abs(wheel); final int inventorySize = this.getInventorySlots().size(); @@ -589,18 +598,14 @@ public abstract class AEBaseScreen extends ContainerS public void bindTexture(final String base, final String file) { final Identifier loc = new Identifier(base, "textures/" + file); - getMinecraft().getTextureManager().bindTexture(loc); + getClient().getTextureManager().bindTexture(loc); } protected void drawItem(final int x, final int y, final ItemStack is) { - this.itemRenderer.zLevel = 100.0F; + this.itemRenderer.zOffset = 100.0F; + this.itemRenderer.renderInGuiWithOverrides(is, x, y); - // FIXME I dont think this is needed anymore... - RenderHelper.enableStandardItemLighting(); - this.itemRenderer.renderItemAndEffectIntoGUI(is, x, y); - RenderHelper.disableStandardItemLighting(); - - this.itemRenderer.zLevel = 0.0F; + this.itemRenderer.zOffset = 0.0F; } protected String getGuiDisplayName(final String in) { @@ -608,11 +613,11 @@ public abstract class AEBaseScreen extends ContainerS } private boolean hasCustomInventoryName() { - return this.container.getCustomName() != null; + return this.handler.getCustomName() != null; } private String getInventoryName() { - return this.container.getCustomName(); + return this.handler.getCustomName(); } /** @@ -620,18 +625,18 @@ public abstract class AEBaseScreen extends ContainerS * hackery... */ @Override - public void drawSlot(Slot s) { + public void drawSlot(MatrixStack matrices, Slot s) { if (s instanceof SlotME) { try { if (!this.isPowered()) { - fill(s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66111111); + fill(matrices, s.x, s.y, 16 + s.x, 16 + s.y, 0x66111111); } // Annoying but easier than trying to splice into render item - super.drawSlot(new Size1Slot((SlotME) s)); + super.drawSlot(matrices, new Size1Slot((SlotME) s)); - this.stackSizeRenderer.renderStackSize(this.font, ((SlotME) s).getAEStack(), s.xPos, s.yPos); + this.stackSizeRenderer.renderStackSize(this.textRenderer, ((SlotME) s).getAEStack(), s.x, s.y); } catch (final Exception err) { AELog.warn("[AppEng] AE prevented crash while drawing slot: " + err.toString()); @@ -643,27 +648,11 @@ public abstract class AEBaseScreen extends ContainerS final IAEFluidStack fs = slot.getAEFluidStack(); if (fs != null && this.isPowered()) { - RenderSystem.disableBlend(); - final Fluid fluid = fs.getFluid(); - FluidAttributes fluidAttributes = fluid.getAttributes(); - bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX); - Identifier fluidStillTexture = fluidAttributes.getStillTexture(fs.getFluidStack()); - final Sprite sprite = getMinecraft() - .getAtlasSpriteGetter(SpriteAtlasTexture.BLOCK_ATLAS_TEX).apply(fluidStillTexture); + fs.getFluidStack().renderGuiRect(s.x, s.y, s.x + 16, s.y + 16); - // Set color for dynamic fluids - // Convert int color to RGB - float red = (fluidAttributes.getColor() >> 16 & 255) / 255.0F; - float green = (fluidAttributes.getColor() >> 8 & 255) / 255.0F; - float blue = (fluidAttributes.getColor() & 255) / 255.0F; - RenderSystem.color3f(red, green, blue); - - blit(s.xPos, s.yPos, 0 /* FIXME: Validate this was previous the controls zindex */, 16, 16, sprite); - RenderSystem.enableBlend(); - - this.fluidStackSizeRenderer.renderStackSize(this.font, fs, s.xPos, s.yPos); + this.fluidStackSizeRenderer.renderStackSize(this.textRenderer, fs, s.x, s.y); } else if (!this.isPowered()) { - fill(s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66111111); + fill(matrices, s.x, s.y, 16 + s.x, 16 + s.y, 0x66111111); } return; @@ -684,28 +673,36 @@ public abstract class AEBaseScreen extends ContainerS RenderSystem.enableTexture(); RenderSystem.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); - final float par1 = aes.xPos; - final float par2 = aes.yPos; + final float par1 = aes.x; + final float par2 = aes.y; final float par3 = uv_x * 16; final float par4 = uv_y * 16; final Tessellator tessellator = Tessellator.getInstance(); final BufferBuilder vb = tessellator.getBuffer(); - vb.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEX_COLOR); + vb.begin(GL11.GL_QUADS, VertexFormats.POSITION_COLOR_TEXTURE); final float f1 = 0.00390625F; final float f = 0.00390625F; final float par6 = 16; - vb.pos(par1 + 0, par2 + par6, getBlitOffset()).tex((par3 + 0) * f, (par4 + par6) * f1) - .color(1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon()).endVertex(); + vb.vertex(par1 + 0, par2 + par6, getZOffset()) + .color(1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon()) + .texture((par3 + 0) * f, (par4 + par6) * f1) + .next(); final float par5 = 16; - vb.pos(par1 + par5, par2 + par6, getBlitOffset()).tex((par3 + par5) * f, (par4 + par6) * f1) - .color(1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon()).endVertex(); - vb.pos(par1 + par5, par2 + 0, getBlitOffset()).tex((par3 + par5) * f, (par4 + 0) * f1) - .color(1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon()).endVertex(); - vb.pos(par1 + 0, par2 + 0, getBlitOffset()).tex((par3 + 0) * f, (par4 + 0) * f1) - .color(1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon()).endVertex(); + vb.vertex(par1 + par5, par2 + par6, getZOffset()) + .color(1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon()) + .texture((par3 + par5) * f, (par4 + par6) * f1) + .next(); + vb.vertex(par1 + par5, par2 + 0, getZOffset()) + .color(1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon()) + .texture((par3 + par5) * f, (par4 + 0) * f1) + .next(); + vb.vertex(par1 + 0, par2 + 0, getZOffset()) + .color(1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon()) + .texture((par3 + 0) * f, (par4 + 0) * f1) + .next(); tessellator.draw(); } catch (final Exception err) { @@ -717,13 +714,13 @@ public abstract class AEBaseScreen extends ContainerS if (!is.isEmpty() && s instanceof AppEngSlot) { AppEngSlot aeSlot = (AppEngSlot) s; if (aeSlot.getIsValid() == CalculatedValidity.NotAvailable) { - boolean isValid = s.isItemValid(is) || s instanceof OutputSlot + boolean isValid = s.canInsert(is) || s instanceof OutputSlot || s instanceof AppEngCraftingSlot || s instanceof DisabledSlot || s instanceof InaccessibleSlot || s instanceof FakeSlot || s instanceof RestrictedInputSlot || s instanceof SlotDisconnected; if (isValid && s instanceof RestrictedInputSlot) { try { - isValid = ((RestrictedInputSlot) s).isValid(is, getMinecraft().world); + isValid = ((RestrictedInputSlot) s).isValid(is, getClient().world); } catch (final Exception err) { AELog.debug(err); } @@ -732,21 +729,21 @@ public abstract class AEBaseScreen extends ContainerS } if (aeSlot.getIsValid() == CalculatedValidity.Invalid) { - setBlitOffset(100); - this.itemRenderer.zLevel = 100.0F; + setZOffset(100); + this.itemRenderer.zOffset = 100.0F; - fill(s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66ff6666); + fill(matrices, s.x, s.y, 16 + s.x, 16 + s.y, 0x66ff6666); - setBlitOffset(0); - this.itemRenderer.zLevel = 0.0F; + setZOffset(0); + this.itemRenderer.zOffset = 0.0F; } } if (s instanceof AppEngSlot) { ((AppEngSlot) s).setDisplay(true); - super.drawSlot(s); + super.drawSlot(matrices, s); } else { - super.drawSlot(s); + super.drawSlot(matrices, s); } return; @@ -755,7 +752,7 @@ public abstract class AEBaseScreen extends ContainerS } } // do the usual for non-ME Slots. - super.drawSlot(s); + super.drawSlot(matrices, s); } protected boolean isPowered() { @@ -764,11 +761,11 @@ public abstract class AEBaseScreen extends ContainerS public void bindTexture(final String file) { final Identifier loc = new Identifier(AppEng.MOD_ID, "textures/" + file); - getMinecraft().getTextureManager().bindTexture(loc); + getClient().getTextureManager().bindTexture(loc); } public void bindTexture(final Identifier loc) { - getMinecraft().getTextureManager().bindTexture(loc); + getClient().getTextureManager().bindTexture(loc); } protected Scrollbar getScrollBar() { diff --git a/src/main/java/appeng/client/gui/Size1Slot.java b/src/main/java/appeng/client/gui/Size1Slot.java new file mode 100644 index 000000000..7fcbdf739 --- /dev/null +++ b/src/main/java/appeng/client/gui/Size1Slot.java @@ -0,0 +1,81 @@ + +package appeng.client.gui; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import appeng.client.me.SlotME; +import com.mojang.datafixers.util.Pair; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.screen.slot.Slot; +import net.minecraft.item.ItemStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.util.Identifier; + +/** + * A proxy for a slot that will always return an itemstack with size 1, if there + * is an item in the slot. Used to prevent the default item count from + * rendering. + */ +class Size1Slot extends Slot { + + private final SlotME delegate; + + public Size1Slot(SlotME delegate) { + super(delegate.inventory, -1, delegate.x, delegate.y); + this.delegate = delegate; + } + + @Override + @Nonnull + public ItemStack getStack() { + ItemStack orgStack = this.delegate.getStack(); + if (!orgStack.isEmpty()) { + ItemStack modifiedStack = orgStack.copy(); + modifiedStack.setCount(1); + return modifiedStack; + } + + return ItemStack.EMPTY; + } + + @Override + public boolean hasStack() { + return this.delegate.hasStack(); + } + + @Override + public int getMaxStackAmount() { + return this.delegate.getMaxStackAmount(); + } + + @Override + public int getMaxStackAmount(ItemStack stack) { + return this.delegate.getMaxStackAmount(stack); + } + + @Override + public boolean canTakeItems(PlayerEntity playerIn) { + return this.delegate.canTakeItems(playerIn); + } + + @Override + public void markDirty() { + delegate.markDirty(); + } + + @Override + @Environment(EnvType.CLIENT) + @Nullable + public Pair getBackgroundSprite() { + return delegate.getBackgroundSprite(); + } + + @Override + @Environment(EnvType.CLIENT) + public boolean doDrawHoveringEffect() { + return delegate.doDrawHoveringEffect(); + } + +} diff --git a/src/unported/java/appeng/client/gui/implementations/AESubScreen.java b/src/main/java/appeng/client/gui/implementations/AESubScreen.java similarity index 92% rename from src/unported/java/appeng/client/gui/implementations/AESubScreen.java rename to src/main/java/appeng/client/gui/implementations/AESubScreen.java index d463b2d6b..f7ddf6149 100644 --- a/src/unported/java/appeng/client/gui/implementations/AESubScreen.java +++ b/src/main/java/appeng/client/gui/implementations/AESubScreen.java @@ -4,7 +4,7 @@ import java.util.function.Consumer; import javax.annotation.Nullable; -import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; @@ -26,6 +26,7 @@ import appeng.parts.reporting.CraftingTerminalPart; import appeng.parts.reporting.PatternTerminalPart; import appeng.parts.reporting.TerminalPart; import appeng.tile.storage.ChestBlockEntity; +import net.minecraft.text.Text; /** * Utility class for sub-screens of other containers that allow returning to the @@ -92,13 +93,13 @@ final class AESubScreen { return addBackButton(buttonAdder, x, y, null); } - public final TabButton addBackButton(Consumer buttonAdder, int x, int y, @Nullable String label) { + public final TabButton addBackButton(Consumer buttonAdder, int x, int y, @Nullable Text label) { if (this.previousContainerType != null && !previousContainerIcon.isEmpty()) { if (label == null) { - label = previousContainerIcon.getName().getString(); + label = previousContainerIcon.getName(); } - ItemRenderer itemRenderer = gui.getMinecraft().getItemRenderer(); - TabButton button = new TabButton(gui.getGuiLeft() + x, gui.getGuiTop() + y, previousContainerIcon, label, + ItemRenderer itemRenderer = gui.getClient().getItemRenderer(); + TabButton button = new TabButton(gui.getX() + x, gui.getY() + y, previousContainerIcon, label, itemRenderer, btn -> goBack()); buttonAdder.accept(button); return button; diff --git a/src/unported/java/appeng/client/gui/implementations/ChestScreen.java b/src/main/java/appeng/client/gui/implementations/ChestScreen.java similarity index 70% rename from src/unported/java/appeng/client/gui/implementations/ChestScreen.java rename to src/main/java/appeng/client/gui/implementations/ChestScreen.java index eca81e188..d2102e164 100644 --- a/src/unported/java/appeng/client/gui/implementations/ChestScreen.java +++ b/src/main/java/appeng/client/gui/implementations/ChestScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.client.gui.widgets.TabButton; @@ -34,14 +35,14 @@ public class ChestScreen extends AEBaseScreen { public ChestScreen(ChestContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 166; + this.backgroundHeight = 166; } @Override public void init() { super.init(); - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), + this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.textComponent(), this.itemRenderer, btn -> openPriority())); } @@ -50,14 +51,14 @@ public class ChestScreen extends AEBaseScreen { } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.Chest.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Chest.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/chest.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } } diff --git a/src/unported/java/appeng/client/gui/implementations/GrinderScreen.java b/src/main/java/appeng/client/gui/implementations/GrinderScreen.java similarity index 67% rename from src/unported/java/appeng/client/gui/implementations/GrinderScreen.java rename to src/main/java/appeng/client/gui/implementations/GrinderScreen.java index 085371df5..929938193 100644 --- a/src/unported/java/appeng/client/gui/implementations/GrinderScreen.java +++ b/src/main/java/appeng/client/gui/implementations/GrinderScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.container.implementations.GrinderContainer; @@ -30,18 +31,18 @@ public class GrinderScreen extends AEBaseScreen { public GrinderScreen(GrinderContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 176; + this.backgroundHeight = 176; } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.GrindStone.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.GrindStone.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/grinder.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } } diff --git a/src/unported/java/appeng/client/gui/implementations/QNBScreen.java b/src/main/java/appeng/client/gui/implementations/QNBScreen.java similarity index 66% rename from src/unported/java/appeng/client/gui/implementations/QNBScreen.java rename to src/main/java/appeng/client/gui/implementations/QNBScreen.java index e64cc1442..172e682b2 100644 --- a/src/unported/java/appeng/client/gui/implementations/QNBScreen.java +++ b/src/main/java/appeng/client/gui/implementations/QNBScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.container.implementations.QNBContainer; @@ -30,18 +31,18 @@ public class QNBScreen extends AEBaseScreen { public QNBScreen(QNBContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 166; + this.backgroundHeight = 166; } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.QuantumLinkChamber.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.QuantumLinkChamber.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/chest.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } } diff --git a/src/unported/java/appeng/client/gui/implementations/SkyChestScreen.java b/src/main/java/appeng/client/gui/implementations/SkyChestScreen.java similarity index 71% rename from src/unported/java/appeng/client/gui/implementations/SkyChestScreen.java rename to src/main/java/appeng/client/gui/implementations/SkyChestScreen.java index aa17105ba..decf5ed00 100644 --- a/src/unported/java/appeng/client/gui/implementations/SkyChestScreen.java +++ b/src/main/java/appeng/client/gui/implementations/SkyChestScreen.java @@ -18,10 +18,11 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.Identifier; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.container.implementations.SkyChestContainer; @@ -34,19 +35,19 @@ public class SkyChestScreen extends AEBaseScreen { public SkyChestScreen(SkyChestContainer container, PlayerInventory playerInv, Text title) { super(container, playerInv, title); - this.ySize = 195; + this.backgroundHeight = 195; } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.SkyChest.getLocal()), 8, 8, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 2, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.SkyChest.getLocal()), 8, 8, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 2, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { bindTexture(TEXTURE); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, 0); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } @Override diff --git a/src/unported/java/appeng/client/gui/implementations/WirelessScreen.java b/src/main/java/appeng/client/gui/implementations/WirelessScreen.java similarity index 56% rename from src/unported/java/appeng/client/gui/implementations/WirelessScreen.java rename to src/main/java/appeng/client/gui/implementations/WirelessScreen.java index a3822c19a..2caab3b86 100644 --- a/src/unported/java/appeng/client/gui/implementations/WirelessScreen.java +++ b/src/main/java/appeng/client/gui/implementations/WirelessScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.client.gui.widgets.CommonButtons; @@ -32,37 +33,37 @@ public class WirelessScreen extends AEBaseScreen { public WirelessScreen(WirelessContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 166; + this.backgroundHeight = 166; } @Override public void init() { super.init(); - this.addButton(CommonButtons.togglePowerUnit(this.guiLeft - 18, this.guiTop + 8)); + this.addButton(CommonButtons.togglePowerUnit(this.x - 18, this.y + 8)); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.Wireless.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Wireless.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); - if (container.getRange() > 0) { - final String firstMessage = GuiText.Range.getLocal() + ": " + (container.getRange() / 10.0) + " m"; + if (handler.getRange() > 0) { + final String firstMessage = GuiText.Range.getLocal() + ": " + (handler.getRange() / 10.0) + " m"; final String secondMessage = GuiText.PowerUsageRate.getLocal() + ": " - + Platform.formatPowerLong(container.getDrain(), true); + + Platform.formatPowerLong(handler.getDrain(), true); - final int strWidth = Math.max(this.font.getStringWidth(firstMessage), - this.font.getStringWidth(secondMessage)); - final int cOffset = (this.xSize / 2) - (strWidth / 2); - this.font.drawString(firstMessage, cOffset, 20, 4210752); - this.font.drawString(secondMessage, cOffset, 20 + 12, 4210752); + final int strWidth = Math.max(this.textRenderer.getWidth(firstMessage), + this.textRenderer.getWidth(secondMessage)); + final int cOffset = (this.backgroundWidth / 2) - (strWidth / 2); + this.textRenderer.draw(matrices, firstMessage, cOffset, 20, 4210752); + this.textRenderer.draw(matrices, secondMessage, cOffset, 20 + 12, 4210752); } } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/wireless.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } } diff --git a/src/unported/java/appeng/client/gui/widgets/AETextField.java b/src/main/java/appeng/client/gui/widgets/AETextField.java similarity index 73% rename from src/unported/java/appeng/client/gui/widgets/AETextField.java rename to src/main/java/appeng/client/gui/widgets/AETextField.java index b40927481..fb13e7661 100644 --- a/src/unported/java/appeng/client/gui/widgets/AETextField.java +++ b/src/main/java/appeng/client/gui/widgets/AETextField.java @@ -21,11 +21,13 @@ package appeng.client.gui.widgets; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormats; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.LiteralText; /** * A modified version of the Minecraft text field. You can initialize it over @@ -50,12 +52,12 @@ public class AETextField extends TextFieldWidget { * @param width absolute width * @param height absolute height */ - public AETextField(final FontRenderer fontRenderer, final int xPos, final int yPos, final int width, - final int height) { - super(fontRenderer, xPos + PADDING, yPos + PADDING, width - 2 * PADDING - (int) fontRenderer.getCharWidth('_'), - height - 2 * PADDING, ""); + public AETextField(final TextRenderer fontRenderer, final int xPos, final int yPos, final int width, + final int height) { + super(fontRenderer, xPos + PADDING, yPos + PADDING, width - 2 * PADDING - (int) fontRenderer.getWidth("_"), + height - 2 * PADDING, LiteralText.EMPTY); - this._fontPad = (int) fontRenderer.getCharWidth('_'); + this._fontPad = (int) fontRenderer.getWidth("_"); } @Override @@ -66,15 +68,15 @@ public class AETextField extends TextFieldWidget { final boolean requiresFocus = this.isMouseOver(xPos, yPos); if (!this.isFocused()) { - this.setFocused2(requiresFocus); + this.setFocused(requiresFocus); } return true; } public void selectAll() { - this.setCursorPosition(0); - this.setSelectionPos(this.getMaxStringLength()); + this.setCursor(0); + this.setSelectionEnd(getText().length()); } public void setSelectionColor(int color) { @@ -82,21 +84,21 @@ public class AETextField extends TextFieldWidget { } @Override - public void renderButton(int mouseX, int mouseY, float partial) { - if (this.getVisible()) { + public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float partial) { + if (this.isVisible()) { if (this.isFocused()) { - fill(this.x - PADDING + 1, this.y - PADDING + 1, this.x + this.width + this._fontPad + PADDING - 1, + fill(matrices, this.x - PADDING + 1, this.y - PADDING + 1, this.x + this.width + this._fontPad + PADDING - 1, this.y + this.height + PADDING - 1, 0xFF606060); } else { - fill(this.x - PADDING + 1, this.y - PADDING + 1, this.x + this.width + this._fontPad + PADDING - 1, + fill(matrices, this.x - PADDING + 1, this.y - PADDING + 1, this.x + this.width + this._fontPad + PADDING - 1, this.y + this.height + PADDING - 1, 0xFFA8A8A8); } - super.renderButton(mouseX, mouseY, partial); + super.renderButton(matrices, mouseX, mouseY, partial); } } @Override - public void drawSelectionBox(int startX, int startY, int endX, int endY) { + public void drawSelectionHighlight(int startX, int startY, int endX, int endY) { if (!this.isFocused()) { return; } @@ -139,14 +141,19 @@ public class AETextField extends TextFieldWidget { RenderSystem.enableColorLogicOp(); RenderSystem.logicOp(GlStateManager.LogicOp.OR_REVERSE); bufferbuilder.begin(7, VertexFormats.POSITION); - bufferbuilder.pos(startX, endY, 0.0D).endVertex(); - bufferbuilder.pos(endX, endY, 0.0D).endVertex(); - bufferbuilder.pos(endX, startY, 0.0D).endVertex(); - bufferbuilder.pos(startX, startY, 0.0D).endVertex(); + bufferbuilder.vertex(startX, endY, 0.0D).next(); + bufferbuilder.vertex(endX, endY, 0.0D).next(); + bufferbuilder.vertex(endX, startY, 0.0D).next(); + bufferbuilder.vertex(startX, startY, 0.0D).next(); tessellator.draw(); RenderSystem.disableColorLogicOp(); RenderSystem.enableTexture(); RenderSystem.color4f(1, 1, 1, 1); } + @Override + public void setFocused(boolean focused) { + super.setFocused(focused); + } + } diff --git a/src/unported/java/appeng/client/gui/widgets/ActionButton.java b/src/main/java/appeng/client/gui/widgets/ActionButton.java similarity index 91% rename from src/unported/java/appeng/client/gui/widgets/ActionButton.java rename to src/main/java/appeng/client/gui/widgets/ActionButton.java index 8d4303175..f07d5d8f4 100644 --- a/src/unported/java/appeng/client/gui/widgets/ActionButton.java +++ b/src/main/java/appeng/client/gui/widgets/ActionButton.java @@ -23,6 +23,8 @@ import java.util.regex.Pattern; import appeng.api.config.ActionItems; import appeng.core.localization.ButtonToolTips; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; public class ActionButton extends IconButton implements ITooltip { private static final Pattern PATTERN_NEW_LINE = Pattern.compile("\\n", Pattern.LITERAL); @@ -76,9 +78,9 @@ public class ActionButton extends IconButton implements ITooltip { return iconIndex; } - private String buildMessage(ButtonToolTips displayName, ButtonToolTips displayValue) { - String name = displayName.getTranslationKey().getString(); - String value = displayValue.getTranslationKey().getString(); + private Text buildMessage(ButtonToolTips displayName, ButtonToolTips displayValue) { + String name = displayName.text().getString(); + String value = displayValue.text().getString(); value = PATTERN_NEW_LINE.matcher(value).replaceAll("\n"); final StringBuilder sb = new StringBuilder(value); @@ -91,7 +93,7 @@ public class ActionButton extends IconButton implements ITooltip { sb.replace(i, i + 1, "\n"); } - return name + '\n' + sb; + return new LiteralText(name + '\n' + sb); } } diff --git a/src/unported/java/appeng/client/gui/widgets/CommonButtons.java b/src/main/java/appeng/client/gui/widgets/CommonButtons.java similarity index 100% rename from src/unported/java/appeng/client/gui/widgets/CommonButtons.java rename to src/main/java/appeng/client/gui/widgets/CommonButtons.java diff --git a/src/unported/java/appeng/client/gui/widgets/CustomSlotWidget.java b/src/main/java/appeng/client/gui/widgets/CustomSlotWidget.java similarity index 86% rename from src/unported/java/appeng/client/gui/widgets/CustomSlotWidget.java rename to src/main/java/appeng/client/gui/widgets/CustomSlotWidget.java index 81d87c691..5009c0f6b 100644 --- a/src/unported/java/appeng/client/gui/widgets/CustomSlotWidget.java +++ b/src/main/java/appeng/client/gui/widgets/CustomSlotWidget.java @@ -2,11 +2,12 @@ package appeng.client.gui.widgets; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; -public abstract class CustomSlotWidget extends AbstractGui implements ITooltip { +public abstract class CustomSlotWidget extends DrawableHelper implements ITooltip { private final int x; private final int y; private final int id; @@ -34,7 +35,7 @@ public abstract class CustomSlotWidget extends AbstractGui implements ITooltip { } @Override - public String getMessage() { + public Text getMessage() { return null; } diff --git a/src/unported/java/appeng/client/gui/widgets/IScrollSource.java b/src/main/java/appeng/client/gui/widgets/IScrollSource.java similarity index 100% rename from src/unported/java/appeng/client/gui/widgets/IScrollSource.java rename to src/main/java/appeng/client/gui/widgets/IScrollSource.java diff --git a/src/unported/java/appeng/client/gui/widgets/ISortSource.java b/src/main/java/appeng/client/gui/widgets/ISortSource.java similarity index 100% rename from src/unported/java/appeng/client/gui/widgets/ISortSource.java rename to src/main/java/appeng/client/gui/widgets/ISortSource.java diff --git a/src/unported/java/appeng/client/gui/widgets/ITooltip.java b/src/main/java/appeng/client/gui/widgets/ITooltip.java similarity index 96% rename from src/unported/java/appeng/client/gui/widgets/ITooltip.java rename to src/main/java/appeng/client/gui/widgets/ITooltip.java index 73ef0821c..a4e1f6ce0 100644 --- a/src/unported/java/appeng/client/gui/widgets/ITooltip.java +++ b/src/main/java/appeng/client/gui/widgets/ITooltip.java @@ -18,6 +18,8 @@ package appeng.client.gui.widgets; +import net.minecraft.text.Text; + /** * AEBaseGui controlled Tooltip Interface. */ @@ -28,7 +30,7 @@ public interface ITooltip { * * @return tooltip message */ - String getMessage(); + Text getMessage(); /** * x Location for the object that triggers the tooltip. diff --git a/src/unported/java/appeng/client/gui/widgets/IconButton.java b/src/main/java/appeng/client/gui/widgets/IconButton.java similarity index 80% rename from src/unported/java/appeng/client/gui/widgets/IconButton.java rename to src/main/java/appeng/client/gui/widgets/IconButton.java index 35c19be00..e819b762d 100644 --- a/src/unported/java/appeng/client/gui/widgets/IconButton.java +++ b/src/main/java/appeng/client/gui/widgets/IconButton.java @@ -21,19 +21,20 @@ package appeng.client.gui.widgets; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.texture.TextureManager; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.LiteralText; import net.minecraft.util.Identifier; -import net.minecraftforge.fml.client.gui.GuiUtils; -public abstract class IconButton extends Button implements ITooltip { +public abstract class IconButton extends ButtonWidget implements ITooltip { public static final Identifier TEXTURE_STATES = new Identifier("appliedenergistics2", "textures/guis/states.png"); private boolean halfSize = false; - public IconButton(final int x, final int y, IPressable onPress) { - super(x, y, 16, 16, "", onPress); + public IconButton(final int x, final int y, PressAction onPress) { + super(x, y, 16, 16, LiteralText.EMPTY, onPress); } public void setVisibility(final boolean vis) { @@ -42,7 +43,7 @@ public abstract class IconButton extends Button implements ITooltip { } @Override - public void renderButton(final int mouseX, final int mouseY, float partial) { + public void renderButton(MatrixStack matrices, final int mouseX, final int mouseY, float partial) { MinecraftClient minecraft = MinecraftClient.getInstance(); @@ -71,8 +72,8 @@ public abstract class IconButton extends Button implements ITooltip { final int uv_y = iconIndex / 16; final int uv_x = iconIndex - uv_y * 16; - GuiUtils.drawTexturedModalRect(0, 0, 256 - 16, 256 - 16, 16, 16, 0); - GuiUtils.drawTexturedModalRect(0, 0, uv_x * 16, uv_y * 16, 16, 16, 0); + drawTexture(matrices, 0, 0, 256 - 16, 256 - 16, 16, 16); + drawTexture(matrices, 0, 0, uv_x * 16, uv_y * 16, 16, 16); RenderSystem.popMatrix(); } else { if (this.active) { @@ -84,8 +85,8 @@ public abstract class IconButton extends Button implements ITooltip { final int uv_y = iconIndex / 16; final int uv_x = iconIndex - uv_y * 16; - GuiUtils.drawTexturedModalRect(this.x, this.y, 256 - 16, 256 - 16, 16, 16, 0); - GuiUtils.drawTexturedModalRect(this.x, this.y, uv_x * 16, uv_y * 16, 16, 16, 0); + drawTexture(matrices, this.x, this.y, 256 - 16, 256 - 16, 16, 16); + drawTexture(matrices, this.x, this.y, uv_x * 16, uv_y * 16, 16, 16); } RenderSystem.enableDepthTest(); } diff --git a/src/unported/java/appeng/client/gui/widgets/NumberBox.java b/src/main/java/appeng/client/gui/widgets/NumberBox.java similarity index 83% rename from src/unported/java/appeng/client/gui/widgets/NumberBox.java rename to src/main/java/appeng/client/gui/widgets/NumberBox.java index 602e1e0e9..bf0545cd1 100644 --- a/src/unported/java/appeng/client/gui/widgets/NumberBox.java +++ b/src/main/java/appeng/client/gui/widgets/NumberBox.java @@ -18,24 +18,25 @@ package appeng.client.gui.widgets; -import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.text.LiteralText; // FIXME: Fix this piece of crap (i.e. onChange listener) public class NumberBox extends TextFieldWidget { private final Class type; - public NumberBox(final FontRenderer fontRenderer, final int x, final int y, final int width, final int height, - final Class type) { - super(fontRenderer, x, y, width, height, "0"); + public NumberBox(final TextRenderer fontRenderer, final int x, final int y, final int width, final int height, + final Class type) { + super(fontRenderer, x, y, width, height, new LiteralText("0")); this.type = type; } @Override - public void writeText(final String selectedText) { + public void write(final String selectedText) { final String original = this.getText(); - super.writeText(selectedText); + super.write(selectedText); try { if (this.type == int.class || this.type == Integer.class) { diff --git a/src/unported/java/appeng/client/gui/widgets/ProgressBar.java b/src/main/java/appeng/client/gui/widgets/ProgressBar.java similarity index 72% rename from src/unported/java/appeng/client/gui/widgets/ProgressBar.java rename to src/main/java/appeng/client/gui/widgets/ProgressBar.java index 567f337fe..6983c3b12 100644 --- a/src/unported/java/appeng/client/gui/widgets/ProgressBar.java +++ b/src/main/java/appeng/client/gui/widgets/ProgressBar.java @@ -18,23 +18,24 @@ package appeng.client.gui.widgets; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.widget.Widget; -import net.minecraft.util.Identifier; -import net.minecraftforge.fml.client.gui.GuiUtils; - import appeng.container.interfaces.IProgressProvider; import appeng.core.localization.GuiText; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.widget.AbstractButtonWidget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; -public class ProgressBar extends Widget implements ITooltip { +public class ProgressBar extends AbstractButtonWidget implements ITooltip { private final IProgressProvider source; private final Identifier texture; private final int fill_u; private final int fill_v; private final Direction layout; - private final String titleName; - private String fullMsg; + private final Text titleName; + private Text fullMsg; public ProgressBar(final IProgressProvider source, final String texture, final int posX, final int posY, final int u, final int y, final int width, final int height, final Direction dir) { @@ -42,8 +43,8 @@ public class ProgressBar extends Widget implements ITooltip { } public ProgressBar(final IProgressProvider source, final String texture, final int posX, final int posY, - final int u, final int y, final int width, final int height, final Direction dir, final String title) { - super(posX, posY, width, height, ""); + final int u, final int y, final int width, final int height, final Direction dir, final Text title) { + super(posX, posY, width, height, LiteralText.EMPTY); this.source = source; this.texture = new Identifier("appliedenergistics2", "textures/" + texture); this.fill_u = u; @@ -53,7 +54,7 @@ public class ProgressBar extends Widget implements ITooltip { } @Override - public void renderButton(final int par2, final int par3, final float partial) { + public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) { if (this.visible) { MinecraftClient.getInstance().getTextureManager().bindTexture(this.texture); final int max = this.source.getMaxProgress(); @@ -61,28 +62,30 @@ public class ProgressBar extends Widget implements ITooltip { if (this.layout == Direction.VERTICAL) { final int diff = this.height - (max > 0 ? (this.height * current) / max : 0); - GuiUtils.drawTexturedModalRect(this.x, this.y + diff, this.fill_u, this.fill_v + diff, this.width, - this.height - diff, 0); + drawTexture(matrices, this.x, this.y + diff, this.fill_u, this.fill_v + diff, this.width, + this.height - diff); } else { final int diff = this.width - (max > 0 ? (this.width * current) / max : 0); - GuiUtils.drawTexturedModalRect(this.x, this.y, this.fill_u + diff, this.fill_v, this.width - diff, - this.height, 0); + drawTexture(matrices, this.x, this.y, this.fill_u + diff, this.fill_v, this.width - diff, + this.height); } } } - public void setFullMsg(final String msg) { + public void setFullMsg(final Text msg) { this.fullMsg = msg; } @Override - public String getMessage() { + public Text getMessage() { if (this.fullMsg != null) { return this.fullMsg; } - return (this.titleName != null ? this.titleName : "") + '\n' + this.source.getCurrentProgress() + ' ' - + GuiText.Of.getLocal() + ' ' + this.source.getMaxProgress(); + Text text = this.titleName != null ? this.titleName : LiteralText.EMPTY; + return text.copy().append("\n" + this.source.getCurrentProgress() + " ") + .append(GuiText.Of.textComponent()) + .append(" " + this.source.getMaxProgress()); } @Override diff --git a/src/unported/java/appeng/client/gui/widgets/Scrollbar.java b/src/main/java/appeng/client/gui/widgets/Scrollbar.java similarity index 87% rename from src/unported/java/appeng/client/gui/widgets/Scrollbar.java rename to src/main/java/appeng/client/gui/widgets/Scrollbar.java index 4b842ed18..ab3cac0bd 100644 --- a/src/unported/java/appeng/client/gui/widgets/Scrollbar.java +++ b/src/main/java/appeng/client/gui/widgets/Scrollbar.java @@ -20,9 +20,9 @@ package appeng.client.gui.widgets; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraftforge.fml.client.gui.GuiUtils; - import appeng.client.gui.AEBaseScreen; +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.util.math.MatrixStack; public class Scrollbar implements IScrollSource { @@ -36,17 +36,18 @@ public class Scrollbar implements IScrollSource { private int minScroll = 0; private int currentScroll = 0; - public void draw(final AEBaseScreen g) { + private final DrawableHelper drawable = new DrawableHelper(){}; + + public void draw(MatrixStack matrices, final AEBaseScreen g) { g.bindTexture("minecraft", "gui/container/creative_inventory/tabs.png"); RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); + drawable.setZOffset(g.getZOffset()); if (this.getRange() == 0) { - GuiUtils.drawTexturedModalRect(this.displayX, this.displayY, 232 + this.width, 0, this.width, 15, - g.getBlitOffset()); + drawable.drawTexture(matrices, this.displayX, this.displayY, 232 + this.width, 0, this.width, 15); } else { final int offset = (this.currentScroll - this.minScroll) * (this.height - 15) / this.getRange(); - GuiUtils.drawTexturedModalRect(this.displayX, offset + this.displayY, 232, 0, this.width, 15, - g.getBlitOffset()); + drawable.drawTexture(matrices, this.displayX, offset + this.displayY, 232, 0, this.width, 15); } } diff --git a/src/unported/java/appeng/client/gui/widgets/ServerSettingToggleButton.java b/src/main/java/appeng/client/gui/widgets/ServerSettingToggleButton.java similarity index 100% rename from src/unported/java/appeng/client/gui/widgets/ServerSettingToggleButton.java rename to src/main/java/appeng/client/gui/widgets/ServerSettingToggleButton.java diff --git a/src/unported/java/appeng/client/gui/widgets/SettingToggleButton.java b/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java similarity index 97% rename from src/unported/java/appeng/client/gui/widgets/SettingToggleButton.java rename to src/main/java/appeng/client/gui/widgets/SettingToggleButton.java index 846910fd3..7e52651d7 100644 --- a/src/unported/java/appeng/client/gui/widgets/SettingToggleButton.java +++ b/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java @@ -25,7 +25,8 @@ import java.util.function.Predicate; import java.util.regex.Pattern; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import appeng.api.config.AccessRestriction; @@ -222,21 +223,21 @@ public class SettingToggleButton> extends IconButton { } } - private static void onPress(Button btn) { + private static void onPress(ButtonWidget btn) { if (btn instanceof SettingToggleButton) { ((SettingToggleButton) btn).triggerPress(); } } private void triggerPress() { - boolean backwards = MinecraftClient.getInstance().mouseHelper.isRightDown(); + boolean backwards = MinecraftClient.getInstance().mouse.wasRightButtonClicked(); onPress.handle(this, backwards); } private static void registerApp(final int iconIndex, final Settings setting, final Enum val, final ButtonToolTips title, final Text hint) { final ButtonAppearance a = new ButtonAppearance(); - a.displayName = title.getTranslationKey(); + a.displayName = title.text(); a.displayValue = hint; a.index = iconIndex; appearances.put(new EnumPair(setting, val), a); @@ -244,7 +245,7 @@ public class SettingToggleButton> extends IconButton { private static void registerApp(final int iconIndex, final Settings setting, final Enum val, final ButtonToolTips title, final ButtonToolTips hint) { - registerApp(iconIndex, setting, val, title, hint.getTranslationKey()); + registerApp(iconIndex, setting, val, title, hint.text()); } @Override @@ -278,7 +279,7 @@ public class SettingToggleButton> extends IconButton { } @Override - public String getMessage() { + public Text getMessage() { Text displayName = null; Text displayValue = null; @@ -286,7 +287,7 @@ public class SettingToggleButton> extends IconButton { final ButtonAppearance buttonAppearance = appearances .get(new EnumPair(this.buttonSetting, this.currentValue)); if (buttonAppearance == null) { - return "No Such Message"; + return new LiteralText("No Such Message"); } displayName = buttonAppearance.displayName; @@ -312,7 +313,7 @@ public class SettingToggleButton> extends IconButton { sb.replace(i, i + 1, "\n"); } - return name + '\n' + sb; + return new LiteralText(name + '\n' + sb); } return null; } diff --git a/src/unported/java/appeng/client/gui/widgets/TabButton.java b/src/main/java/appeng/client/gui/widgets/TabButton.java similarity index 75% rename from src/unported/java/appeng/client/gui/widgets/TabButton.java rename to src/main/java/appeng/client/gui/widgets/TabButton.java index 7e0907dd3..ac3878830 100644 --- a/src/unported/java/appeng/client/gui/widgets/TabButton.java +++ b/src/main/java/appeng/client/gui/widgets/TabButton.java @@ -21,13 +21,14 @@ package appeng.client.gui.widgets; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; import net.minecraft.util.Identifier; -public class TabButton extends Button implements ITooltip { +public class TabButton extends ButtonWidget implements ITooltip { public static final Identifier TEXTURE_STATES = new Identifier("appliedenergistics2", "textures/guis/states.png"); private final ItemRenderer itemRenderer; @@ -35,8 +36,8 @@ public class TabButton extends Button implements ITooltip { private int myIcon = -1; private ItemStack myItem; - public TabButton(final int x, final int y, final int ico, final String message, final ItemRenderer ir, - IPressable onPress) { + public TabButton(final int x, final int y, final int ico, final Text message, final ItemRenderer ir, + PressAction onPress) { super(x, y, 22, 22, message, onPress); this.myIcon = ico; @@ -52,20 +53,20 @@ public class TabButton extends Button implements ITooltip { * @param message mouse over message * @param ir renderer */ - public TabButton(final int x, final int y, final ItemStack ico, final String message, final ItemRenderer ir, - IPressable onPress) { + public TabButton(final int x, final int y, final ItemStack ico, final Text message, final ItemRenderer ir, + PressAction onPress) { super(x, y, 22, 22, message, onPress); this.myItem = ico; this.itemRenderer = ir; } @Override - public void renderButton(final int x, final int y, float partial) { + public void renderButton(MatrixStack matrices, final int x, final int y, float partial) { final MinecraftClient minecraft = MinecraftClient.getInstance(); if (this.visible) { RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); - minecraft.textureManager.bindTexture(TEXTURE_STATES); + minecraft.getTextureManager().bindTexture(TEXTURE_STATES); RenderSystem.enableAlphaTest(); @@ -73,25 +74,21 @@ public class TabButton extends Button implements ITooltip { final int offsetX = this.hideEdge > 0 ? 1 : 0; - blit(this.x, this.y, uv_x * 16, 0, 25, 22); + drawTexture(matrices, this.x, this.y, uv_x * 16, 0, 25, 22); if (this.myIcon >= 0) { final int uv_y = this.myIcon / 16; uv_x = this.myIcon - uv_y * 16; - blit(offsetX + this.x + 3, this.y + 3, uv_x * 16, uv_y * 16, 16, 16); + drawTexture(matrices, offsetX + this.x + 3, this.y + 3, uv_x * 16, uv_y * 16, 16, 16); } RenderSystem.disableAlphaTest(); if (this.myItem != null) { - this.itemRenderer.zLevel = 100.0F; - - RenderHelper.enableStandardItemLighting(); - this.itemRenderer.renderItemAndEffectIntoGUI(this.myItem, offsetX + this.x + 3, this.y + 3); - RenderHelper.disableStandardItemLighting(); - - this.itemRenderer.zLevel = 0.0F; + this.itemRenderer.zOffset = 100.0F; + this.itemRenderer.renderInGuiWithOverrides(this.myItem, offsetX + this.x + 3, this.y + 3); + this.itemRenderer.zOffset = 0.0F; } } } diff --git a/src/unported/java/appeng/client/gui/widgets/ToggleButton.java b/src/main/java/appeng/client/gui/widgets/ToggleButton.java similarity index 70% rename from src/unported/java/appeng/client/gui/widgets/ToggleButton.java rename to src/main/java/appeng/client/gui/widgets/ToggleButton.java index d6e7d1026..29485221d 100644 --- a/src/unported/java/appeng/client/gui/widgets/ToggleButton.java +++ b/src/main/java/appeng/client/gui/widgets/ToggleButton.java @@ -23,26 +23,27 @@ import java.util.regex.Pattern; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import net.minecraftforge.fml.client.gui.GuiUtils; -public class ToggleButton extends Button implements ITooltip { +public class ToggleButton extends ButtonWidget implements ITooltip { public static final Identifier TEXTURE_STATES = new Identifier("appliedenergistics2", "textures/guis/states.png"); private static final Pattern PATTERN_NEW_LINE = Pattern.compile("\\n", Pattern.LITERAL); private final int iconIdxOn; private final int iconIdxOff; - private final String displayName; - private final String displayHint; + private final Text displayName; + private final Text displayHint; private boolean isActive; - public ToggleButton(final int x, final int y, final int on, final int off, final String displayName, - final String displayHint, IPressable onPress) { - super(x, y, 16, 16, "", onPress); + public ToggleButton(final int x, final int y, final int on, final int off, final Text displayName, + final Text displayHint, PressAction onPress) { + super(x, y, 16, 16, LiteralText.EMPTY, onPress); this.iconIdxOn = on; this.iconIdxOff = off; this.displayName = displayName; @@ -54,18 +55,18 @@ public class ToggleButton extends Button implements ITooltip { } @Override - public void renderButton(final int mouseX, final int mouseY, final float partial) { + public void renderButton(MatrixStack matrices, final int mouseX, final int mouseY, final float partial) { if (this.visible) { final int iconIndex = this.getIconIndex(); RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); - MinecraftClient.getInstance().textureManager.bindTexture(TEXTURE_STATES); + MinecraftClient.getInstance().getTextureManager().bindTexture(TEXTURE_STATES); final int uv_y = iconIndex / 16; final int uv_x = iconIndex - uv_y * 16; - GuiUtils.drawTexturedModalRect(this.x, this.y, 256 - 16, 256 - 16, 16, 16, 0); - GuiUtils.drawTexturedModalRect(this.x, this.y, uv_x * 16, uv_y * 16, 16, 16, 0); + drawTexture(matrices, this.x, this.y, 256 - 16, 256 - 16, 16, 16); + drawTexture(matrices, this.x, this.y, uv_x * 16, uv_y * 16, 16, 16); } } @@ -74,17 +75,10 @@ public class ToggleButton extends Button implements ITooltip { } @Override - public String getMessage() { + public Text getMessage() { if (this.displayName != null) { - String name = I18n.format(this.displayName); - String value = I18n.format(this.displayHint); - - if (name == null || name.isEmpty()) { - name = this.displayName; - } - if (value == null || value.isEmpty()) { - value = this.displayHint; - } + String name = this.displayName.getString(); + String value = this.displayHint.getString(); value = PATTERN_NEW_LINE.matcher(value).replaceAll("\n"); final StringBuilder sb = new StringBuilder(value); @@ -97,7 +91,7 @@ public class ToggleButton extends Button implements ITooltip { sb.replace(i, i + 1, "\n"); } - return name + '\n' + sb; + return new LiteralText(name + '\n' + sb); } return null; } diff --git a/src/unported/java/appeng/client/me/ClientDCInternalInv.java b/src/main/java/appeng/client/me/ClientDCInternalInv.java similarity index 96% rename from src/unported/java/appeng/client/me/ClientDCInternalInv.java rename to src/main/java/appeng/client/me/ClientDCInternalInv.java index fc5964f57..11dc45a8a 100644 --- a/src/unported/java/appeng/client/me/ClientDCInternalInv.java +++ b/src/main/java/appeng/client/me/ClientDCInternalInv.java @@ -36,7 +36,7 @@ public class ClientDCInternalInv implements Comparable { public ClientDCInternalInv(final int size, final long id, final long sortBy, final Text name) { this.inventory = new AppEngInternalInventory(null, size); this.searchName = name.getString().toLowerCase(); - this.formattedName = name.getFormattedText(); + this.formattedName = name.getString(); // FIXME FABRIC no longer formatted! this.id = id; this.sortBy = sortBy; } diff --git a/src/unported/java/appeng/client/me/FluidRepo.java b/src/main/java/appeng/client/me/FluidRepo.java similarity index 100% rename from src/unported/java/appeng/client/me/FluidRepo.java rename to src/main/java/appeng/client/me/FluidRepo.java diff --git a/src/unported/java/appeng/client/me/InternalFluidSlotME.java b/src/main/java/appeng/client/me/InternalFluidSlotME.java similarity index 100% rename from src/unported/java/appeng/client/me/InternalFluidSlotME.java rename to src/main/java/appeng/client/me/InternalFluidSlotME.java diff --git a/src/unported/java/appeng/client/me/InternalSlotME.java b/src/main/java/appeng/client/me/InternalSlotME.java similarity index 100% rename from src/unported/java/appeng/client/me/InternalSlotME.java rename to src/main/java/appeng/client/me/InternalSlotME.java diff --git a/src/unported/java/appeng/client/me/ItemRepo.java b/src/main/java/appeng/client/me/ItemRepo.java similarity index 100% rename from src/unported/java/appeng/client/me/ItemRepo.java rename to src/main/java/appeng/client/me/ItemRepo.java diff --git a/src/unported/java/appeng/client/me/SlotDisconnected.java b/src/main/java/appeng/client/me/SlotDisconnected.java similarity index 87% rename from src/unported/java/appeng/client/me/SlotDisconnected.java rename to src/main/java/appeng/client/me/SlotDisconnected.java index 0e9977049..30a2b80f2 100644 --- a/src/unported/java/appeng/client/me/SlotDisconnected.java +++ b/src/main/java/appeng/client/me/SlotDisconnected.java @@ -36,17 +36,17 @@ public class SlotDisconnected extends AppEngSlot { } @Override - public boolean isItemValid(final ItemStack par1ItemStack) { + public boolean canInsert(final ItemStack par1ItemStack) { return false; } @Override - public void putStack(final ItemStack par1ItemStack) { + public void setStack(final ItemStack par1ItemStack) { } @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { + public boolean canTakeItems(final PlayerEntity par1PlayerEntity) { return false; } @@ -66,17 +66,17 @@ public class SlotDisconnected extends AppEngSlot { } @Override - public boolean getHasStack() { + public boolean hasStack() { return !this.getStack().isEmpty(); } @Override - public int getSlotStackLimit() { + public int getMaxStackAmount() { return 0; } @Override - public ItemStack decrStackSize(final int par1) { + public ItemStack takeStack(final int par1) { return ItemStack.EMPTY; } diff --git a/src/unported/java/appeng/client/me/SlotFluidME.java b/src/main/java/appeng/client/me/SlotFluidME.java similarity index 80% rename from src/unported/java/appeng/client/me/SlotFluidME.java rename to src/main/java/appeng/client/me/SlotFluidME.java index ea271cc87..98eaf4fd6 100644 --- a/src/unported/java/appeng/client/me/SlotFluidME.java +++ b/src/main/java/appeng/client/me/SlotFluidME.java @@ -22,7 +22,7 @@ import javax.annotation.Nonnull; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraftforge.items.SlotItemHandler; +import net.minecraft.screen.slot.Slot; import appeng.api.storage.data.IAEFluidStack; import appeng.fluids.container.slots.IMEFluidSlot; @@ -32,9 +32,9 @@ import appeng.fluids.container.slots.IMEFluidSlot; * @version rv6 - 22/05/2018 * @since rv6 22/05/2018 */ -public class SlotFluidME extends SlotItemHandler implements IMEFluidSlot { +public class SlotFluidME extends Slot implements IMEFluidSlot { - private InternalFluidSlotME slot; + private final InternalFluidSlotME slot; public SlotFluidME(InternalFluidSlotME slot) { super(null, 0, slot.getxPosition(), slot.getyPosition()); @@ -50,7 +50,7 @@ public class SlotFluidME extends SlotItemHandler implements IMEFluidSlot { } @Override - public boolean isItemValid(final ItemStack par1ItemStack) { + public boolean canInsert(ItemStack stack) { return false; } @@ -61,7 +61,7 @@ public class SlotFluidME extends SlotItemHandler implements IMEFluidSlot { } @Override - public boolean getHasStack() { + public boolean hasStack() { if (this.slot.hasPower()) { return this.getAEFluidStack() != null; } @@ -69,23 +69,23 @@ public class SlotFluidME extends SlotItemHandler implements IMEFluidSlot { } @Override - public void putStack(final ItemStack par1ItemStack) { + public void setStack(final ItemStack par1ItemStack) { } @Override - public int getSlotStackLimit() { + public int getMaxStackAmount() { return 0; } @Nonnull @Override - public ItemStack decrStackSize(final int par1) { + public ItemStack takeStack(final int par1) { return ItemStack.EMPTY; } @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { + public boolean canTakeItems(final PlayerEntity par1PlayerEntity) { return false; } } diff --git a/src/unported/java/appeng/client/me/SlotME.java b/src/main/java/appeng/client/me/SlotME.java similarity index 81% rename from src/unported/java/appeng/client/me/SlotME.java rename to src/main/java/appeng/client/me/SlotME.java index 43c54c5e6..c6dbbf770 100644 --- a/src/unported/java/appeng/client/me/SlotME.java +++ b/src/main/java/appeng/client/me/SlotME.java @@ -20,11 +20,11 @@ package appeng.client.me; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraftforge.items.SlotItemHandler; +import net.minecraft.screen.slot.Slot; import appeng.api.storage.data.IAEItemStack; -public class SlotME extends SlotItemHandler { +public class SlotME extends Slot { private final InternalSlotME mySlot; @@ -41,7 +41,7 @@ public class SlotME extends SlotItemHandler { } @Override - public boolean isItemValid(final ItemStack par1ItemStack) { + public boolean canInsert(ItemStack stack) { return false; } @@ -54,7 +54,7 @@ public class SlotME extends SlotItemHandler { } @Override - public boolean getHasStack() { + public boolean hasStack() { if (this.mySlot.hasPower()) { return !this.getStack().isEmpty(); } @@ -62,22 +62,21 @@ public class SlotME extends SlotItemHandler { } @Override - public void putStack(final ItemStack par1ItemStack) { - + public void setStack(ItemStack stack) { } @Override - public int getSlotStackLimit() { + public int getMaxStackAmount() { return 0; } @Override - public ItemStack decrStackSize(final int par1) { + public ItemStack takeStack(final int par1) { return ItemStack.EMPTY; } @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { + public boolean canTakeItems(final PlayerEntity par1PlayerEntity) { return false; } } diff --git a/src/unported/java/appeng/client/render/StackSizeRenderer.java b/src/main/java/appeng/client/render/StackSizeRenderer.java similarity index 87% rename from src/unported/java/appeng/client/render/StackSizeRenderer.java rename to src/main/java/appeng/client/render/StackSizeRenderer.java index ebd85a11b..85c843967 100644 --- a/src/unported/java/appeng/client/render/StackSizeRenderer.java +++ b/src/main/java/appeng/client/render/StackSizeRenderer.java @@ -20,10 +20,10 @@ package appeng.client.render; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.AffineTransformation; -import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.render.Tessellator; import net.minecraft.client.util.math.Vector3f; import appeng.api.storage.data.IAEItemStack; @@ -43,7 +43,7 @@ public class StackSizeRenderer { private static final ISlimReadableNumberConverter SLIM_CONVERTER = ReadableNumberConverter.INSTANCE; private static final IWideReadableNumberConverter WIDE_CONVERTER = ReadableNumberConverter.INSTANCE; - public void renderStackSize(FontRenderer fontRenderer, IAEItemStack aeStack, int xPos, int yPos) { + public void renderStackSize(TextRenderer fontRenderer, IAEItemStack aeStack, int xPos, int yPos) { if (aeStack != null) { if (aeStack.getStackSize() == 0 && aeStack.isCraftable()) { final String craftLabelText = AEConfig.instance().isUseLargeFonts() ? GuiText.LargeFontCraft.getLocal() @@ -61,7 +61,7 @@ public class StackSizeRenderer { } } - public static void renderSizeLabel(FontRenderer fontRenderer, float xPos, float yPos, String text) { + public static void renderSizeLabel(TextRenderer fontRenderer, float xPos, float yPos, String text) { final float scaleFactor = AEConfig.instance().isUseLargeFonts() ? 0.85f : 0.5f; final float inverseScaleFactor = 1.0f / scaleFactor; @@ -72,12 +72,12 @@ public class StackSizeRenderer { null, new Vector3f(scaleFactor, scaleFactor, scaleFactor), null); RenderSystem.disableBlend(); - final int X = (int) ((xPos + offset + 16.0f - fontRenderer.getStringWidth(text) * scaleFactor) + final int X = (int) ((xPos + offset + 16.0f - fontRenderer.getWidth(text) * scaleFactor) * inverseScaleFactor); final int Y = (int) ((yPos + offset + 16.0f - 7.0f * scaleFactor) * inverseScaleFactor); - VertexConsumerProvider.Impl buffer = VertexConsumerProvider.getImpl(Tessellator.getInstance().getBuffer()); - fontRenderer.renderString(text, X, Y, 16777215, true, tm.getMatrix(), buffer, false, 0, 15728880); - buffer.finish(); + VertexConsumerProvider.Immediate buffer = VertexConsumerProvider.immediate(Tessellator.getInstance().getBuffer()); + fontRenderer.draw(text, X, Y, 16777215, true, tm.getMatrix(), buffer, false, 0, 15728880); + buffer.draw(); RenderSystem.enableBlend(); } diff --git a/src/unported/java/appeng/client/render/StaticBlockColor.java b/src/main/java/appeng/client/render/StaticBlockColor.java similarity index 100% rename from src/unported/java/appeng/client/render/StaticBlockColor.java rename to src/main/java/appeng/client/render/StaticBlockColor.java diff --git a/src/unported/java/appeng/client/render/TesrRenderHelper.java b/src/main/java/appeng/client/render/TesrRenderHelper.java similarity index 92% rename from src/unported/java/appeng/client/render/TesrRenderHelper.java rename to src/main/java/appeng/client/render/TesrRenderHelper.java index fd6b7217f..c6d33c113 100644 --- a/src/unported/java/appeng/client/render/TesrRenderHelper.java +++ b/src/main/java/appeng/client/render/TesrRenderHelper.java @@ -19,13 +19,13 @@ package appeng.client.render; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.util.math.Vector3f; import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.item.ItemStack; import net.minecraft.util.math.Direction; @@ -93,7 +93,7 @@ public class TesrRenderHelper { matrixStack.scale(scale, scale, 0.0002f); MinecraftClient.getInstance().getItemRenderer().renderItem(itemStack, ModelTransformation.Mode.GUI, - combinedLightIn, OverlayTexture.NO_OVERLAY, matrixStack, buffers); + combinedLightIn, OverlayTexture.DEFAULT_UV, matrixStack, buffers); matrixStack.pop(); @@ -120,14 +120,14 @@ public class TesrRenderHelper { final String renderedStackSize = NUMBER_CONVERTER.toWideReadableForm(stackSize); // Render the item count - final FontRenderer fr = MinecraftClient.getInstance().fontRenderer; - final int width = fr.getStringWidth(renderedStackSize); + final TextRenderer fr = MinecraftClient.getInstance().textRenderer; + final int width = fr.getWidth(renderedStackSize); matrixStack.push(); matrixStack.translate(0.0f, spacing, 0.02f); matrixStack.scale(1.0f / 62.0f, -1.0f / 62.0f, 1.0f / 62.0f); matrixStack.scale(0.5f, 0.5f, 0); matrixStack.translate(-0.5f * width, 0.0f, 0.5f); - fr.renderString(renderedStackSize, 0, 0, -1, false, matrixStack.peek().getMatrix(), buffers, false, 0, + fr.draw(renderedStackSize, 0, 0, -1, false, matrixStack.peek().getModel(), buffers, false, 0, 15728880); matrixStack.pop(); diff --git a/src/unported/java/appeng/client/render/crafting/CraftingCubeRendering.java b/src/main/java/appeng/client/render/crafting/CraftingCubeRendering.java similarity index 100% rename from src/unported/java/appeng/client/render/crafting/CraftingCubeRendering.java rename to src/main/java/appeng/client/render/crafting/CraftingCubeRendering.java diff --git a/src/unported/java/appeng/client/render/model/DriveModelData.java b/src/main/java/appeng/client/render/model/DriveModelData.java similarity index 100% rename from src/unported/java/appeng/client/render/model/DriveModelData.java rename to src/main/java/appeng/client/render/model/DriveModelData.java diff --git a/src/unported/java/appeng/client/render/renderable/ItemRenderable.java b/src/main/java/appeng/client/render/renderable/ItemRenderable.java similarity index 100% rename from src/unported/java/appeng/client/render/renderable/ItemRenderable.java rename to src/main/java/appeng/client/render/renderable/ItemRenderable.java diff --git a/src/unported/java/appeng/client/render/renderable/Renderable.java b/src/main/java/appeng/client/render/renderable/Renderable.java similarity index 100% rename from src/unported/java/appeng/client/render/renderable/Renderable.java rename to src/main/java/appeng/client/render/renderable/Renderable.java diff --git a/src/unported/java/appeng/client/render/spatial/SpatialPylonRendering.java b/src/main/java/appeng/client/render/spatial/SpatialPylonRendering.java similarity index 100% rename from src/unported/java/appeng/client/render/spatial/SpatialPylonRendering.java rename to src/main/java/appeng/client/render/spatial/SpatialPylonRendering.java diff --git a/src/unported/java/appeng/client/render/tesr/CrankTESR.java b/src/main/java/appeng/client/render/tesr/CrankTESR.java similarity index 96% rename from src/unported/java/appeng/client/render/tesr/CrankTESR.java rename to src/main/java/appeng/client/render/tesr/CrankTESR.java index bf0e50e67..3a498ab32 100644 --- a/src/unported/java/appeng/client/render/tesr/CrankTESR.java +++ b/src/main/java/appeng/client/render/tesr/CrankTESR.java @@ -63,7 +63,7 @@ public class CrankTESR extends BlockEntityRenderer { BlockRenderManager dispatcher = MinecraftClient.getInstance().getBlockRenderManager(); BakedModel model = dispatcher.getModel(blockState); VertexConsumer buffer = buffers.getBuffer(TexturedRenderLayers.getEntityTranslucentCull()); - dispatcher.getModelRenderer().renderModelBrightnessColor(ms.peek(), buffer, null, model, 1, 1, 1, + dispatcher.getModelRenderer().render(ms.peek(), buffer, null, model, 1, 1, 1, combinedLightIn, combinedOverlayIn); ms.pop(); diff --git a/src/unported/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java b/src/main/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java similarity index 91% rename from src/unported/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java rename to src/main/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java index 60c949289..2282f495f 100644 --- a/src/unported/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java +++ b/src/main/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java @@ -8,8 +8,6 @@ import net.minecraft.client.render.VertexFormats; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.util.math.MatrixStack; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.Vector3f; @@ -61,8 +59,8 @@ public class DriveLedTileEntityRenderer extends BlockEntityRenderer SPRITES = ImmutableList.of( + TEXTURE_INSIDE + ); + public InscriberTESR(BlockEntityRenderDispatcher rendererDispatcherIn) { super(rendererDispatcherIn); } @@ -173,13 +180,13 @@ public final class InscriberTESR extends BlockEntityRenderer storageBlockTag = ItemTags.getContainer().get(TAG_STORAGE_BLOCKS); + if (storageBlockTag == null || !stack.getItem().isIn(storageBlockTag)) { ms.scale(0.5f, 0.5f, 0.5f); } @@ -207,12 +215,6 @@ public final class InscriberTESR extends BlockEntityRenderer locked = new HashSet<>(); @@ -252,7 +253,7 @@ public abstract class AEBaseContainer extends Container { return; } - this.updateProgressBar(idx, (int) value); + this.setProperty(idx, (int) value); } public void stringSync(final int idx, final String value) { @@ -261,8 +262,8 @@ public abstract class AEBaseContainer extends Container { } } - protected void bindPlayerInventory(final PlayerInventory PlayerInventory, final int offsetX, final int offsetY) { - FixedItemInv ih = new PlayerInvWrapper(PlayerInventory); + protected void bindPlayerInventory(final PlayerInventory playerInventory, final int offsetX, final int offsetY) { + FixedItemInv ih = new FixedInventoryVanillaWrapper(playerInventory); // bind player inventory for (int i = 0; i < 3; i++) { @@ -297,8 +298,12 @@ public abstract class AEBaseContainer extends Container { } } + public List getListeners() { + return ((ScreenHandlerListeners)this).ae2_getListeners(); + } + @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.sendCustomName(); if (Platform.isServer()) { @@ -307,28 +312,28 @@ public abstract class AEBaseContainer extends Container { this.setValidContainer(false); } - for (final IContainerListener listener : this.listeners) { + for (final ScreenHandlerListener listener : this.getListeners()) { for (final SyncData sd : this.syncData.values()) { sd.tick(listener); } } } - super.detectAndSendChanges(); + super.sendContentUpdates(); } @Override - public ItemStack transferStackInSlot(final PlayerEntity p, final int idx) { + public ItemStack transferSlot(final PlayerEntity p, final int idx) { if (Platform.isClient()) { return ItemStack.EMPTY; } - final AppEngSlot clickSlot = (AppEngSlot) this.inventorySlots.get(idx); // require AE SLots! + final AppEngSlot clickSlot = (AppEngSlot) this.slots.get(idx); // require AE SLots! if (clickSlot instanceof DisabledSlot || clickSlot instanceof InaccessibleSlot) { return ItemStack.EMPTY; } - if (clickSlot != null && clickSlot.getHasStack()) { + if (clickSlot != null && clickSlot.hasStack()) { ItemStack tis = clickSlot.getStack(); if (tis.isEmpty()) { @@ -345,11 +350,11 @@ public abstract class AEBaseContainer extends Container { if (!tis.isEmpty()) { // target slots in the container... - for (final Object inventorySlot : this.inventorySlots) { + for (final Object inventorySlot : this.slots) { final AppEngSlot cs = (AppEngSlot) inventorySlot; if (!(cs.isPlayerSide()) && !(cs instanceof FakeSlot) && !(cs instanceof CraftingMatrixSlot)) { - if (cs.isItemValid(tis)) { + if (cs.canInsert(tis)) { selectedSlots.add(cs); } } @@ -359,11 +364,11 @@ public abstract class AEBaseContainer extends Container { tis = tis.copy(); // target slots in the container... - for (final Object inventorySlot : this.inventorySlots) { + for (final Object inventorySlot : this.slots) { final AppEngSlot cs = (AppEngSlot) inventorySlot; if ((cs.isPlayerSide()) && !(cs instanceof FakeSlot) && !(cs instanceof CraftingMatrixSlot)) { - if (cs.isItemValid(tis)) { + if (cs.canInsert(tis)) { selectedSlots.add(cs); } } @@ -376,7 +381,7 @@ public abstract class AEBaseContainer extends Container { if (selectedSlots.isEmpty() && clickSlot.isPlayerSide()) { if (!tis.isEmpty()) { // target slots in the container... - for (final Object inventorySlot : this.inventorySlots) { + for (final Object inventorySlot : this.slots) { final AppEngSlot cs = (AppEngSlot) inventorySlot; final ItemStack destination = cs.getStack(); @@ -384,7 +389,7 @@ public abstract class AEBaseContainer extends Container { if (Platform.itemComparisons().isSameItem(destination, tis)) { break; } else if (destination.isEmpty()) { - cs.putStack(tis.copy()); + cs.setStack(tis.copy()); this.updateSlot(cs); break; } @@ -400,14 +405,14 @@ public abstract class AEBaseContainer extends Container { continue; } - if (d.isItemValid(tis)) { - if (d.getHasStack()) { + if (d.canInsert(tis)) { + if (d.hasStack()) { final ItemStack t = d.getStack().copy(); if (Platform.itemComparisons().isSameItem(t, tis)) { int maxSize = t.getMaxCount(); - if (maxSize > d.getSlotStackLimit()) { - maxSize = d.getSlotStackLimit(); + if (maxSize > d.getMaxStackAmount()) { + maxSize = d.getMaxStackAmount(); } int placeable = maxSize - t.getCount(); @@ -419,11 +424,11 @@ public abstract class AEBaseContainer extends Container { t.setCount(t.getCount() + placeable); tis.setCount(tis.getCount() - placeable); - d.putStack(t); + d.setStack(t); if (tis.getCount() <= 0) { - clickSlot.putStack(ItemStack.EMPTY); - d.onSlotChanged(); + clickSlot.setStack(ItemStack.EMPTY); + d.markDirty(); this.updateSlot(clickSlot); this.updateSlot(d); @@ -444,14 +449,14 @@ public abstract class AEBaseContainer extends Container { continue; } - if (d.isItemValid(tis)) { - if (d.getHasStack()) { + if (d.canInsert(tis)) { + if (d.hasStack()) { final ItemStack t = d.getStack().copy(); if (Platform.itemComparisons().isSameItem(t, tis)) { int maxSize = t.getMaxCount(); - if (maxSize > d.getSlotStackLimit()) { - maxSize = d.getSlotStackLimit(); + if (maxSize > d.getMaxStackAmount()) { + maxSize = d.getMaxStackAmount(); } int placeable = maxSize - t.getCount(); @@ -463,11 +468,11 @@ public abstract class AEBaseContainer extends Container { t.setCount(t.getCount() + placeable); tis.setCount(tis.getCount() - placeable); - d.putStack(t); + d.setStack(t); if (tis.getCount() <= 0) { - clickSlot.putStack(ItemStack.EMPTY); - d.onSlotChanged(); + clickSlot.setStack(ItemStack.EMPTY); + d.markDirty(); this.updateSlot(clickSlot); this.updateSlot(d); @@ -479,8 +484,8 @@ public abstract class AEBaseContainer extends Container { } } else { int maxSize = tis.getMaxCount(); - if (maxSize > d.getSlotStackLimit()) { - maxSize = d.getSlotStackLimit(); + if (maxSize > d.getMaxStackAmount()) { + maxSize = d.getMaxStackAmount(); } final ItemStack tmp = tis.copy(); @@ -489,11 +494,11 @@ public abstract class AEBaseContainer extends Container { } tis.setCount(tis.getCount() - tmp.getCount()); - d.putStack(tmp); + d.setStack(tmp); if (tis.getCount() <= 0) { - clickSlot.putStack(ItemStack.EMPTY); - d.onSlotChanged(); + clickSlot.setStack(ItemStack.EMPTY); + d.markDirty(); this.updateSlot(clickSlot); this.updateSlot(d); @@ -506,7 +511,7 @@ public abstract class AEBaseContainer extends Container { } } - clickSlot.putStack(!tis.isEmpty() ? tis : ItemStack.EMPTY); + clickSlot.setStack(!tis.isEmpty() ? tis : ItemStack.EMPTY); } this.updateSlot(clickSlot); @@ -514,17 +519,17 @@ public abstract class AEBaseContainer extends Container { } @Override - public final void updateProgressBar(final int idx, final int value) { + public final void setProperty(final int idx, final int value) { if (this.syncData.containsKey(idx)) { this.syncData.get(idx).update((long) value); } } @Override - public boolean canInteractWith(final PlayerEntity PlayerEntity) { + public boolean canUse(PlayerEntity player) { if (this.isValidContainer()) { if (this.tileEntity instanceof Inventory) { - return ((Inventory) this.tileEntity).isUsableByPlayer(PlayerEntity); + return ((Inventory) this.tileEntity).canPlayerUse(player); } return true; } @@ -532,12 +537,12 @@ public abstract class AEBaseContainer extends Container { } @Override - public boolean canDragIntoSlot(final Slot s) { - return ((AppEngSlot) s).isDraggable(); + public boolean canInsertIntoSlot(Slot slot) { + return ((AppEngSlot) slot).isDraggable(); } public void doAction(final ServerPlayerEntity player, final InventoryAction action, final int slot, final long id) { - if (slot >= 0 && slot < this.inventorySlots.size()) { + if (slot >= 0 && slot < this.slots.size()) { final Slot s = this.getSlot(slot); if (s instanceof CraftingTermSlot) { @@ -552,15 +557,15 @@ public abstract class AEBaseContainer extends Container { } if (s instanceof FakeSlot) { - final ItemStack hand = player.inventory.getItemStack(); + final ItemStack hand = player.inventory.getCursorStack(); switch (action) { case PICKUP_OR_SET_DOWN: if (hand.isEmpty()) { - s.putStack(ItemStack.EMPTY); + s.setStack(ItemStack.EMPTY); } else { - s.putStack(hand.copy()); + s.setStack(hand.copy()); } break; @@ -569,7 +574,7 @@ public abstract class AEBaseContainer extends Container { if (!hand.isEmpty()) { final ItemStack is = hand.copy(); is.setCount(1); - s.putStack(is); + s.setStack(is); } break; @@ -586,11 +591,11 @@ public abstract class AEBaseContainer extends Container { is.setCount(1); } - s.putStack(is); + s.setStack(is); } else if (!hand.isEmpty()) { is = hand.copy(); is.setCount(1); - s.putStack(is); + s.setStack(is); } break; @@ -603,16 +608,17 @@ public abstract class AEBaseContainer extends Container { } if (action == InventoryAction.MOVE_REGION) { - final List from = new ArrayList<>(); + final List from = new ArrayList<>(); - for (final Object j : this.inventorySlots) { - if (j instanceof Slot && j.getClass() == s.getClass() && !(j instanceof CraftingTermSlot)) { - from.add((Slot) j); + for (int i = 0; i < this.slots.size(); i++) { + Slot j = this.slots.get(i); + if (j.getClass() == s.getClass() && !(j instanceof CraftingTermSlot)) { + from.add(i); } } - for (final Slot fr : from) { - this.transferStackInSlot(player, fr.slotNumber); + for (final int fromIndex : from) { + this.transferSlot(player, fromIndex); } } @@ -655,7 +661,7 @@ public abstract class AEBaseContainer extends Container { } final int releaseQty = 1; - final ItemStack isg = player.inventory.getItemStack(); + final ItemStack isg = player.inventory.getCursorStack(); if (!isg.isEmpty() && releaseQty > 0) { IAEItemStack ais = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class) @@ -688,7 +694,7 @@ public abstract class AEBaseContainer extends Container { if (slotItem != null) { int liftQty = 1; - final ItemStack item = player.inventory.getItemStack(); + final ItemStack item = player.inventory.getCursorStack(); if (!item.isEmpty()) { if (item.getCount() >= item.getMaxCount()) { @@ -723,28 +729,28 @@ public abstract class AEBaseContainer extends Container { return; } - if (player.inventory.getItemStack().isEmpty()) { + if (player.inventory.getCursorStack().isEmpty()) { if (slotItem != null) { IAEItemStack ais = slotItem.copy(); ais.setStackSize(ais.getDefinition().getMaxCount()); ais = Platform.poweredExtraction(this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource()); if (ais != null) { - player.inventory.setItemStack(ais.createItemStack()); + player.inventory.setCursorStack(ais.createItemStack()); } else { - player.inventory.setItemStack(ItemStack.EMPTY); + player.inventory.setCursorStack(ItemStack.EMPTY); } this.updateHeld(player); } } else { IAEItemStack ais = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class) - .createStack(player.inventory.getItemStack()); + .createStack(player.inventory.getCursorStack()); ais = Platform.poweredInsert(this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource()); if (ais != null) { - player.inventory.setItemStack(ais.createItemStack()); + player.inventory.setCursorStack(ais.createItemStack()); } else { - player.inventory.setItemStack(ItemStack.EMPTY); + player.inventory.setCursorStack(ItemStack.EMPTY); } this.updateHeld(player); } @@ -755,7 +761,7 @@ public abstract class AEBaseContainer extends Container { return; } - if (player.inventory.getItemStack().isEmpty()) { + if (player.inventory.getCursorStack().isEmpty()) { if (slotItem != null) { IAEItemStack ais = slotItem.copy(); final long maxSize = ais.getDefinition().getMaxCount(); @@ -770,23 +776,23 @@ public abstract class AEBaseContainer extends Container { } if (ais != null) { - player.inventory.setItemStack(ais.createItemStack()); + player.inventory.setCursorStack(ais.createItemStack()); } else { - player.inventory.setItemStack(ItemStack.EMPTY); + player.inventory.setCursorStack(ItemStack.EMPTY); } this.updateHeld(player); } } else { IAEItemStack ais = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class) - .createStack(player.inventory.getItemStack()); + .createStack(player.inventory.getCursorStack()); ais.setStackSize(1); ais = Platform.poweredInsert(this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource()); if (ais == null) { - final ItemStack is = player.inventory.getItemStack(); + final ItemStack is = player.inventory.getCursorStack(); is.setCount(is.getCount() - 1); if (is.getCount() <= 0) { - player.inventory.setItemStack(ItemStack.EMPTY); + player.inventory.setCursorStack(ItemStack.EMPTY); } this.updateHeld(player); } @@ -794,10 +800,10 @@ public abstract class AEBaseContainer extends Container { break; case CREATIVE_DUPLICATE: - if (player.abilities.isCreativeMode && slotItem != null) { + if (player.isCreative() && slotItem != null) { final ItemStack is = slotItem.createItemStack(); is.setCount(is.getMaxCount()); - player.inventory.setItemStack(is); + player.inventory.setCursorStack(is); this.updateHeld(player); } break; @@ -842,7 +848,7 @@ public abstract class AEBaseContainer extends Container { protected void updateHeld(final ServerPlayerEntity p) { if (Platform.isServer()) { NetworkHandler.instance().sendTo(new InventoryActionPacket(InventoryAction.UPDATE_HAND, 0, - AEItemStack.fromItemStack(p.inventory.getItemStack())), p); + AEItemStack.fromItemStack(p.inventory.getCursorStack())), p); } } @@ -865,7 +871,7 @@ public abstract class AEBaseContainer extends Container { private void updateSlot(final Slot clickSlot) { // ??? - this.detectAndSendChanges(); + this.sendContentUpdates(); } private void sendCustomName() { @@ -924,21 +930,21 @@ public abstract class AEBaseContainer extends Container { // can take? - if (!isA.isEmpty() && !a.canTakeStack(this.getPlayerInventory().player)) { + if (!isA.isEmpty() && !a.canTakeItems(this.getPlayerInventory().player)) { return; } - if (!isB.isEmpty() && !b.canTakeStack(this.getPlayerInventory().player)) { + if (!isB.isEmpty() && !b.canTakeItems(this.getPlayerInventory().player)) { return; } // swap valid? - if (!isB.isEmpty() && !a.isItemValid(isB)) { + if (!isB.isEmpty() && !a.canInsert(isB)) { return; } - if (!isA.isEmpty() && !b.isItemValid(isA)) { + if (!isA.isEmpty() && !b.canInsert(isA)) { return; } @@ -946,32 +952,32 @@ public abstract class AEBaseContainer extends Container { ItemStack testB = isA.isEmpty() ? ItemStack.EMPTY : isA.copy(); // can put some back? - if (!testA.isEmpty() && testA.getCount() > a.getSlotStackLimit()) { + if (!testA.isEmpty() && testA.getCount() > a.getMaxStackAmount()) { if (!testB.isEmpty()) { return; } final int totalA = testA.getCount(); - testA.setCount(a.getSlotStackLimit()); + testA.setCount(a.getMaxStackAmount()); testB = testA.copy(); testB.setCount(totalA - testA.getCount()); } - if (!testB.isEmpty() && testB.getCount() > b.getSlotStackLimit()) { + if (!testB.isEmpty() && testB.getCount() > b.getMaxStackAmount()) { if (!testA.isEmpty()) { return; } final int totalB = testB.getCount(); - testB.setCount(b.getSlotStackLimit()); + testB.setCount(b.getMaxStackAmount()); testA = testB.copy(); testA.setCount(totalB - testA.getCount()); } - a.putStack(testA); - b.putStack(testB); + a.setStack(testA); + b.setStack(testB); } public void onUpdate(final String field, final Object oldValue, final Object newValue) { diff --git a/src/main/java/appeng/container/ContainerLocator.java b/src/main/java/appeng/container/ContainerLocator.java index ff65bf90e..57ed94845 100644 --- a/src/main/java/appeng/container/ContainerLocator.java +++ b/src/main/java/appeng/container/ContainerLocator.java @@ -18,7 +18,10 @@ package appeng.container; +import appeng.api.parts.IPartHost; import appeng.api.util.AEPartLocation; +import appeng.api.util.DimensionalCoord; +import appeng.parts.AEBasePart; import com.google.common.base.Preconditions; import io.netty.handler.codec.DecoderException; import net.minecraft.block.entity.BlockEntity; @@ -123,12 +126,11 @@ public final class ContainerLocator { throw new IllegalArgumentException("Could not find item held in hand " + hand + " in player inventory"); } -// FIXME FABRIC public static ContainerLocator forPart(AEBasePart part) { -// FIXME FABRIC IPartHost host = part.getHost(); -// FIXME FABRIC DimensionalCoord pos = host.getLocation(); -// FIXME FABRIC return new ContainerLocator(Type.PART, -1, pos.getWorld().getDimension().getType().getId(), pos.getBlockPos(), -// FIXME FABRIC part.getSide()); -// FIXME FABRIC } + public static ContainerLocator forPart(AEBasePart part) { + IPartHost host = part.getHost(); + DimensionalCoord pos = host.getLocation(); + return new ContainerLocator(Type.PART, -1, pos.getWorld().getWorld(), pos.getBlockPos(), part.getSide()); + } public boolean hasItemIndex() { return type == Type.PLAYER_INVENTORY || type == Type.PLAYER_INVENTORY_WITH_BLOCK_CONTEXT; diff --git a/src/unported/java/appeng/container/ContainerNull.java b/src/main/java/appeng/container/ContainerNull.java similarity index 86% rename from src/unported/java/appeng/container/ContainerNull.java rename to src/main/java/appeng/container/ContainerNull.java index 58e06ad7b..6e67fac70 100644 --- a/src/unported/java/appeng/container/ContainerNull.java +++ b/src/main/java/appeng/container/ContainerNull.java @@ -19,19 +19,19 @@ package appeng.container; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.Container; +import net.minecraft.screen.ScreenHandler; /* * Totally useless container that does nothing. */ -public class ContainerNull extends Container { +public class ContainerNull extends ScreenHandler { public ContainerNull() { super(null, 0); } @Override - public boolean canInteractWith(final PlayerEntity PlayerEntity) { + public boolean canUse(PlayerEntity player) { return false; } } diff --git a/src/unported/java/appeng/container/ContainerOpener.java b/src/main/java/appeng/container/ContainerOpener.java similarity index 100% rename from src/unported/java/appeng/container/ContainerOpener.java rename to src/main/java/appeng/container/ContainerOpener.java diff --git a/src/unported/java/appeng/container/guisync/GuiSync.java b/src/main/java/appeng/container/guisync/GuiSync.java similarity index 100% rename from src/unported/java/appeng/container/guisync/GuiSync.java rename to src/main/java/appeng/container/guisync/GuiSync.java diff --git a/src/unported/java/appeng/container/guisync/SyncData.java b/src/main/java/appeng/container/guisync/SyncData.java similarity index 93% rename from src/unported/java/appeng/container/guisync/SyncData.java rename to src/main/java/appeng/container/guisync/SyncData.java index adb170c1a..8dbe1a4a1 100644 --- a/src/unported/java/appeng/container/guisync/SyncData.java +++ b/src/main/java/appeng/container/guisync/SyncData.java @@ -24,7 +24,7 @@ import java.lang.reflect.Field; import java.util.Objects; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.IContainerListener; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.text.Text; import appeng.container.AEBaseContainer; @@ -66,7 +66,7 @@ public class SyncData { return this.channel; } - public void tick(final IContainerListener c) { + public void tick(final ScreenHandlerListener c) { try { final Object val = this.getter.invoke(source); @@ -79,7 +79,7 @@ public class SyncData { } - private void send(final IContainerListener o, Object val) { + private void send(final ScreenHandlerListener o, Object val) { if (fieldType.isAssignableFrom(Text.class)) { if (o instanceof ServerPlayerEntity) { String json = ""; @@ -102,16 +102,16 @@ public class SyncData { (ServerPlayerEntity) o); } } else if (this.fieldType.isEnum()) { - o.sendWindowProperty(this.source, this.channel, ((Enum) val).ordinal()); + o.onPropertyUpdate(this.source, this.channel, ((Enum) val).ordinal()); } else if (val instanceof Long) { if (o instanceof ServerPlayerEntity) { NetworkHandler.instance().sendTo(new ProgressBarPacket(this.channel, (Long) val), (ServerPlayerEntity) o); } } else if (fieldType.equals(Boolean.class) || fieldType.equals(boolean.class)) { - o.sendWindowProperty(this.source, this.channel, ((Boolean) val) ? 1 : 0); + o.onPropertyUpdate(this.source, this.channel, ((Boolean) val) ? 1 : 0); } else if (fieldType.equals(Integer.class) || fieldType.equals(int.class)) { - o.sendWindowProperty(this.source, this.channel, (Integer) val); + o.onPropertyUpdate(this.source, this.channel, (Integer) val); } else { throw new IllegalStateException("Unknown field type: " + fieldType); } diff --git a/src/unported/java/appeng/container/implementations/CellWorkbenchContainer.java b/src/main/java/appeng/container/implementations/CellWorkbenchContainer.java similarity index 93% rename from src/unported/java/appeng/container/implementations/CellWorkbenchContainer.java rename to src/main/java/appeng/container/implementations/CellWorkbenchContainer.java index d033f630b..41df58708 100644 --- a/src/unported/java/appeng/container/implementations/CellWorkbenchContainer.java +++ b/src/main/java/appeng/container/implementations/CellWorkbenchContainer.java @@ -24,9 +24,9 @@ import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.screen.slot.Slot; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.IContainerListener; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import alexiil.mc.lib.attributes.item.impl.EmptyFixedItemInv; @@ -140,21 +140,22 @@ public class CellWorkbenchContainer extends UpgradeableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { final ItemStack is = this.workBench.getInventoryByName("cell").getInvStack(0); if (Platform.isServer()) { - for (final IContainerListener listener : this.listeners) { + for (final ScreenHandlerListener listener : this.getListeners()) { if (this.prevStack != is) { // if the bars changed an item was probably made, so just send shit! - for (final Slot s : this.inventorySlots) { + for (int i = 0; i < this.slots.size(); i++) { + Slot s = this.slots.get(i); if (s instanceof OptionalRestrictedInputSlot) { final OptionalRestrictedInputSlot sri = (OptionalRestrictedInputSlot) s; - listener.sendSlotContents(this, sri.slotNumber, sri.getStack()); + listener.onSlotUpdate(this, i, sri.getStack()); } } if (listener instanceof ServerPlayerEntity) { - ((ServerPlayerEntity) listener).isChangingQuantityOnly = false; + ((ServerPlayerEntity) listener).skipPacketSlotUpdates = false; } } } @@ -189,7 +190,7 @@ public class CellWorkbenchContainer extends UpgradeableContainer { public void clear() { ItemHandlerUtil.clear(this.getUpgradeable().getInventoryByName("config")); - this.detectAndSendChanges(); + this.sendContentUpdates(); } private FuzzyMode getWorkBenchFuzzyMode() { @@ -227,7 +228,7 @@ public class CellWorkbenchContainer extends UpgradeableContainer { } } - this.detectAndSendChanges(); + this.sendContentUpdates(); } public CopyMode getCopyMode() { diff --git a/src/unported/java/appeng/container/implementations/ChestContainer.java b/src/main/java/appeng/container/implementations/ChestContainer.java similarity index 100% rename from src/unported/java/appeng/container/implementations/ChestContainer.java rename to src/main/java/appeng/container/implementations/ChestContainer.java diff --git a/src/unported/java/appeng/container/implementations/CondenserContainer.java b/src/main/java/appeng/container/implementations/CondenserContainer.java similarity index 98% rename from src/unported/java/appeng/container/implementations/CondenserContainer.java rename to src/main/java/appeng/container/implementations/CondenserContainer.java index 0dd995c20..db755c662 100644 --- a/src/unported/java/appeng/container/implementations/CondenserContainer.java +++ b/src/main/java/appeng/container/implementations/CondenserContainer.java @@ -74,7 +74,7 @@ public class CondenserContainer extends AEBaseContainer implements IProgressProv } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { if (Platform.isServer()) { final double maxStorage = this.condenser.getStorage(); final double requiredEnergy = this.condenser.getRequiredPower(); @@ -84,7 +84,7 @@ public class CondenserContainer extends AEBaseContainer implements IProgressProv this.setOutput((CondenserOutput) this.condenser.getConfigManager().getSetting(Settings.CONDENSER_OUTPUT)); } - super.detectAndSendChanges(); + super.sendContentUpdates(); } @Override diff --git a/src/unported/java/appeng/container/implementations/ContainerHelper.java b/src/main/java/appeng/container/implementations/ContainerHelper.java similarity index 86% rename from src/unported/java/appeng/container/implementations/ContainerHelper.java rename to src/main/java/appeng/container/implementations/ContainerHelper.java index 1fc42f608..ecba190f1 100644 --- a/src/unported/java/appeng/container/implementations/ContainerHelper.java +++ b/src/main/java/appeng/container/implementations/ContainerHelper.java @@ -1,10 +1,10 @@ package appeng.container.implementations; +import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandler; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.INamedContainerProvider; -import net.minecraft.inventory.container.SimpleNamedContainerProvider; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.block.entity.BlockEntity; @@ -13,7 +13,6 @@ import net.minecraft.text.Text; import net.minecraft.text.LiteralText; import net.minecraft.text.TranslatableText; import net.minecraft.world.World; -import net.minecraftforge.fml.network.NetworkHooks; import appeng.api.AEApi; import appeng.api.config.SecurityPermissions; @@ -29,6 +28,8 @@ import appeng.helpers.ICustomNameObject; import appeng.helpers.WirelessTerminalGuiObject; import appeng.util.Platform; +import javax.annotation.Nullable; + /** * Helper for containers that can be opened for a part or tile given * that either implements a given interface. @@ -83,18 +84,45 @@ public final class ContainerHelper { return false; } + // FIXME FABRIC The containers usually handle this themselves... Text title = findContainerTitle(player.world, locator, accessInterface); - INamedContainerProvider container = new SimpleNamedContainerProvider((wnd, p, pl) -> { - C c = factory.create(wnd, p, accessInterface); + player.openHandledScreen(new HandlerFactory(locator, accessInterface)); + + return true; + } + + private class HandlerFactory implements ExtendedScreenHandlerFactory { + + private final ContainerLocator locator; + + private final I accessInterface; + + public HandlerFactory(ContainerLocator locator, I accessInterface) { + this.locator = locator; + this.accessInterface = accessInterface; + } + + @Override + public void writeScreenOpeningData(ServerPlayerEntity player, PacketByteBuf buf) { + locator.write(buf); + } + + @Override + public Text getDisplayName() { + return null; + } + + @Nullable + @Override + public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player) { + C c = factory.create(syncId, inv, accessInterface); // Set the original locator on the opened server-side container for it to more // easily remember how to re-open after being closed. c.setLocator(locator); return c; - }, title); - NetworkHooks.openGui((ServerPlayerEntity) player, container, locator::write); + } - return true; } private Text findContainerTitle(World world, ContainerLocator locator, I accessInterface) { diff --git a/src/unported/java/appeng/container/implementations/CraftAmountContainer.java b/src/main/java/appeng/container/implementations/CraftAmountContainer.java similarity index 96% rename from src/unported/java/appeng/container/implementations/CraftAmountContainer.java rename to src/main/java/appeng/container/implementations/CraftAmountContainer.java index aa6257d2c..23bbddbff 100644 --- a/src/unported/java/appeng/container/implementations/CraftAmountContainer.java +++ b/src/main/java/appeng/container/implementations/CraftAmountContainer.java @@ -23,7 +23,7 @@ import javax.annotation.Nonnull; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.slot.Slot; import net.minecraft.network.PacketByteBuf; import net.minecraft.world.World; @@ -65,8 +65,8 @@ public class CraftAmountContainer extends AEBaseContainer { } @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); + public void sendContentUpdates() { + super.sendContentUpdates(); this.verifyPermissions(SecurityPermissions.CRAFT, false); } diff --git a/src/unported/java/appeng/container/implementations/CraftConfirmContainer.java b/src/main/java/appeng/container/implementations/CraftConfirmContainer.java similarity index 97% rename from src/unported/java/appeng/container/implementations/CraftConfirmContainer.java rename to src/main/java/appeng/container/implementations/CraftConfirmContainer.java index 5c13e05ca..e3f9c7144 100644 --- a/src/unported/java/appeng/container/implementations/CraftConfirmContainer.java +++ b/src/main/java/appeng/container/implementations/CraftConfirmContainer.java @@ -29,12 +29,13 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.IContainerListener; import net.minecraft.network.PacketByteBuf; import net.minecraft.text.Text; import net.minecraft.text.LiteralText; +import net.minecraft.util.Util; import net.minecraft.world.World; import appeng.api.AEApi; @@ -132,7 +133,7 @@ public class CraftConfirmContainer extends AEBaseContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { if (Platform.isClient()) { return; } @@ -175,7 +176,7 @@ public class CraftConfirmContainer extends AEBaseContainer { this.setNoCPU(this.cpus.isEmpty()); - super.detectAndSendChanges(); + super.sendContentUpdates(); if (this.getJob() != null && this.getJob().isDone()) { try { @@ -243,7 +244,7 @@ public class CraftConfirmContainer extends AEBaseContainer { } } - for (final Object g : this.listeners) { + for (final Object g : this.getListeners()) { if (g instanceof PlayerEntity) { NetworkHandler.instance().sendTo(a, (ServerPlayerEntity) g); NetworkHandler.instance().sendTo(b, (ServerPlayerEntity) g); @@ -329,7 +330,7 @@ public class CraftConfirmContainer extends AEBaseContainer { } @Override - public void removeListener(final IContainerListener c) { + public void removeListener(final ScreenHandlerListener c) { super.removeListener(c); if (this.getJob() != null) { this.getJob().cancel(true); @@ -338,8 +339,8 @@ public class CraftConfirmContainer extends AEBaseContainer { } @Override - public void onContainerClosed(final PlayerEntity par1PlayerEntity) { - super.onContainerClosed(par1PlayerEntity); + public void close(final PlayerEntity par1PlayerEntity) { + super.close(par1PlayerEntity); if (this.getJob() != null) { this.getJob().cancel(true); this.setJob(null); diff --git a/src/unported/java/appeng/container/implementations/CraftingCPUContainer.java b/src/main/java/appeng/container/implementations/CraftingCPUContainer.java similarity index 94% rename from src/unported/java/appeng/container/implementations/CraftingCPUContainer.java rename to src/main/java/appeng/container/implementations/CraftingCPUContainer.java index 2e0848ae1..e7e97781f 100644 --- a/src/unported/java/appeng/container/implementations/CraftingCPUContainer.java +++ b/src/main/java/appeng/container/implementations/CraftingCPUContainer.java @@ -22,9 +22,9 @@ import java.io.IOException; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.IContainerListener; import net.minecraft.network.PacketByteBuf; import net.minecraft.text.Text; @@ -107,7 +107,7 @@ public class CraftingCPUContainer extends AEBaseContainer this.getMonitor().removeListener(this); } - for (final Object g : this.listeners) { + for (final Object g : this.getListeners()) { if (g instanceof PlayerEntity) { NetworkHandler.instance().sendTo(new ConfigValuePacket("CraftingStatus", "Clear"), (ServerPlayerEntity) g); @@ -136,24 +136,24 @@ public class CraftingCPUContainer extends AEBaseContainer } @Override - public void removeListener(final IContainerListener c) { + public void removeListener(final ScreenHandlerListener c) { super.removeListener(c); - if (this.listeners.isEmpty() && this.getMonitor() != null) { + if (this.getListeners().isEmpty() && this.getMonitor() != null) { this.getMonitor().removeListener(this); } } @Override - public void onContainerClosed(final PlayerEntity player) { - super.onContainerClosed(player); + public void close(final PlayerEntity player) { + super.close(player); if (this.getMonitor() != null) { this.getMonitor().removeListener(this); } } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { if (Platform.isServer() && this.getMonitor() != null && !this.list.isEmpty()) { try { if (this.getEstimatedTime() >= 0) { @@ -177,7 +177,7 @@ public class CraftingCPUContainer extends AEBaseContainer this.list.resetStatus(); - for (final Object g : this.listeners) { + for (final Object g : this.getListeners()) { if (g instanceof PlayerEntity) { if (!a.isEmpty()) { NetworkHandler.instance().sendTo(a, (ServerPlayerEntity) g); @@ -196,7 +196,7 @@ public class CraftingCPUContainer extends AEBaseContainer // :P } } - super.detectAndSendChanges(); + super.sendContentUpdates(); } @Override diff --git a/src/unported/java/appeng/container/implementations/CraftingCPURecord.java b/src/main/java/appeng/container/implementations/CraftingCPURecord.java similarity index 100% rename from src/unported/java/appeng/container/implementations/CraftingCPURecord.java rename to src/main/java/appeng/container/implementations/CraftingCPURecord.java diff --git a/src/unported/java/appeng/container/implementations/CraftingStatusContainer.java b/src/main/java/appeng/container/implementations/CraftingStatusContainer.java similarity index 98% rename from src/unported/java/appeng/container/implementations/CraftingStatusContainer.java rename to src/main/java/appeng/container/implementations/CraftingStatusContainer.java index c8f5e996c..d5bd05323 100644 --- a/src/unported/java/appeng/container/implementations/CraftingStatusContainer.java +++ b/src/main/java/appeng/container/implementations/CraftingStatusContainer.java @@ -66,7 +66,7 @@ public class CraftingStatusContainer extends CraftingCPUContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { if (Platform.isServer() && this.getNetwork() != null) { final ICraftingGrid cc = this.getNetwork().getCache(ICraftingGrid.class); final ImmutableSet cpuSet = cc.getCpus(); @@ -106,7 +106,7 @@ public class CraftingStatusContainer extends CraftingCPUContainer { this.noCPU = this.cpus.isEmpty(); } - super.detectAndSendChanges(); + super.sendContentUpdates(); } private boolean cpuMatches(final ICraftingCPU c) { diff --git a/src/unported/java/appeng/container/implementations/CraftingTermContainer.java b/src/main/java/appeng/container/implementations/CraftingTermContainer.java similarity index 90% rename from src/unported/java/appeng/container/implementations/CraftingTermContainer.java rename to src/main/java/appeng/container/implementations/CraftingTermContainer.java index f095a951e..4cd0cd627 100644 --- a/src/unported/java/appeng/container/implementations/CraftingTermContainer.java +++ b/src/main/java/appeng/container/implementations/CraftingTermContainer.java @@ -19,6 +19,7 @@ package appeng.container.implementations; import alexiil.mc.lib.attributes.item.FixedItemInv; +import alexiil.mc.lib.attributes.item.compat.FixedInventoryVanillaWrapper; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.CraftingInventory; @@ -29,7 +30,6 @@ import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeType; import net.minecraft.network.PacketByteBuf; import net.minecraft.world.World; -import net.minecraftforge.items.wrapper.PlayerInvWrapper; import appeng.api.config.SecurityPermissions; import appeng.api.storage.ITerminalHost; @@ -84,7 +84,7 @@ public class CraftingTermContainer extends MEMonitorableContainer this.bindPlayerInventory(ip, 0, 0); - this.onCraftMatrixChanged(new WrapperInvItemHandler(crafting)); + this.onContentChanged(new WrapperInvItemHandler(crafting)); } /** @@ -92,7 +92,7 @@ public class CraftingTermContainer extends MEMonitorableContainer */ @Override - public void onCraftMatrixChanged(Inventory inventory) { + public void onContentChanged(Inventory inventory) { final ContainerNull cn = new ContainerNull(); final CraftingInventory ic = new CraftingInventory(cn, 3, 3); @@ -102,15 +102,15 @@ public class CraftingTermContainer extends MEMonitorableContainer if (this.currentRecipe == null || !this.currentRecipe.matches(ic, this.getPlayerInv().player.world)) { World world = this.getPlayerInv().player.world; - this.currentRecipe = world.getRecipeManager().getRecipe(RecipeType.CRAFTING, ic, world).orElse(null); + this.currentRecipe = world.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, ic, world).orElse(null); } if (this.currentRecipe == null) { - this.outputSlot.putStack(ItemStack.EMPTY); + this.outputSlot.setStack(ItemStack.EMPTY); } else { final ItemStack craftingResult = this.currentRecipe.craft(ic); - this.outputSlot.putStack(craftingResult); + this.outputSlot.setStack(craftingResult); } } @@ -128,7 +128,7 @@ public class CraftingTermContainer extends MEMonitorableContainer @Override public FixedItemInv getInventoryByName(final String name) { if (name.equals("player")) { - return new PlayerInvWrapper(this.getPlayerInventory()); + return new FixedInventoryVanillaWrapper(this.getPlayerInventory()); } return this.ct.getInventoryByName(name); } diff --git a/src/unported/java/appeng/container/implementations/DriveContainer.java b/src/main/java/appeng/container/implementations/DriveContainer.java similarity index 100% rename from src/unported/java/appeng/container/implementations/DriveContainer.java rename to src/main/java/appeng/container/implementations/DriveContainer.java diff --git a/src/unported/java/appeng/container/implementations/FormationPlaneContainer.java b/src/main/java/appeng/container/implementations/FormationPlaneContainer.java similarity index 99% rename from src/unported/java/appeng/container/implementations/FormationPlaneContainer.java rename to src/main/java/appeng/container/implementations/FormationPlaneContainer.java index 5d49d8e98..a598dfede 100644 --- a/src/unported/java/appeng/container/implementations/FormationPlaneContainer.java +++ b/src/main/java/appeng/container/implementations/FormationPlaneContainer.java @@ -104,7 +104,7 @@ public class FormationPlaneContainer extends UpgradeableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { diff --git a/src/unported/java/appeng/container/implementations/GrinderContainer.java b/src/main/java/appeng/container/implementations/GrinderContainer.java similarity index 100% rename from src/unported/java/appeng/container/implementations/GrinderContainer.java rename to src/main/java/appeng/container/implementations/GrinderContainer.java diff --git a/src/unported/java/appeng/container/implementations/IOPortContainer.java b/src/main/java/appeng/container/implementations/IOPortContainer.java similarity index 99% rename from src/unported/java/appeng/container/implementations/IOPortContainer.java rename to src/main/java/appeng/container/implementations/IOPortContainer.java index 1bdf61fd3..d4c15164b 100644 --- a/src/unported/java/appeng/container/implementations/IOPortContainer.java +++ b/src/main/java/appeng/container/implementations/IOPortContainer.java @@ -108,7 +108,7 @@ public class IOPortContainer extends UpgradeableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { diff --git a/src/unported/java/appeng/container/implementations/InscriberContainer.java b/src/main/java/appeng/container/implementations/InscriberContainer.java similarity index 98% rename from src/unported/java/appeng/container/implementations/InscriberContainer.java rename to src/main/java/appeng/container/implementations/InscriberContainer.java index 7634386dd..d33ce3e10 100644 --- a/src/unported/java/appeng/container/implementations/InscriberContainer.java +++ b/src/main/java/appeng/container/implementations/InscriberContainer.java @@ -21,7 +21,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.slot.Slot; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import alexiil.mc.lib.attributes.item.FixedItemInv; @@ -116,7 +116,7 @@ public class InscriberContainer extends UpgradeableContainer implements IProgres } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.standardDetectAndSendChanges(); if (Platform.isServer()) { diff --git a/src/unported/java/appeng/container/implementations/InterfaceContainer.java b/src/main/java/appeng/container/implementations/InterfaceContainer.java similarity index 98% rename from src/unported/java/appeng/container/implementations/InterfaceContainer.java rename to src/main/java/appeng/container/implementations/InterfaceContainer.java index 63408342a..adfcb2408 100644 --- a/src/unported/java/appeng/container/implementations/InterfaceContainer.java +++ b/src/main/java/appeng/container/implementations/InterfaceContainer.java @@ -93,9 +93,9 @@ public class InterfaceContainer extends UpgradeableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); - super.detectAndSendChanges(); + super.sendContentUpdates(); } @Override diff --git a/src/unported/java/appeng/container/implementations/InterfaceTerminalContainer.java b/src/main/java/appeng/container/implementations/InterfaceTerminalContainer.java similarity index 94% rename from src/unported/java/appeng/container/implementations/InterfaceTerminalContainer.java rename to src/main/java/appeng/container/implementations/InterfaceTerminalContainer.java index 28a3f5a4e..cd506f096 100644 --- a/src/unported/java/appeng/container/implementations/InterfaceTerminalContainer.java +++ b/src/main/java/appeng/container/implementations/InterfaceTerminalContainer.java @@ -95,12 +95,12 @@ public final class InterfaceTerminalContainer extends AEBaseContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { if (Platform.isClient()) { return; } - super.detectAndSendChanges(); + super.sendContentUpdates(); if (this.grid == null) { return; @@ -191,7 +191,7 @@ public final class InterfaceTerminalContainer extends AEBaseContainer { final InvTracker inv = this.byId.get(id); if (inv != null) { final ItemStack is = inv.server.getInvStack(slot); - final boolean hasItemInHand = !player.inventory.getItemStack().isEmpty(); + final boolean hasItemInHand = !player.inventory.getCursorStack().isEmpty(); final InventoryAdaptor playerHand = new AdaptorFixedInv(new WrapperCursorItemHandler(player.inventory)); @@ -205,20 +205,20 @@ public final class InterfaceTerminalContainer extends AEBaseContainer { if (hasItemInHand) { ItemStack inSlot = theSlot.getInvStack(0); if (inSlot.isEmpty()) { - player.inventory.setItemStack(interfaceSlot.addItems(player.inventory.getItemStack())); + player.inventory.setCursorStack(interfaceSlot.addItems(player.inventory.getCursorStack())); } else { inSlot = inSlot.copy(); - final ItemStack inHand = player.inventory.getItemStack().copy(); + final ItemStack inHand = player.inventory.getCursorStack().copy(); ItemHandlerUtil.setStackInSlot(theSlot, 0, ItemStack.EMPTY); - player.inventory.setItemStack(ItemStack.EMPTY); + player.inventory.setCursorStack(ItemStack.EMPTY); - player.inventory.setItemStack(interfaceSlot.addItems(inHand.copy())); + player.inventory.setCursorStack(interfaceSlot.addItems(inHand.copy())); - if (player.inventory.getItemStack().isEmpty()) { - player.inventory.setItemStack(inSlot); + if (player.inventory.getCursorStack().isEmpty()) { + player.inventory.setCursorStack(inSlot); } else { - player.inventory.setItemStack(inHand); + player.inventory.setCursorStack(inHand); ItemHandlerUtil.setStackInSlot(theSlot, 0, inSlot); } } @@ -266,8 +266,8 @@ public final class InterfaceTerminalContainer extends AEBaseContainer { break; case CREATIVE_DUPLICATE: - if (player.abilities.isCreativeMode && !hasItemInHand) { - player.inventory.setItemStack(is.isEmpty() ? ItemStack.EMPTY : is.copy()); + if (player.isCreative() && !hasItemInHand) { + player.inventory.setCursorStack(is.isEmpty() ? ItemStack.EMPTY : is.copy()); } break; diff --git a/src/unported/java/appeng/container/implementations/LevelEmitterContainer.java b/src/main/java/appeng/container/implementations/LevelEmitterContainer.java similarity index 99% rename from src/unported/java/appeng/container/implementations/LevelEmitterContainer.java rename to src/main/java/appeng/container/implementations/LevelEmitterContainer.java index 96df835bb..5361c8166 100644 --- a/src/unported/java/appeng/container/implementations/LevelEmitterContainer.java +++ b/src/main/java/appeng/container/implementations/LevelEmitterContainer.java @@ -120,7 +120,7 @@ public class LevelEmitterContainer extends UpgradeableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { diff --git a/src/unported/java/appeng/container/implementations/MEMonitorableContainer.java b/src/main/java/appeng/container/implementations/MEMonitorableContainer.java similarity index 95% rename from src/unported/java/appeng/container/implementations/MEMonitorableContainer.java rename to src/main/java/appeng/container/implementations/MEMonitorableContainer.java index 4a33dfd03..c439748e1 100644 --- a/src/unported/java/appeng/container/implementations/MEMonitorableContainer.java +++ b/src/main/java/appeng/container/implementations/MEMonitorableContainer.java @@ -25,9 +25,9 @@ import javax.annotation.Nonnull; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.IContainerListener; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.block.entity.BlockEntity; @@ -182,7 +182,7 @@ public class MEMonitorableContainer extends AEBaseContainer } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { if (Platform.isServer()) { if (this.monitor != this.host .getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class))) { @@ -195,7 +195,7 @@ public class MEMonitorableContainer extends AEBaseContainer if (sideLocal != sideRemote) { this.clientCM.putSetting(set, sideLocal); - for (final IContainerListener crafter : this.listeners) { + for (final ScreenHandlerListener crafter : this.getListeners()) { if (crafter instanceof ServerPlayerEntity) { NetworkHandler.instance().sendTo(new ConfigValuePacket(set.name(), sideLocal.name()), (ServerPlayerEntity) crafter); @@ -223,7 +223,7 @@ public class MEMonitorableContainer extends AEBaseContainer if (!piu.isEmpty()) { this.items.resetStatus(); - for (final Object c : this.listeners) { + for (final Object c : this.getListeners()) { if (c instanceof PlayerEntity) { NetworkHandler.instance().sendTo(piu, (ServerPlayerEntity) c); } @@ -246,7 +246,7 @@ public class MEMonitorableContainer extends AEBaseContainer } } - super.detectAndSendChanges(); + super.sendContentUpdates(); } } @@ -280,13 +280,13 @@ public class MEMonitorableContainer extends AEBaseContainer } @Override - public void addListener(final IContainerListener c) { + public void addListener(final ScreenHandlerListener c) { super.addListener(c); this.queueInventory(c); } - private void queueInventory(final IContainerListener c) { + private void queueInventory(final ScreenHandlerListener c) { if (Platform.isServer() && c instanceof PlayerEntity && this.monitor != null) { try { MEInventoryUpdatePacket piu = new MEInventoryUpdatePacket(); @@ -311,17 +311,17 @@ public class MEMonitorableContainer extends AEBaseContainer } @Override - public void removeListener(final IContainerListener c) { + public void removeListener(final ScreenHandlerListener c) { super.removeListener(c); - if (this.listeners.isEmpty() && this.monitor != null) { + if (this.getListeners().isEmpty() && this.monitor != null) { this.monitor.removeListener(this); } } @Override - public void onContainerClosed(final PlayerEntity player) { - super.onContainerClosed(player); + public void close(final PlayerEntity player) { + super.close(player); if (this.monitor != null) { this.monitor.removeListener(this); } @@ -342,7 +342,7 @@ public class MEMonitorableContainer extends AEBaseContainer @Override public void onListUpdate() { - for (final IContainerListener c : this.listeners) { + for (final ScreenHandlerListener c : this.getListeners()) { this.queueInventory(c); } } diff --git a/src/unported/java/appeng/container/implementations/MEPortableCellContainer.java b/src/main/java/appeng/container/implementations/MEPortableCellContainer.java similarity index 95% rename from src/unported/java/appeng/container/implementations/MEPortableCellContainer.java rename to src/main/java/appeng/container/implementations/MEPortableCellContainer.java index 66ef9c289..4d0a2ebe3 100644 --- a/src/unported/java/appeng/container/implementations/MEPortableCellContainer.java +++ b/src/main/java/appeng/container/implementations/MEPortableCellContainer.java @@ -64,14 +64,14 @@ public class MEPortableCellContainer extends MEMonitorableContainer { this.slot = slotIndex; } else { this.slot = -1; - this.lockPlayerInventorySlot(ip.currentItem); + this.lockPlayerInventorySlot(ip.selectedSlot); } this.civ = monitorable; this.bindPlayerInventory(ip, 0, 0); } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { final ItemStack currentItem = this.slot < 0 ? this.getPlayerInv().getMainHandStack() : this.getPlayerInv().getStack(this.slot); @@ -79,7 +79,7 @@ public class MEPortableCellContainer extends MEMonitorableContainer { this.setValidContainer(false); } else if (this.civ != null && !this.civ.getItemStack().isEmpty() && currentItem != this.civ.getItemStack()) { if (ItemStack.areItemsEqual(this.civ.getItemStack(), currentItem)) { - this.getPlayerInv().setStack(this.getPlayerInv().currentItem, this.civ.getItemStack()); + this.getPlayerInv().setStack(this.getPlayerInv().selectedSlot, this.civ.getItemStack()); } else { this.setValidContainer(false); } @@ -92,7 +92,7 @@ public class MEPortableCellContainer extends MEMonitorableContainer { PowerMultiplier.CONFIG); this.ticks = 0; } - super.detectAndSendChanges(); + super.sendContentUpdates(); } private double getPowerMultiplier() { diff --git a/src/unported/java/appeng/container/implementations/MolecularAssemblerContainer.java b/src/main/java/appeng/container/implementations/MolecularAssemblerContainer.java similarity index 97% rename from src/unported/java/appeng/container/implementations/MolecularAssemblerContainer.java rename to src/main/java/appeng/container/implementations/MolecularAssemblerContainer.java index c919e66b7..3bcbb6a0c 100644 --- a/src/unported/java/appeng/container/implementations/MolecularAssemblerContainer.java +++ b/src/main/java/appeng/container/implementations/MolecularAssemblerContainer.java @@ -22,7 +22,7 @@ import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.slot.Slot; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.world.World; @@ -144,7 +144,7 @@ public class MolecularAssemblerContainer extends UpgradeableContainer implements } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { @@ -172,7 +172,7 @@ public class MolecularAssemblerContainer extends UpgradeableContainer implements // If the pattern changes, the crafting grid slots lose validity if (s == encodedPatternSlot) { - for (Slot otherSlot : inventorySlots) { + for (Slot otherSlot : slots) { if (otherSlot != s && otherSlot instanceof AppEngSlot) { ((AppEngSlot) otherSlot).setIsValid(AppEngSlot.CalculatedValidity.NotAvailable); } diff --git a/src/unported/java/appeng/container/implementations/NetworkStatusContainer.java b/src/main/java/appeng/container/implementations/NetworkStatusContainer.java similarity index 97% rename from src/unported/java/appeng/container/implementations/NetworkStatusContainer.java rename to src/main/java/appeng/container/implementations/NetworkStatusContainer.java index b34018400..46d00fe50 100644 --- a/src/unported/java/appeng/container/implementations/NetworkStatusContainer.java +++ b/src/main/java/appeng/container/implementations/NetworkStatusContainer.java @@ -98,7 +98,7 @@ public class NetworkStatusContainer extends AEBaseContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.delay++; if (Platform.isServer() && this.delay > 15 && this.network != null) { this.delay = 0; @@ -133,7 +133,7 @@ public class NetworkStatusContainer extends AEBaseContainer { } } - for (final Object c : this.listeners) { + for (final Object c : this.getListeners()) { if (c instanceof PlayerEntity) { NetworkHandler.instance().sendTo(piu, (ServerPlayerEntity) c); } @@ -142,7 +142,7 @@ public class NetworkStatusContainer extends AEBaseContainer { // :P } } - super.detectAndSendChanges(); + super.sendContentUpdates(); } public long getCurrentPower() { diff --git a/src/unported/java/appeng/container/implementations/NetworkToolContainer.java b/src/main/java/appeng/container/implementations/NetworkToolContainer.java similarity index 95% rename from src/unported/java/appeng/container/implementations/NetworkToolContainer.java rename to src/main/java/appeng/container/implementations/NetworkToolContainer.java index 5ab57f1c2..48ce56c81 100644 --- a/src/unported/java/appeng/container/implementations/NetworkToolContainer.java +++ b/src/main/java/appeng/container/implementations/NetworkToolContainer.java @@ -55,7 +55,7 @@ public class NetworkToolContainer extends AEBaseContainer { super(TYPE, id, ip, null, null); this.toolInv = te; - this.lockPlayerInventorySlot(ip.currentItem); + this.lockPlayerInventorySlot(ip.selectedSlot); for (int y = 0; y < 3; y++) { for (int x = 0; x < 3; x++) { @@ -70,17 +70,17 @@ public class NetworkToolContainer extends AEBaseContainer { public void toggleFacadeMode() { final CompoundTag data = this.toolInv.getItemStack().getOrCreateTag(); data.putBoolean("hideFacades", !data.getBoolean("hideFacades")); - this.detectAndSendChanges(); + this.sendContentUpdates(); } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { final ItemStack currentItem = this.getPlayerInv().getMainHandStack(); if (currentItem != this.toolInv.getItemStack()) { if (!currentItem.isEmpty()) { if (ItemStack.areItemsEqual(this.toolInv.getItemStack(), currentItem)) { - this.getPlayerInv().setStack(this.getPlayerInv().currentItem, + this.getPlayerInv().setStack(this.getPlayerInv().selectedSlot, this.toolInv.getItemStack()); } else { this.setValidContainer(false); @@ -95,7 +95,7 @@ public class NetworkToolContainer extends AEBaseContainer { this.setFacadeMode(data.getBoolean("hideFacades")); } - super.detectAndSendChanges(); + super.sendContentUpdates(); } public boolean isFacadeMode() { diff --git a/src/unported/java/appeng/container/implementations/PatternTermContainer.java b/src/main/java/appeng/container/implementations/PatternTermContainer.java similarity index 88% rename from src/unported/java/appeng/container/implementations/PatternTermContainer.java rename to src/main/java/appeng/container/implementations/PatternTermContainer.java index 4e1d9d5a7..b949ed76d 100644 --- a/src/unported/java/appeng/container/implementations/PatternTermContainer.java +++ b/src/main/java/appeng/container/implementations/PatternTermContainer.java @@ -23,24 +23,25 @@ import java.util.List; import java.util.Optional; import alexiil.mc.lib.attributes.item.FixedItemInv; +import alexiil.mc.lib.attributes.item.compat.FixedInventoryVanillaWrapper; +import appeng.mixins.SlotMixin; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.CraftingResultInventory; +import net.minecraft.nbt.Tag; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeType; +import net.minecraft.screen.slot.CraftingResultSlot; +import net.minecraft.screen.slot.Slot; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.CraftResultInventory; import net.minecraft.inventory.CraftingInventory; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.inventory.container.CraftingResultSlot; -import net.minecraft.inventory.container.IContainerListener; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.INBT; import net.minecraft.nbt.ListTag; import net.minecraft.network.PacketByteBuf; import net.minecraft.world.World; -import net.minecraftforge.items.wrapper.PlayerInvWrapper; import appeng.api.AEApi; import appeng.api.config.Actionable; @@ -142,25 +143,30 @@ public class PatternTermContainer extends MEMonitorableContainer this.updateOrderOfOutputSlots(); } + private void setSlotX(Slot s, int x) { + ((SlotMixin) s).setX(x); + } + private void updateOrderOfOutputSlots() { if (!this.isCraftingMode()) { - this.craftSlot.xPos = -9000; + setSlotX(this.craftSlot, -9000); for (int y = 0; y < 3; y++) { - this.outputSlots[y].xPos = this.outputSlots[y].getX(); + setSlotX(this.outputSlots[y], this.outputSlots[y].getX()); } } else { - this.craftSlot.xPos = this.craftSlot.getX(); + setSlotX(this.craftSlot, this.craftSlot.getX()); for (int y = 0; y < 3; y++) { - this.outputSlots[y].xPos = -9000; + setSlotX(this.outputSlots[y], -9000); } } } + @Override - public void putStackInSlot(int slotID, ItemStack stack) { - super.putStackInSlot(slotID, stack); + public void setStackInSlot(int slotID, ItemStack stack) { + super.setStackInSlot(slotID, stack); this.getAndUpdateOutput(); } @@ -173,7 +179,7 @@ public class PatternTermContainer extends MEMonitorableContainer } if (this.currentRecipe == null || !this.currentRecipe.matches(ic, world)) { - this.currentRecipe = world.getRecipeManager().getRecipe(RecipeType.CRAFTING, ic, world).orElse(null); + this.currentRecipe = world.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, ic, world).orElse(null); } final ItemStack is; @@ -184,7 +190,7 @@ public class PatternTermContainer extends MEMonitorableContainer is = this.currentRecipe.craft(ic); } - this.cOut.setInvStack(0, is); + this.cOut.forceSetInvStack(0, is); return is; } @@ -223,14 +229,14 @@ public class PatternTermContainer extends MEMonitorableContainer // remove one, and clear the input slot. output.setCount(output.getCount() - 1); if (output.getCount() == 0) { - this.patternSlotIN.putStack(ItemStack.EMPTY); + this.patternSlotIN.setStack(ItemStack.EMPTY); } // add a new encoded pattern. Optional maybePattern = AEApi.instance().definitions().items().encodedPattern().maybeStack(1); if (maybePattern.isPresent()) { output = maybePattern.get(); - this.patternSlotOUT.putStack(output); + this.patternSlotOUT.setStack(output); } } @@ -315,7 +321,7 @@ public class PatternTermContainer extends MEMonitorableContainer return isPattern; } - private INBT createItemTag(final ItemStack i) { + private Tag createItemTag(final ItemStack i) { final CompoundTag c = new CompoundTag(); if (!i.isEmpty()) { @@ -360,7 +366,7 @@ public class PatternTermContainer extends MEMonitorableContainer if (p instanceof ServerPlayerEntity) { this.updateHeld((ServerPlayerEntity) p); } - this.detectAndSendChanges(); + this.sendContentUpdates(); return; } @@ -372,7 +378,7 @@ public class PatternTermContainer extends MEMonitorableContainer : packetPatternSlot.pattern[x].createItemStack()); } - final Recipe r = p.world.getRecipeManager().getRecipe(RecipeType.CRAFTING, ic, p.world) + final Recipe r = p.world.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, ic, p.world) .orElse(null); if (r == null) { @@ -395,14 +401,14 @@ public class PatternTermContainer extends MEMonitorableContainer } final Recipe rr = p.world.getRecipeManager() - .getRecipe(RecipeType.CRAFTING, real, p.world).orElse(null); + .getFirstMatch(RecipeType.CRAFTING, real, p.world).orElse(null); if (rr == r && Platform.itemComparisons().isSameItem(rr.craft(real), is)) { - final CraftResultInventory craftingResult = new CraftResultInventory(); - craftingResult.setRecipeUsed(rr); + final CraftingResultInventory craftingResult = new CraftingResultInventory(); + craftingResult.setLastRecipe(rr); final CraftingResultSlot sc = new CraftingResultSlot(p, real, craftingResult, 0, 0, 0); - sc.onTake(p, is); + sc.onTakeItem(p, is); for (int x = 0; x < real.size(); x++) { final ItemStack failed = playerInv.addItems(real.getStack(x)); @@ -416,7 +422,7 @@ public class PatternTermContainer extends MEMonitorableContainer if (p instanceof ServerPlayerEntity) { this.updateHeld((ServerPlayerEntity) p); } - this.detectAndSendChanges(); + this.sendContentUpdates(); } else { for (int x = 0; x < real.size(); x++) { final ItemStack failed = real.getStack(x); @@ -430,8 +436,8 @@ public class PatternTermContainer extends MEMonitorableContainer } @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); + public void sendContentUpdates() { + super.sendContentUpdates(); if (Platform.isServer()) { if (this.isCraftingMode() != this.getPatternTerminal().isCraftingRecipe()) { this.setCraftingMode(this.getPatternTerminal().isCraftingRecipe()); @@ -455,17 +461,18 @@ public class PatternTermContainer extends MEMonitorableContainer @Override public void onSlotChange(final Slot s) { if (s == this.patternSlotOUT && Platform.isServer()) { - for (final IContainerListener listener : this.listeners) { - for (final Slot slot : this.inventorySlots) { + for (final ScreenHandlerListener listener : this.getListeners()) { + for (int i = 0; i < this.slots.size(); i++) { + Slot slot = this.slots.get(i); if (slot instanceof OptionalFakeSlot || slot instanceof FakeCraftingMatrixSlot) { - listener.sendSlotContents(this, slot.slotNumber, slot.getStack()); + listener.onSlotUpdate(this, i, slot.getStack()); } } if (listener instanceof ServerPlayerEntity) { - ((ServerPlayerEntity) listener).isChangingQuantityOnly = false; + ((ServerPlayerEntity) listener).skipPacketSlotUpdates = false; } } - this.detectAndSendChanges(); + this.sendContentUpdates(); } if (s == this.craftSlot && Platform.isClient()) { @@ -475,21 +482,21 @@ public class PatternTermContainer extends MEMonitorableContainer public void clear() { for (final Slot s : this.craftingSlots) { - s.putStack(ItemStack.EMPTY); + s.setStack(ItemStack.EMPTY); } for (final Slot s : this.outputSlots) { - s.putStack(ItemStack.EMPTY); + s.setStack(ItemStack.EMPTY); } - this.detectAndSendChanges(); + this.sendContentUpdates(); this.getAndUpdateOutput(); } @Override public FixedItemInv getInventoryByName(final String name) { if (name.equals("player")) { - return new PlayerInvWrapper(this.getPlayerInventory()); + return new FixedInventoryVanillaWrapper(this.getPlayerInventory()); } return this.getPatternTerminal().getInventoryByName(name); } @@ -502,7 +509,7 @@ public class PatternTermContainer extends MEMonitorableContainer public void toggleSubstitute() { this.substitute = !this.substitute; - this.detectAndSendChanges(); + this.sendContentUpdates(); this.getAndUpdateOutput(); } diff --git a/src/unported/java/appeng/container/implementations/PriorityContainer.java b/src/main/java/appeng/container/implementations/PriorityContainer.java similarity index 97% rename from src/unported/java/appeng/container/implementations/PriorityContainer.java rename to src/main/java/appeng/container/implementations/PriorityContainer.java index ec4d9ee57..0d408c57c 100644 --- a/src/unported/java/appeng/container/implementations/PriorityContainer.java +++ b/src/main/java/appeng/container/implementations/PriorityContainer.java @@ -75,8 +75,8 @@ public class PriorityContainer extends AEBaseContainer { } @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); + public void sendContentUpdates() { + super.sendContentUpdates(); this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { diff --git a/src/unported/java/appeng/container/implementations/QNBContainer.java b/src/main/java/appeng/container/implementations/QNBContainer.java similarity index 100% rename from src/unported/java/appeng/container/implementations/QNBContainer.java rename to src/main/java/appeng/container/implementations/QNBContainer.java diff --git a/src/unported/java/appeng/container/implementations/QuartzKnifeContainer.java b/src/main/java/appeng/container/implementations/QuartzKnifeContainer.java similarity index 83% rename from src/unported/java/appeng/container/implementations/QuartzKnifeContainer.java rename to src/main/java/appeng/container/implementations/QuartzKnifeContainer.java index 6589d961a..ee0cff79b 100644 --- a/src/unported/java/appeng/container/implementations/QuartzKnifeContainer.java +++ b/src/main/java/appeng/container/implementations/QuartzKnifeContainer.java @@ -27,8 +27,6 @@ import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent; import appeng.api.AEApi; import appeng.container.AEBaseContainer; @@ -68,7 +66,7 @@ public class QuartzKnifeContainer extends AEBaseContainer { new RestrictedInputSlot(RestrictedInputSlot.PlacableItemType.METAL_INGOTS, this.inSlot, 0, 94, 44, ip)); this.addSlot(new QuartzKniveSlot(this.inSlot, 0, 134, 44, -1)); - this.lockPlayerInventorySlot(ip.currentItem); + this.lockPlayerInventorySlot(ip.selectedSlot); this.bindPlayerInventory(ip, 0, 184 - /* height of player inventory */82); } @@ -78,13 +76,13 @@ public class QuartzKnifeContainer extends AEBaseContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { final ItemStack currentItem = this.getPlayerInv().getMainHandStack(); if (currentItem != this.toolInv.getItemStack()) { if (!currentItem.isEmpty()) { if (ItemStack.areItemsEqual(this.toolInv.getItemStack(), currentItem)) { - this.getPlayerInv().setStack(this.getPlayerInv().currentItem, + this.getPlayerInv().setStack(this.getPlayerInv().selectedSlot, this.toolInv.getItemStack()); } else { this.setValidContainer(false); @@ -94,11 +92,11 @@ public class QuartzKnifeContainer extends AEBaseContainer { } } - super.detectAndSendChanges(); + super.sendContentUpdates(); } @Override - public void onContainerClosed(final PlayerEntity par1PlayerEntity) { + public void close(final PlayerEntity par1PlayerEntity) { if (this.inSlot.getInvStack(0) != null) { par1PlayerEntity.dropItem(this.inSlot.getInvStack(0), false); } @@ -111,11 +109,7 @@ public class QuartzKnifeContainer extends AEBaseContainer { @Override public ItemStack getStack() { - final FixedItemInv baseInv = this.getItemHandler(); - final ItemStack input = baseInv.getInvStack(0); - if (input == ItemStack.EMPTY) { - return ItemStack.EMPTY; - } + final ItemStack input = super.getStack(); if (RestrictedInputSlot.isMetalIngot(input)) { if (QuartzKnifeContainer.this.myName.length() > 0) { @@ -132,7 +126,7 @@ public class QuartzKnifeContainer extends AEBaseContainer { @Override @Nonnull - public ItemStack decrStackSize(int amount) { + public ItemStack takeStack(int amount) { ItemStack ret = this.getStack(); if (!ret.isEmpty()) { this.makePlate(); @@ -141,7 +135,7 @@ public class QuartzKnifeContainer extends AEBaseContainer { } @Override - public void putStack(final ItemStack stack) { + public void setStack(ItemStack stack) { if (stack.isEmpty()) { this.makePlate(); } @@ -149,17 +143,18 @@ public class QuartzKnifeContainer extends AEBaseContainer { private void makePlate() { if (Platform.isServer()) { - if (!this.getItemHandler().extractItem(0, 1, false).isEmpty()) { + if (!this.takeStack(1).isEmpty()) { final ItemStack item = QuartzKnifeContainer.this.toolInv.getItemStack(); final ItemStack before = item.copy(); item.damage(1, QuartzKnifeContainer.this.getPlayerInv().player, p -> { QuartzKnifeContainer.this.getPlayerInv().setStack( - QuartzKnifeContainer.this.getPlayerInv().currentItem, ItemStack.EMPTY); - MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent( - QuartzKnifeContainer.this.getPlayerInv().player, before, null)); + QuartzKnifeContainer.this.getPlayerInv().selectedSlot, ItemStack.EMPTY); + // FIXME FABRIC equivalent?? + // FIXME FABRIC MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent( + // FIXME FABRIC QuartzKnifeContainer.this.getPlayerInv().player, before, null)); }); - QuartzKnifeContainer.this.detectAndSendChanges(); + QuartzKnifeContainer.this.sendContentUpdates(); } } } diff --git a/src/unported/java/appeng/container/implementations/SecurityStationContainer.java b/src/main/java/appeng/container/implementations/SecurityStationContainer.java similarity index 88% rename from src/unported/java/appeng/container/implementations/SecurityStationContainer.java rename to src/main/java/appeng/container/implementations/SecurityStationContainer.java index 1c6c816a5..f9c374b46 100644 --- a/src/unported/java/appeng/container/implementations/SecurityStationContainer.java +++ b/src/main/java/appeng/container/implementations/SecurityStationContainer.java @@ -20,8 +20,8 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.inventory.container.IContainerListener; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import alexiil.mc.lib.attributes.item.FixedItemInv; @@ -101,7 +101,7 @@ public class SecurityStationContainer extends MEMonitorableContainer implements } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.SECURITY, false); this.setPermissionMode(0); @@ -117,18 +117,18 @@ public class SecurityStationContainer extends MEMonitorableContainer implements this.updatePowerStatus(); - super.detectAndSendChanges(); + super.sendContentUpdates(); } @Override - public void onContainerClosed(final PlayerEntity player) { - super.onContainerClosed(player); + public void close(final PlayerEntity player) { + super.close(player); - if (this.wirelessIn.getHasStack()) { + if (this.wirelessIn.hasStack()) { player.dropItem(this.wirelessIn.getStack(), false); } - if (this.wirelessOut.getHasStack()) { + if (this.wirelessOut.hasStack()) { player.dropItem(this.wirelessOut.getStack(), false); } } @@ -141,8 +141,8 @@ public class SecurityStationContainer extends MEMonitorableContainer implements @Override public void onChangeInventory(final FixedItemInv inv, final int slot, final InvOperation mc, final ItemStack removedStack, final ItemStack newStack) { - if (!this.wirelessOut.getHasStack()) { - if (this.wirelessIn.getHasStack()) { + if (!this.wirelessOut.hasStack()) { + if (this.wirelessIn.hasStack()) { final ItemStack term = this.wirelessIn.getStack().copy(); INetworkEncodable networkEncodable = null; @@ -159,13 +159,13 @@ public class SecurityStationContainer extends MEMonitorableContainer implements if (networkEncodable != null) { networkEncodable.setEncryptionKey(term, String.valueOf(this.securityBox.getSecurityKey()), ""); - this.wirelessIn.putStack(ItemStack.EMPTY); - this.wirelessOut.putStack(term); + this.wirelessIn.setStack(ItemStack.EMPTY); + this.wirelessOut.setStack(term); // update the two slots in question... - for (final IContainerListener listener : this.listeners) { - listener.sendSlotContents(this, this.wirelessIn.slotNumber, this.wirelessIn.getStack()); - listener.sendSlotContents(this, this.wirelessOut.slotNumber, this.wirelessOut.getStack()); + for (final ScreenHandlerListener listener : this.getListeners()) { + listener.onSlotUpdate(this, this.slots.indexOf(this.wirelessIn), this.wirelessIn.getStack()); + listener.onSlotUpdate(this, this.slots.indexOf(this.wirelessOut), this.wirelessOut.getStack()); } } } diff --git a/src/unported/java/appeng/container/implementations/SkyChestContainer.java b/src/main/java/appeng/container/implementations/SkyChestContainer.java similarity index 95% rename from src/unported/java/appeng/container/implementations/SkyChestContainer.java rename to src/main/java/appeng/container/implementations/SkyChestContainer.java index 3afebc5fa..804c5e5d1 100644 --- a/src/unported/java/appeng/container/implementations/SkyChestContainer.java +++ b/src/main/java/appeng/container/implementations/SkyChestContainer.java @@ -61,8 +61,8 @@ public class SkyChestContainer extends AEBaseContainer { } @Override - public void onContainerClosed(final PlayerEntity par1PlayerEntity) { - super.onContainerClosed(par1PlayerEntity); + public void close(final PlayerEntity par1PlayerEntity) { + super.close(par1PlayerEntity); this.chest.closeInventory(par1PlayerEntity); } } diff --git a/src/unported/java/appeng/container/implementations/SpatialIOPortContainer.java b/src/main/java/appeng/container/implementations/SpatialIOPortContainer.java similarity index 98% rename from src/unported/java/appeng/container/implementations/SpatialIOPortContainer.java rename to src/main/java/appeng/container/implementations/SpatialIOPortContainer.java index 76e6dcc14..9ccfa9381 100644 --- a/src/unported/java/appeng/container/implementations/SpatialIOPortContainer.java +++ b/src/main/java/appeng/container/implementations/SpatialIOPortContainer.java @@ -86,7 +86,7 @@ public class SpatialIOPortContainer extends AEBaseContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { @@ -118,7 +118,7 @@ public class SpatialIOPortContainer extends AEBaseContainer { } } - super.detectAndSendChanges(); + super.sendContentUpdates(); } public long getCurrentPower() { diff --git a/src/unported/java/appeng/container/implementations/StorageBusContainer.java b/src/main/java/appeng/container/implementations/StorageBusContainer.java similarity index 98% rename from src/unported/java/appeng/container/implementations/StorageBusContainer.java rename to src/main/java/appeng/container/implementations/StorageBusContainer.java index f0fc3aabb..67ed5830c 100644 --- a/src/unported/java/appeng/container/implementations/StorageBusContainer.java +++ b/src/main/java/appeng/container/implementations/StorageBusContainer.java @@ -121,7 +121,7 @@ public class StorageBusContainer extends UpgradeableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { @@ -144,7 +144,7 @@ public class StorageBusContainer extends UpgradeableContainer { public void clear() { ItemHandlerUtil.clear(this.getUpgradeable().getInventoryByName("config")); - this.detectAndSendChanges(); + this.sendContentUpdates(); } public void partition() { @@ -169,7 +169,7 @@ public class StorageBusContainer extends UpgradeableContainer { } } - this.detectAndSendChanges(); + this.sendContentUpdates(); } public AccessRestriction getReadWriteMode() { diff --git a/src/unported/java/appeng/container/implementations/UpgradeableContainer.java b/src/main/java/appeng/container/implementations/UpgradeableContainer.java similarity index 98% rename from src/unported/java/appeng/container/implementations/UpgradeableContainer.java rename to src/main/java/appeng/container/implementations/UpgradeableContainer.java index 58acdb2ca..9d958d8df 100644 --- a/src/unported/java/appeng/container/implementations/UpgradeableContainer.java +++ b/src/main/java/appeng/container/implementations/UpgradeableContainer.java @@ -196,7 +196,7 @@ public class UpgradeableContainer extends AEBaseContainer implements IOptionalSl } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { @@ -206,7 +206,7 @@ public class UpgradeableContainer extends AEBaseContainer implements IOptionalSl this.checkToolbox(); - for (final Object o : this.inventorySlots) { + for (final Object o : this.slots) { if (o instanceof OptionalFakeSlot) { final OptionalFakeSlot fs = (OptionalFakeSlot) o; if (!fs.isSlotEnabled() && !fs.getDisplayStack().isEmpty()) { @@ -246,7 +246,7 @@ public class UpgradeableContainer extends AEBaseContainer implements IOptionalSl } protected void standardDetectAndSendChanges() { - super.detectAndSendChanges(); + super.sendContentUpdates(); } @Override diff --git a/src/unported/java/appeng/container/implementations/VibrationChamberContainer.java b/src/main/java/appeng/container/implementations/VibrationChamberContainer.java similarity index 97% rename from src/unported/java/appeng/container/implementations/VibrationChamberContainer.java rename to src/main/java/appeng/container/implementations/VibrationChamberContainer.java index 428c720ae..73eb5ab61 100644 --- a/src/unported/java/appeng/container/implementations/VibrationChamberContainer.java +++ b/src/main/java/appeng/container/implementations/VibrationChamberContainer.java @@ -64,14 +64,14 @@ public class VibrationChamberContainer extends AEBaseContainer implements IProgr } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { if (Platform.isServer()) { this.remainingBurnTime = this.vibrationChamber.getMaxBurnTime() <= 0 ? 0 : (int) (100.0 * this.vibrationChamber.getBurnTime() / this.vibrationChamber.getMaxBurnTime()); this.burnSpeed = this.remainingBurnTime <= 0 ? 0 : this.vibrationChamber.getBurnSpeed(); } - super.detectAndSendChanges(); + super.sendContentUpdates(); } @Override diff --git a/src/unported/java/appeng/container/implementations/WirelessContainer.java b/src/main/java/appeng/container/implementations/WirelessContainer.java similarity index 97% rename from src/unported/java/appeng/container/implementations/WirelessContainer.java rename to src/main/java/appeng/container/implementations/WirelessContainer.java index 99ab72cc2..859cb6f7b 100644 --- a/src/unported/java/appeng/container/implementations/WirelessContainer.java +++ b/src/main/java/appeng/container/implementations/WirelessContainer.java @@ -62,13 +62,13 @@ public class WirelessContainer extends AEBaseContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { final int boosters = this.boosterSlot.getStack().isEmpty() ? 0 : this.boosterSlot.getStack().getCount(); this.setRange((long) (10 * AEConfig.instance().wireless_getMaxRange(boosters))); this.setDrain((long) (100 * AEConfig.instance().wireless_getPowerDrain(boosters))); - super.detectAndSendChanges(); + super.sendContentUpdates(); } public long getRange() { diff --git a/src/unported/java/appeng/container/implementations/WirelessTermContainer.java b/src/main/java/appeng/container/implementations/WirelessTermContainer.java similarity index 96% rename from src/unported/java/appeng/container/implementations/WirelessTermContainer.java rename to src/main/java/appeng/container/implementations/WirelessTermContainer.java index 857ecb5d9..febdcacda 100644 --- a/src/unported/java/appeng/container/implementations/WirelessTermContainer.java +++ b/src/main/java/appeng/container/implementations/WirelessTermContainer.java @@ -28,6 +28,7 @@ import appeng.core.AEConfig; import appeng.core.localization.PlayerMessages; import appeng.helpers.WirelessTerminalGuiObject; import appeng.util.Platform; +import net.minecraft.util.Util; public class WirelessTermContainer extends MEPortableCellContainer { @@ -52,8 +53,8 @@ public class WirelessTermContainer extends MEPortableCellContainer { } @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); + public void sendContentUpdates() { + super.sendContentUpdates(); if (!this.wirelessTerminalGUIObject.rangeCheck()) { if (Platform.isServer() && this.isValidContainer()) { diff --git a/src/unported/java/appeng/container/interfaces/IProgressProvider.java b/src/main/java/appeng/container/interfaces/IProgressProvider.java similarity index 100% rename from src/unported/java/appeng/container/interfaces/IProgressProvider.java rename to src/main/java/appeng/container/interfaces/IProgressProvider.java diff --git a/src/unported/java/appeng/container/slot/AppEngCraftingSlot.java b/src/main/java/appeng/container/slot/AppEngCraftingSlot.java similarity index 70% rename from src/unported/java/appeng/container/slot/AppEngCraftingSlot.java rename to src/main/java/appeng/container/slot/AppEngCraftingSlot.java index 281612245..70ecadf9c 100644 --- a/src/unported/java/appeng/container/slot/AppEngCraftingSlot.java +++ b/src/main/java/appeng/container/slot/AppEngCraftingSlot.java @@ -24,11 +24,9 @@ import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.RecipeType; import net.minecraft.util.collection.DefaultedList; -import net.minecraft.world.World; -import net.minecraftforge.fml.hooks.BasicEventHooks; import appeng.util.helpers.ItemHandlerUtil; -import appeng.util.inv.WrapperInvItemHandler; +import net.minecraft.world.World; public class AppEngCraftingSlot extends AppEngSlot { @@ -44,7 +42,7 @@ public class AppEngCraftingSlot extends AppEngSlot { /** * The number of items that have been crafted so far. Gets passed to - * ItemStack.onCrafting before being reset. + * ItemStack.onCrafted before being reset. */ private int amountCrafted; @@ -60,19 +58,19 @@ public class AppEngCraftingSlot extends AppEngSlot { * armor slots. */ @Override - public boolean isItemValid(final ItemStack par1ItemStack) { + public boolean canInsert(final ItemStack par1ItemStack) { return false; } /** * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not * ore and wood. Typically increases an internal count then calls - * onCrafting(item). + * onCrafted(item). */ @Override - protected void onCrafting(final ItemStack par1ItemStack, final int par2) { + protected void onCrafted(final ItemStack par1ItemStack, final int par2) { this.amountCrafted += par2; - this.onCrafting(par1ItemStack); + this.onCrafted(par1ItemStack); } /** @@ -80,40 +78,40 @@ public class AppEngCraftingSlot extends AppEngSlot { * ore and wood. */ @Override - protected void onCrafting(final ItemStack par1ItemStack) { - par1ItemStack.onCrafting(this.thePlayer.world, this.thePlayer, this.amountCrafted); + protected void onCrafted(final ItemStack par1ItemStack) { + par1ItemStack.onCraft(this.thePlayer.world, this.thePlayer, this.amountCrafted); this.amountCrafted = 0; } @Override - public ItemStack onTake(final PlayerEntity playerIn, final ItemStack stack) { - BasicEventHooks.firePlayerCraftingEvent(playerIn, stack, new WrapperInvItemHandler(this.craftMatrix)); - this.onCrafting(stack); - net.minecraftforge.common.ForgeHooks.setCraftingPlayer(playerIn); + public ItemStack onTakeItem(final PlayerEntity playerIn, final ItemStack stack) { + // FIXME FABRIC BasicEventHooks.firePlayerCraftingEvent(playerIn, stack, new WrapperInvItemHandler(this.craftMatrix)); + this.onCrafted(stack); + // FIXME FABRIC: net.minecraftforge.common.ForgeHooks.setCraftingPlayer(playerIn); final CraftingInventory ic = new CraftingInventory(this.getContainer(), 3, 3); for (int x = 0; x < this.craftMatrix.getSlotCount(); x++) { ic.setStack(x, this.craftMatrix.getInvStack(x)); } - final DefaultedList aitemstack = this.getRemainingItems(ic, playerIn.world); + final DefaultedList remainingItems = getRemainingItems(ic, playerIn.world); ItemHandlerUtil.copy(ic, this.craftMatrix, false); - net.minecraftforge.common.ForgeHooks.setCraftingPlayer(null); + // FIXME FABRIC: net.minecraftforge.common.ForgeHooks.setCraftingPlayer(null); - for (int i = 0; i < aitemstack.size(); ++i) { + for (int i = 0; i < remainingItems.size(); ++i) { final ItemStack itemstack1 = this.craftMatrix.getInvStack(i); - final ItemStack itemstack2 = aitemstack.get(i); + final ItemStack itemstack2 = remainingItems.get(i); if (!itemstack1.isEmpty()) { - this.craftMatrix.extractItem(i, 1, false); + this.craftMatrix.getSlot(i).extract(1); } if (!itemstack2.isEmpty()) { if (this.craftMatrix.getInvStack(i).isEmpty()) { ItemHandlerUtil.setStackInSlot(this.craftMatrix, i, itemstack2); - } else if (!this.thePlayer.inventory.addItemStackToInventory(itemstack2)) { + } else if (!this.thePlayer.inventory.insertStack(itemstack2)) { this.thePlayer.dropItem(itemstack2, false); } } @@ -127,19 +125,17 @@ public class AppEngCraftingSlot extends AppEngSlot { * second int arg. Returns the new stack. */ @Override - public ItemStack decrStackSize(final int par1) { - if (this.getHasStack()) { + public ItemStack takeStack(final int par1) { + if (this.hasStack()) { this.amountCrafted += Math.min(par1, this.getStack().getCount()); } - return super.decrStackSize(par1); + return super.takeStack(par1); } // TODO: This is really hacky and NEEDS to be solved with a full container/gui // refactoring. protected DefaultedList getRemainingItems(CraftingInventory ic, World world) { - return world.getRecipeManager().getRecipe(RecipeType.CRAFTING, ic, world) - .map(iCraftingRecipe -> iCraftingRecipe.getRemainingItems(ic)) - .orElse(DefaultedList.withSize(9, ItemStack.EMPTY)); + return world.getRecipeManager().getRemainingStacks(RecipeType.CRAFTING, ic, world); } } diff --git a/src/unported/java/appeng/container/slot/AppEngSlot.java b/src/main/java/appeng/container/slot/AppEngSlot.java similarity index 75% rename from src/unported/java/appeng/container/slot/AppEngSlot.java rename to src/main/java/appeng/container/slot/AppEngSlot.java index b39a85e85..ff038255f 100644 --- a/src/unported/java/appeng/container/slot/AppEngSlot.java +++ b/src/main/java/appeng/container/slot/AppEngSlot.java @@ -18,22 +18,23 @@ package appeng.container.slot; -import javax.annotation.Nonnull; - import alexiil.mc.lib.attributes.item.FixedItemInv; +import alexiil.mc.lib.attributes.item.SingleItemSlot; +import appeng.container.AEBaseContainer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventory; -import net.minecraft.inventory.container.Slot; +import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; -import appeng.container.AEBaseContainer; -import appeng.util.helpers.ItemHandlerUtil; +import javax.annotation.Nonnull; public class AppEngSlot extends Slot { - private static Inventory emptyInventory = new Inventory(0); + private static Inventory emptyInventory = new SimpleInventory(0); private final FixedItemInv itemHandler; + private final SingleItemSlot backingSlot; private final int index; private final int defX; @@ -49,6 +50,7 @@ public class AppEngSlot extends Slot { super(emptyInventory, idx, x, y); this.itemHandler = inv; this.index = idx; + this.backingSlot = inv.getSlot(idx); this.defX = x; this.defY = y; @@ -70,13 +72,13 @@ public class AppEngSlot extends Slot { } public void clearStack() { - ItemHandlerUtil.setStackInSlot(this.itemHandler, this.index, ItemStack.EMPTY); + backingSlot.set(ItemStack.EMPTY); } @Override - public boolean isItemValid(@Nonnull final ItemStack par1ItemStack) { + public boolean canInsert(@Nonnull final ItemStack stack) { if (this.isSlotEnabled()) { - return this.itemHandler.isItemValid(this.index, par1ItemStack); + return this.backingSlot.isValid(stack); } return false; } @@ -88,7 +90,7 @@ public class AppEngSlot extends Slot { return ItemStack.EMPTY; } - if (this.itemHandler.getSlotCount() <= this.getSlotIndex()) { + if (this.index >= this.itemHandler.getSlotCount()) { return ItemStack.EMPTY; } @@ -97,14 +99,14 @@ public class AppEngSlot extends Slot { return this.getDisplayStack(); } - return this.itemHandler.getInvStack(this.index); + return this.backingSlot.get(); } @Override - public void putStack(final ItemStack stack) { + public void setStack(final ItemStack stack) { if (this.isSlotEnabled()) { - ItemHandlerUtil.setStackInSlot(this.itemHandler, this.index, stack); - this.onSlotChanged(); + this.backingSlot.set(stack); + this.markDirty(); } } @@ -114,49 +116,47 @@ public class AppEngSlot extends Slot { } } - public FixedItemInv getItemHandler() { - return this.itemHandler; - } - @Override - public void onSlotChanged() { - super.onSlotChanged(); + public void markDirty() { + super.markDirty(); this.setIsValid(CalculatedValidity.NotAvailable); notifyContainerSlotChanged(); } @Override - public int getSlotStackLimit() { - return this.itemHandler.getMaxAmount(this.index, ItemStack.EMPTY); + public int getMaxStackAmount() { + return this.backingSlot.getMaxAmount(ItemStack.EMPTY); } @Override - public int getItemStackLimit(@Nonnull ItemStack stack) { - return Math.min(this.getSlotStackLimit(), stack.getMaxCount()); + public int getMaxStackAmount(@Nonnull ItemStack stack) { + return Math.min(this.getMaxStackAmount(), stack.getMaxCount()); } @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { + public boolean canTakeItems(final PlayerEntity par1PlayerEntity) { if (this.isSlotEnabled()) { - return !this.itemHandler.extractItem(this.index, 1, true).isEmpty(); + return this.backingSlot.couldExtractAnything(); } return false; } @Override @Nonnull - public ItemStack decrStackSize(int amount) { - return this.itemHandler.extractItem(this.index, amount, false); + public ItemStack takeStack(int amount) { + return this.backingSlot.extract(amount); } @Override - public boolean isSameInventory(Slot other) { - return other instanceof AppEngSlot && ((AppEngSlot) other).itemHandler == this.itemHandler; + public boolean hasStack() { + return !backingSlot.get().isEmpty(); } + + @Override @Environment(EnvType.CLIENT) - public boolean isEnabled() { + public boolean doDrawHoveringEffect() { return this.isSlotEnabled(); } @@ -165,7 +165,7 @@ public class AppEngSlot extends Slot { } public ItemStack getDisplayStack() { - return this.itemHandler.getInvStack(this.index); + return this.backingSlot.get(); } public float getOpacityOfIcon() { diff --git a/src/unported/java/appeng/container/slot/CraftingMatrixSlot.java b/src/main/java/appeng/container/slot/CraftingMatrixSlot.java similarity index 81% rename from src/unported/java/appeng/container/slot/CraftingMatrixSlot.java rename to src/main/java/appeng/container/slot/CraftingMatrixSlot.java index d75306df2..27482a05e 100644 --- a/src/unported/java/appeng/container/slot/CraftingMatrixSlot.java +++ b/src/main/java/appeng/container/slot/CraftingMatrixSlot.java @@ -39,13 +39,13 @@ public class CraftingMatrixSlot extends AppEngSlot { @Override public void clearStack() { super.clearStack(); - this.c.onCraftMatrixChanged(this.wrappedInventory); + this.c.onContentChanged(this.wrappedInventory); } @Override - public void putStack(final ItemStack par1ItemStack) { - super.putStack(par1ItemStack); - this.c.onCraftMatrixChanged(this.wrappedInventory); + public void setStack(final ItemStack par1ItemStack) { + super.setStack(par1ItemStack); + this.c.onContentChanged(this.wrappedInventory); } @Override @@ -54,9 +54,9 @@ public class CraftingMatrixSlot extends AppEngSlot { } @Override - public ItemStack decrStackSize(final int par1) { - final ItemStack is = super.decrStackSize(par1); - this.c.onCraftMatrixChanged(this.wrappedInventory); + public ItemStack takeStack(final int par1) { + final ItemStack is = super.takeStack(par1); + this.c.onContentChanged(this.wrappedInventory); return is; } } diff --git a/src/unported/java/appeng/container/slot/CraftingTermSlot.java b/src/main/java/appeng/container/slot/CraftingTermSlot.java similarity index 93% rename from src/unported/java/appeng/container/slot/CraftingTermSlot.java rename to src/main/java/appeng/container/slot/CraftingTermSlot.java index 4268998fd..add0f87d3 100644 --- a/src/unported/java/appeng/container/slot/CraftingTermSlot.java +++ b/src/main/java/appeng/container/slot/CraftingTermSlot.java @@ -82,12 +82,12 @@ public class CraftingTermSlot extends AppEngCraftingSlot { } @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { + public boolean canTakeItems(final PlayerEntity par1PlayerEntity) { return false; } @Override - public ItemStack onTake(final PlayerEntity p, final ItemStack is) { + public ItemStack onTakeItem(final PlayerEntity p, final ItemStack is) { return is; } @@ -158,19 +158,18 @@ public class CraftingTermSlot extends AppEngCraftingSlot { } } - return world.getRecipeManager().getRecipe(RecipeType.CRAFTING, ic, world).orElse(null); + return world.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, ic, world).orElse(null); } // TODO: This is really hacky and NEEDS to be solved with a full container/gui // refactoring. - @Override protected DefaultedList getRemainingItems(CraftingInventory ic, World world) { if (this.container instanceof CraftingTermContainer) { final CraftingTermContainer containerTerminal = (CraftingTermContainer) this.container; final Recipe recipe = containerTerminal.getCurrentRecipe(); if (recipe != null && recipe.matches(ic, world)) { - return containerTerminal.getCurrentRecipe().getRemainingItems(ic); + return recipe.getRemainingStacks(ic); } } @@ -202,7 +201,8 @@ public class CraftingTermSlot extends AppEngCraftingSlot { if (r == null) { final Item target = request.getItem(); - if (target.isDamageable() && target.isRepairable(request)) { + // FIXME FABRIC: This entire code-path may be pointless because RepairItemRecipe is of type CRAFTING + if (target.isDamageable() /* FIXME FABRIC && target.isRepairable(request) */) { boolean isBad = false; for (int x = 0; x < ic.size(); x++) { final ItemStack pis = ic.getStack(x); @@ -214,9 +214,9 @@ public class CraftingTermSlot extends AppEngCraftingSlot { } } if (!isBad) { - super.onTake(p, is); + super.onTakeItem(p, is); // actually necessary to cleanup this case... - p.openContainer.onCraftMatrixChanged(new WrapperInvItemHandler(this.craftInv)); + p.currentScreenHandler.onContentChanged(new WrapperInvItemHandler(this.craftInv)); return request; } } @@ -243,7 +243,7 @@ public class CraftingTermSlot extends AppEngCraftingSlot { this.postCraft(p, inv, set, is); } - p.openContainer.onCraftMatrixChanged(new WrapperInvItemHandler(this.craftInv)); + p.currentScreenHandler.onContentChanged(new WrapperInvItemHandler(this.craftInv)); return is; } @@ -257,7 +257,7 @@ public class CraftingTermSlot extends AppEngCraftingSlot { } private void makeItem(final PlayerEntity p, final ItemStack is) { - super.onTake(p, is); + super.onTakeItem(p, is); } private void postCraft(final PlayerEntity p, final IMEMonitor inv, final ItemStack[] set, diff --git a/src/unported/java/appeng/container/slot/DisabledSlot.java b/src/main/java/appeng/container/slot/DisabledSlot.java similarity index 91% rename from src/unported/java/appeng/container/slot/DisabledSlot.java rename to src/main/java/appeng/container/slot/DisabledSlot.java index 4cc437567..a9ba26b77 100644 --- a/src/unported/java/appeng/container/slot/DisabledSlot.java +++ b/src/main/java/appeng/container/slot/DisabledSlot.java @@ -29,12 +29,12 @@ public class DisabledSlot extends AppEngSlot { } @Override - public boolean isItemValid(final ItemStack par1ItemStack) { + public boolean canInsert(final ItemStack par1ItemStack) { return false; } @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { + public boolean canTakeItems(final PlayerEntity par1PlayerEntity) { return false; } } diff --git a/src/unported/java/appeng/container/slot/FakeBlacklistSlot.java b/src/main/java/appeng/container/slot/FakeBlacklistSlot.java similarity index 97% rename from src/unported/java/appeng/container/slot/FakeBlacklistSlot.java rename to src/main/java/appeng/container/slot/FakeBlacklistSlot.java index 1418add13..547c6de45 100644 --- a/src/unported/java/appeng/container/slot/FakeBlacklistSlot.java +++ b/src/main/java/appeng/container/slot/FakeBlacklistSlot.java @@ -38,7 +38,7 @@ public class FakeBlacklistSlot extends FakeTypeOnlySlot { @Override public int getIcon() { - if (this.getHasStack()) { + if (this.hasStack()) { return this.getStack().getCount() > 0 ? 16 + 14 : 14; } return -1; diff --git a/src/unported/java/appeng/container/slot/FakeCraftingMatrixSlot.java b/src/main/java/appeng/container/slot/FakeCraftingMatrixSlot.java similarity index 100% rename from src/unported/java/appeng/container/slot/FakeCraftingMatrixSlot.java rename to src/main/java/appeng/container/slot/FakeCraftingMatrixSlot.java diff --git a/src/unported/java/appeng/container/slot/FakeSlot.java b/src/main/java/appeng/container/slot/FakeSlot.java similarity index 80% rename from src/unported/java/appeng/container/slot/FakeSlot.java rename to src/main/java/appeng/container/slot/FakeSlot.java index 92c89e00d..89cbded54 100644 --- a/src/unported/java/appeng/container/slot/FakeSlot.java +++ b/src/main/java/appeng/container/slot/FakeSlot.java @@ -29,31 +29,31 @@ public class FakeSlot extends AppEngSlot { } @Override - public ItemStack onTake(final PlayerEntity par1PlayerEntity, final ItemStack par2ItemStack) { + public ItemStack onTakeItem(final PlayerEntity par1PlayerEntity, final ItemStack par2ItemStack) { return par2ItemStack; } @Override - public ItemStack decrStackSize(final int par1) { + public ItemStack takeStack(final int par1) { return ItemStack.EMPTY; } @Override - public boolean isItemValid(final ItemStack par1ItemStack) { + public boolean canInsert(final ItemStack par1ItemStack) { return false; } @Override - public void putStack(ItemStack is) { + public void setStack(ItemStack is) { if (!is.isEmpty()) { is = is.copy(); } - super.putStack(is); + super.setStack(is); } @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { + public boolean canTakeItems(final PlayerEntity par1PlayerEntity) { return false; } } diff --git a/src/unported/java/appeng/container/slot/FakeTypeOnlySlot.java b/src/main/java/appeng/container/slot/FakeTypeOnlySlot.java similarity index 95% rename from src/unported/java/appeng/container/slot/FakeTypeOnlySlot.java rename to src/main/java/appeng/container/slot/FakeTypeOnlySlot.java index 18a6d8dbe..a6805ec4b 100644 --- a/src/unported/java/appeng/container/slot/FakeTypeOnlySlot.java +++ b/src/main/java/appeng/container/slot/FakeTypeOnlySlot.java @@ -28,7 +28,7 @@ public class FakeTypeOnlySlot extends FakeSlot { } @Override - public void putStack(ItemStack is) { + public void setStack(ItemStack is) { if (!is.isEmpty()) { is = is.copy(); if (is.getCount() > 1) { @@ -38,6 +38,6 @@ public class FakeTypeOnlySlot extends FakeSlot { } } - super.putStack(is); + super.setStack(is); } } diff --git a/src/unported/java/appeng/container/slot/IOptionalSlot.java b/src/main/java/appeng/container/slot/IOptionalSlot.java similarity index 100% rename from src/unported/java/appeng/container/slot/IOptionalSlot.java rename to src/main/java/appeng/container/slot/IOptionalSlot.java diff --git a/src/unported/java/appeng/container/slot/IOptionalSlotHost.java b/src/main/java/appeng/container/slot/IOptionalSlotHost.java similarity index 100% rename from src/unported/java/appeng/container/slot/IOptionalSlotHost.java rename to src/main/java/appeng/container/slot/IOptionalSlotHost.java diff --git a/src/unported/java/appeng/container/slot/InaccessibleSlot.java b/src/main/java/appeng/container/slot/InaccessibleSlot.java similarity index 90% rename from src/unported/java/appeng/container/slot/InaccessibleSlot.java rename to src/main/java/appeng/container/slot/InaccessibleSlot.java index 221769f87..517dde352 100644 --- a/src/unported/java/appeng/container/slot/InaccessibleSlot.java +++ b/src/main/java/appeng/container/slot/InaccessibleSlot.java @@ -31,18 +31,18 @@ public class InaccessibleSlot extends AppEngSlot { } @Override - public boolean isItemValid(final ItemStack i) { + public boolean canInsert(final ItemStack i) { return false; } @Override - public void onSlotChanged() { - super.onSlotChanged(); + public void markDirty() { + super.markDirty(); this.dspStack = ItemStack.EMPTY; } @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { + public boolean canTakeItems(final PlayerEntity par1PlayerEntity) { return false; } diff --git a/src/unported/java/appeng/container/slot/MolecularAssemblerPatternSlot.java b/src/main/java/appeng/container/slot/MolecularAssemblerPatternSlot.java similarity index 89% rename from src/unported/java/appeng/container/slot/MolecularAssemblerPatternSlot.java rename to src/main/java/appeng/container/slot/MolecularAssemblerPatternSlot.java index aacd48adc..17eed9ffe 100644 --- a/src/unported/java/appeng/container/slot/MolecularAssemblerPatternSlot.java +++ b/src/main/java/appeng/container/slot/MolecularAssemblerPatternSlot.java @@ -27,14 +27,17 @@ public class MolecularAssemblerPatternSlot extends AppEngSlot { private final MolecularAssemblerContainer mac; + private final int slotIdx; + public MolecularAssemblerPatternSlot(final MolecularAssemblerContainer mac, final FixedItemInv i, final int slotIdx, final int x, final int y) { super(i, slotIdx, x, y); this.mac = mac; + this.slotIdx = slotIdx; } @Override - public boolean isItemValid(final ItemStack i) { - return this.mac.isValidItemForSlot(this.getSlotIndex(), i); + public boolean canInsert(final ItemStack i) { + return this.mac.isValidItemForSlot(slotIdx, i); } } diff --git a/src/unported/java/appeng/container/slot/NormalSlot.java b/src/main/java/appeng/container/slot/NormalSlot.java similarity index 100% rename from src/unported/java/appeng/container/slot/NormalSlot.java rename to src/main/java/appeng/container/slot/NormalSlot.java diff --git a/src/unported/java/appeng/container/slot/OptionalFakeSlot.java b/src/main/java/appeng/container/slot/OptionalFakeSlot.java similarity index 100% rename from src/unported/java/appeng/container/slot/OptionalFakeSlot.java rename to src/main/java/appeng/container/slot/OptionalFakeSlot.java diff --git a/src/unported/java/appeng/container/slot/OptionalNormalSlot.java b/src/main/java/appeng/container/slot/OptionalNormalSlot.java similarity index 96% rename from src/unported/java/appeng/container/slot/OptionalNormalSlot.java rename to src/main/java/appeng/container/slot/OptionalNormalSlot.java index b9ca13567..aa593ac48 100644 --- a/src/unported/java/appeng/container/slot/OptionalNormalSlot.java +++ b/src/main/java/appeng/container/slot/OptionalNormalSlot.java @@ -43,11 +43,11 @@ public class OptionalNormalSlot extends AppEngSlot implements IOptionalSlot { @Override public int getSourceX() { - return this.xPos; + return this.x; } @Override public int getSourceY() { - return this.yPos; + return this.y; } } diff --git a/src/unported/java/appeng/container/slot/OptionalRestrictedInputSlot.java b/src/main/java/appeng/container/slot/OptionalRestrictedInputSlot.java similarity index 100% rename from src/unported/java/appeng/container/slot/OptionalRestrictedInputSlot.java rename to src/main/java/appeng/container/slot/OptionalRestrictedInputSlot.java diff --git a/src/unported/java/appeng/container/slot/OptionalTypeOnlyFakeSlot.java b/src/main/java/appeng/container/slot/OptionalTypeOnlyFakeSlot.java similarity index 95% rename from src/unported/java/appeng/container/slot/OptionalTypeOnlyFakeSlot.java rename to src/main/java/appeng/container/slot/OptionalTypeOnlyFakeSlot.java index d342c3a92..60dbeb14f 100644 --- a/src/unported/java/appeng/container/slot/OptionalTypeOnlyFakeSlot.java +++ b/src/main/java/appeng/container/slot/OptionalTypeOnlyFakeSlot.java @@ -29,7 +29,7 @@ public class OptionalTypeOnlyFakeSlot extends OptionalFakeSlot { } @Override - public void putStack(ItemStack is) { + public void setStack(ItemStack is) { if (!is.isEmpty()) { is = is.copy(); if (is.getCount() > 1) { @@ -39,6 +39,6 @@ public class OptionalTypeOnlyFakeSlot extends OptionalFakeSlot { } } - super.putStack(is); + super.setStack(is); } } diff --git a/src/unported/java/appeng/container/slot/OutputSlot.java b/src/main/java/appeng/container/slot/OutputSlot.java similarity index 95% rename from src/unported/java/appeng/container/slot/OutputSlot.java rename to src/main/java/appeng/container/slot/OutputSlot.java index c8fc007c3..ad8b0476d 100644 --- a/src/unported/java/appeng/container/slot/OutputSlot.java +++ b/src/main/java/appeng/container/slot/OutputSlot.java @@ -29,7 +29,7 @@ public class OutputSlot extends AppEngSlot { } @Override - public boolean isItemValid(final ItemStack i) { + public boolean canInsert(final ItemStack i) { return false; } } diff --git a/src/unported/java/appeng/container/slot/PatternOutputsSlot.java b/src/main/java/appeng/container/slot/PatternOutputsSlot.java similarity index 100% rename from src/unported/java/appeng/container/slot/PatternOutputsSlot.java rename to src/main/java/appeng/container/slot/PatternOutputsSlot.java diff --git a/src/unported/java/appeng/container/slot/PatternTermSlot.java b/src/main/java/appeng/container/slot/PatternTermSlot.java similarity index 100% rename from src/unported/java/appeng/container/slot/PatternTermSlot.java rename to src/main/java/appeng/container/slot/PatternTermSlot.java diff --git a/src/unported/java/appeng/container/slot/PlayerHotBarSlot.java b/src/main/java/appeng/container/slot/PlayerHotBarSlot.java similarity index 100% rename from src/unported/java/appeng/container/slot/PlayerHotBarSlot.java rename to src/main/java/appeng/container/slot/PlayerHotBarSlot.java diff --git a/src/unported/java/appeng/container/slot/PlayerInvSlot.java b/src/main/java/appeng/container/slot/PlayerInvSlot.java similarity index 100% rename from src/unported/java/appeng/container/slot/PlayerInvSlot.java rename to src/main/java/appeng/container/slot/PlayerInvSlot.java diff --git a/src/unported/java/appeng/container/slot/RestrictedInputSlot.java b/src/main/java/appeng/container/slot/RestrictedInputSlot.java similarity index 93% rename from src/unported/java/appeng/container/slot/RestrictedInputSlot.java rename to src/main/java/appeng/container/slot/RestrictedInputSlot.java index 9fa5fe94f..8fe2c6b18 100644 --- a/src/unported/java/appeng/container/slot/RestrictedInputSlot.java +++ b/src/main/java/appeng/container/slot/RestrictedInputSlot.java @@ -19,19 +19,21 @@ package appeng.container.slot; import java.util.List; -import java.util.Set; import alexiil.mc.lib.attributes.item.FixedItemInv; import com.google.common.collect.ImmutableList; +import net.fabricmc.fabric.api.registry.FuelRegistry; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.Slot; +import net.minecraft.item.Item; +import net.minecraft.screen.slot.Slot; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.tag.ItemTags; +import net.minecraft.tag.Tag; import net.minecraft.util.Identifier; import net.minecraft.world.World; -import net.minecraftforge.common.ForgeHooks; import appeng.api.AEApi; import appeng.api.definitions.IDefinitions; @@ -79,11 +81,11 @@ public class RestrictedInputSlot extends AppEngSlot { } @Override - public int getSlotStackLimit() { + public int getMaxStackAmount() { if (this.stackLimit != -1) { return this.stackLimit; } - return super.getSlotStackLimit(); + return super.getMaxStackAmount(); } public boolean isValid(final ItemStack is, final World theWorld) { @@ -102,7 +104,7 @@ public class RestrictedInputSlot extends AppEngSlot { } @Override - public boolean isItemValid(final ItemStack i) { + public boolean canInsert(final ItemStack i) { if (!this.getContainer().isValidForSlot(this, i)) { return false; } @@ -115,7 +117,7 @@ public class RestrictedInputSlot extends AppEngSlot { return false; } - if (!super.isItemValid(i)) { + if (!super.canInsert(i)) { return false; } @@ -182,7 +184,7 @@ public class RestrictedInputSlot extends AppEngSlot { case ORE: return GrinderRecipes.isValidIngredient(p.player.world, i); case FUEL: - return ForgeHooks.getBurnTime(i) > 0; + return FuelRegistry.INSTANCE.get(i.getItem()) > 0; case POWERED_TOOL: return Platform.isChargeable(i); case QE_SINGULARITY: @@ -223,7 +225,7 @@ public class RestrictedInputSlot extends AppEngSlot { } @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { + public boolean canTakeItems(final PlayerEntity par1PlayerEntity) { return this.isAllowEdit(); } @@ -247,9 +249,11 @@ public class RestrictedInputSlot extends AppEngSlot { return true; } - Set itemTags = i.getItem().getTags(); + // TODO: Can be optimized by somehow caching the Tag's + Item item = i.getItem(); for (Identifier tagName : METAL_INGOT_TAGS) { - if (itemTags.contains(tagName)) { + Tag ingotTag = ItemTags.getContainer().get(tagName); + if (ingotTag != null && item.isIn(ingotTag)) { return true; } } diff --git a/src/main/java/appeng/core/AppEng.java b/src/main/java/appeng/core/AppEng.java index 63819ab72..ff8b6fa6f 100644 --- a/src/main/java/appeng/core/AppEng.java +++ b/src/main/java/appeng/core/AppEng.java @@ -71,7 +71,7 @@ public interface AppEng { void updateRenderMode(PlayerEntity player); - boolean isActionKey(@Nonnull final ActionKey key, InputUtil.Key input); + boolean isActionKey(@Nonnull final ActionKey key, int keyCode, int scanCode); /** * Get the currently running server. On the client-side this may throw if no server diff --git a/src/main/java/appeng/core/AppEngBase.java b/src/main/java/appeng/core/AppEngBase.java index 48d657e96..b5cb8ddbc 100644 --- a/src/main/java/appeng/core/AppEngBase.java +++ b/src/main/java/appeng/core/AppEngBase.java @@ -11,6 +11,9 @@ import appeng.api.parts.CableRenderMode; import appeng.bootstrap.IBootstrapComponent; import appeng.bootstrap.components.ITileEntityRegistrationComponent; import appeng.client.render.effects.ParticleTypes; +import appeng.container.AEBaseContainer; +import appeng.container.ContainerOpener; +import appeng.container.implementations.*; import appeng.core.features.registries.cell.BasicCellHandler; import appeng.core.features.registries.cell.BasicItemCellGuiHandler; import appeng.core.features.registries.cell.CreativeCellHandler; @@ -23,12 +26,14 @@ import appeng.hooks.ToolItemHook; import appeng.me.cache.*; import appeng.mixins.CriteriaRegisterMixin; import appeng.recipes.handlers.*; +import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; @@ -60,6 +65,7 @@ public abstract class AppEngBase implements AppEng { Api.INSTANCE = new Api(); registerBlockEntities(); + registerScreenHandlerTypes(); registerParticleTypes(); registerRecipeTypes(); registerRecipeSerializers(); @@ -181,4 +187,91 @@ public abstract class AppEngBase implements AppEng { return CableRenderMode.STANDARD; } + private void registerScreenHandlerTypes() { + + CellWorkbenchContainer.TYPE = registerScreenHandler("cellworkbench", CellWorkbenchContainer::fromNetwork, + CellWorkbenchContainer::open); + ChestContainer.TYPE = registerScreenHandler("chest", ChestContainer::fromNetwork, ChestContainer::open); + CondenserContainer.TYPE = registerScreenHandler("condenser", CondenserContainer::fromNetwork, + CondenserContainer::open); + CraftAmountContainer.TYPE = registerScreenHandler("craftamount", CraftAmountContainer::fromNetwork, + CraftAmountContainer::open); + CraftConfirmContainer.TYPE = registerScreenHandler("craftconfirm", CraftConfirmContainer::fromNetwork, + CraftConfirmContainer::open); + CraftingCPUContainer.TYPE = registerScreenHandler("craftingcpu", CraftingCPUContainer::fromNetwork, + CraftingCPUContainer::open); + CraftingStatusContainer.TYPE = registerScreenHandler("craftingstatus", + CraftingStatusContainer::fromNetwork, CraftingStatusContainer::open); + CraftingTermContainer.TYPE = registerScreenHandler("craftingterm", CraftingTermContainer::fromNetwork, + CraftingTermContainer::open); + DriveContainer.TYPE = registerScreenHandler("drive", DriveContainer::fromNetwork, DriveContainer::open); + FormationPlaneContainer.TYPE = registerScreenHandler("formationplane", + FormationPlaneContainer::fromNetwork, FormationPlaneContainer::open); + GrinderContainer.TYPE = registerScreenHandler("grinder", GrinderContainer::fromNetwork, + GrinderContainer::open); + InscriberContainer.TYPE = registerScreenHandler("inscriber", InscriberContainer::fromNetwork, + InscriberContainer::open); + InterfaceContainer.TYPE = registerScreenHandler("interface", InterfaceContainer::fromNetwork, + InterfaceContainer::open); + InterfaceTerminalContainer.TYPE = registerScreenHandler("interfaceterminal", + InterfaceTerminalContainer::fromNetwork, InterfaceTerminalContainer::open); + IOPortContainer.TYPE = registerScreenHandler("ioport", IOPortContainer::fromNetwork, + IOPortContainer::open); + LevelEmitterContainer.TYPE = registerScreenHandler("levelemitter", LevelEmitterContainer::fromNetwork, + LevelEmitterContainer::open); + MolecularAssemblerContainer.TYPE = registerScreenHandler("molecular_assembler", + MolecularAssemblerContainer::fromNetwork, MolecularAssemblerContainer::open); + MEMonitorableContainer.TYPE = registerScreenHandler("memonitorable", MEMonitorableContainer::fromNetwork, + MEMonitorableContainer::open); + MEPortableCellContainer.TYPE = registerScreenHandler("meportablecell", + MEPortableCellContainer::fromNetwork, MEPortableCellContainer::open); + NetworkStatusContainer.TYPE = registerScreenHandler("networkstatus", NetworkStatusContainer::fromNetwork, + NetworkStatusContainer::open); + NetworkToolContainer.TYPE = registerScreenHandler("networktool", NetworkToolContainer::fromNetwork, + NetworkToolContainer::open); + PatternTermContainer.TYPE = registerScreenHandler("patternterm", PatternTermContainer::fromNetwork, + PatternTermContainer::open); + PriorityContainer.TYPE = registerScreenHandler("priority", PriorityContainer::fromNetwork, + PriorityContainer::open); + QNBContainer.TYPE = registerScreenHandler("qnb", QNBContainer::fromNetwork, QNBContainer::open); + QuartzKnifeContainer.TYPE = registerScreenHandler("quartzknife", QuartzKnifeContainer::fromNetwork, + QuartzKnifeContainer::open); + SecurityStationContainer.TYPE = registerScreenHandler("securitystation", + SecurityStationContainer::fromNetwork, SecurityStationContainer::open); + SkyChestContainer.TYPE = registerScreenHandler("skychest", SkyChestContainer::fromNetwork, + SkyChestContainer::open); + SpatialIOPortContainer.TYPE = registerScreenHandler("spatialioport", SpatialIOPortContainer::fromNetwork, + SpatialIOPortContainer::open); + StorageBusContainer.TYPE = registerScreenHandler("storagebus", StorageBusContainer::fromNetwork, + StorageBusContainer::open); + UpgradeableContainer.TYPE = registerScreenHandler("upgradeable", UpgradeableContainer::fromNetwork, + UpgradeableContainer::open); + VibrationChamberContainer.TYPE = registerScreenHandler("vibrationchamber", + VibrationChamberContainer::fromNetwork, VibrationChamberContainer::open); + WirelessContainer.TYPE = registerScreenHandler("wireless", WirelessContainer::fromNetwork, + WirelessContainer::open); + WirelessTermContainer.TYPE = registerScreenHandler("wirelessterm", WirelessTermContainer::fromNetwork, + WirelessTermContainer::open); + +// FIXME FABRIC FluidFormationPlaneContainer.TYPE = registerScreenHandler("fluid_formation_plane", +// FIXME FABRIC FluidFormationPlaneContainer::fromNetwork, FluidFormationPlaneContainer::open); +// FIXME FABRIC FluidIOContainer.TYPE = registerScreenHandler("fluid_io", FluidIOContainer::fromNetwork, +// FIXME FABRIC FluidIOContainer::open); +// FIXME FABRIC FluidInterfaceContainer.TYPE = registerScreenHandler("fluid_interface", +// FIXME FABRIC FluidInterfaceContainer::fromNetwork, FluidInterfaceContainer::open); +// FIXME FABRIC FluidLevelEmitterContainer.TYPE = registerScreenHandler("fluid_level_emitter", +// FIXME FABRIC FluidLevelEmitterContainer::fromNetwork, FluidLevelEmitterContainer::open); +// FIXME FABRIC FluidStorageBusContainer.TYPE = registerScreenHandler("fluid_storage_bus", +// FIXME FABRIC FluidStorageBusContainer::fromNetwork, FluidStorageBusContainer::open); +// FIXME FABRIC FluidTerminalContainer.TYPE = registerScreenHandler("fluid_terminal", FluidTerminalContainer::fromNetwork, +// FIXME FABRIC FluidTerminalContainer::open); + + } + + private ScreenHandlerType registerScreenHandler(String id, ScreenHandlerRegistry.ExtendedClientHandlerFactory factory, ContainerOpener.Opener opener) { + ScreenHandlerType type = ScreenHandlerRegistry.registerExtended(AppEng.makeId(id), factory); + ContainerOpener.addOpener(type, opener); + return type; + } + } diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index 27f1b2030..ffd448690 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -22,26 +22,47 @@ import appeng.api.definitions.IBlockDefinition; import appeng.api.definitions.IBlocks; import appeng.api.definitions.ITileDefinition; import appeng.api.features.AEFeature; +import appeng.block.AEBaseBlockItemChargeable; +import appeng.block.crafting.*; +import appeng.block.grindstone.CrankBlock; +import appeng.block.grindstone.GrinderBlock; import appeng.block.misc.*; -import appeng.block.networking.CableBusBlock; -import appeng.block.networking.CableBusRendering; +import appeng.block.networking.*; +import appeng.block.paint.PaintSplotchesBlock; +import appeng.block.paint.PaintSplotchesRendering; +import appeng.block.qnb.QuantumBridgeRendering; +import appeng.block.qnb.QuantumLinkChamberBlock; +import appeng.block.qnb.QuantumRingBlock; +import appeng.block.spatial.MatrixFrameBlock; +import appeng.block.spatial.SpatialIOPortBlock; +import appeng.block.spatial.SpatialPylonBlock; +import appeng.block.storage.*; import appeng.block.storage.ChestBlock; -import appeng.block.storage.ChestRendering; -import appeng.block.storage.SkyChestBlock; import appeng.bootstrap.*; +import static appeng.block.crafting.AbstractCraftingUnitBlock.CraftingUnitType; import appeng.bootstrap.components.IInitComponent; import appeng.bootstrap.definitions.TileEntityDefinition; +import appeng.client.render.crafting.CraftingCubeRendering; +import appeng.client.render.spatial.SpatialPylonRendering; +import appeng.client.render.tesr.CrankTESR; +import appeng.client.render.tesr.DriveLedTileEntityRenderer; import appeng.client.render.tesr.SkyChestTESR; import appeng.decorative.AEDecorativeBlock; import appeng.decorative.solid.*; import appeng.decorative.solid.SkyStoneBlock.SkystoneType; import appeng.entity.TinyTNTPrimedEntity; import appeng.hooks.TinyTNTDispenseItemBehavior; -import appeng.tile.misc.LightDetectorBlockEntity; -import appeng.tile.misc.SkyCompassBlockEntity; -import appeng.tile.networking.CableBusBlockEntity; -import appeng.tile.networking.CableBusTESR; +import appeng.tile.crafting.*; +import appeng.tile.grindstone.CrankBlockEntity; +import appeng.tile.grindstone.GrinderBlockEntity; +import appeng.tile.misc.*; +import appeng.tile.networking.*; +import appeng.tile.qnb.QuantumBridgeBlockEntity; +import appeng.tile.spatial.SpatialIOPortBlockEntity; +import appeng.tile.spatial.SpatialPylonBlockEntity; import appeng.tile.storage.ChestBlockEntity; +import appeng.tile.storage.DriveBlockEntity; +import appeng.tile.storage.IOPortBlockEntity; import appeng.tile.storage.SkyChestBlockEntity; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -162,7 +183,7 @@ public final class ApiBlocks implements IBlocks { rendering.renderType(RenderLayer.getCutout()); } }).build(); -// FIXME FABRIC this.matrixFrame = registry.block("matrix_frame", MatrixFrameBlock::new).features(AEFeature.SPATIAL_IO).build(); + this.matrixFrame = registry.block("matrix_frame", MatrixFrameBlock::new).features(AEFeature.SPATIAL_IO).build(); FeatureFactory deco = registry.features(AEFeature.DECORATIVE_BLOCKS); this.quartzBlock = deco.block("quartz_block", () -> new AEDecorativeBlock(QUARTZ_PROPERTIES)).build(); @@ -246,45 +267,45 @@ public final class ApiBlocks implements IBlocks { .tileEntity(registry.tileEntity("sky_compass", SkyCompassBlockEntity.class, SkyCompassBlockEntity::new) .rendering(new SkyCompassRendering()).build()) .build(); -// FIXME FABRIC this.grindstone = registry -// FIXME FABRIC .block("grindstone", () -> new GrinderBlock(defaultProps(Material.STONE).strength(3.2f))) -// FIXME FABRIC .features(AEFeature.GRIND_STONE) -// FIXME FABRIC .tileEntity(registry.tileEntity("grindstone", GrinderBlockEntity.class, GrinderBlockEntity::new).build()) -// FIXME FABRIC .build(); -// FIXME FABRIC this.crank = registry -// FIXME FABRIC .block("crank", -// FIXME FABRIC () -> new CrankBlock( -// FIXME FABRIC defaultProps(Material.WOOD).breakByTool(FabricToolTags.AXES, 0).notSolid())) -// FIXME FABRIC .features(AEFeature.GRIND_STONE) -// FIXME FABRIC .tileEntity(registry.tileEntity("crank", CrankBlockEntity.class, CrankBlockEntity::new) -// FIXME FABRIC .rendering(new TileEntityRenderingCustomizer() { -// FIXME FABRIC @Override -// FIXME FABRIC @Environment(EnvType.CLIENT) -// FIXME FABRIC public void customize(TileEntityRendering rendering) { -// FIXME FABRIC rendering.tileEntityRenderer(CrankTESR::new); -// FIXME FABRIC } -// FIXME FABRIC }).build()) -// FIXME FABRIC .build(); -// FIXME FABRIC this.inscriber = registry.block("inscriber", () -> new InscriberBlock(defaultProps(Material.METAL).notSolid())) -// FIXME FABRIC .features(AEFeature.INSCRIBER) -// FIXME FABRIC .tileEntity(registry.tileEntity("inscriber", InscriberBlockEntity.class, InscriberBlockEntity::new) -// FIXME FABRIC .rendering(new InscriberRendering()).build()) -// FIXME FABRIC .build(); -// FIXME FABRIC this.wirelessAccessPoint = registry.block("wireless_access_point", WirelessBlock::new) -// FIXME FABRIC .features(AEFeature.WIRELESS_ACCESS_TERMINAL) -// FIXME FABRIC .tileEntity(registry -// FIXME FABRIC .tileEntity("wireless_access_point", WirelessBlockEntity.class, WirelessBlockEntity::new).build()) -// FIXME FABRIC .rendering(new WirelessRendering()).build(); -// FIXME FABRIC this.charger = registry.block("charger", ChargerBlock::new).features(AEFeature.CHARGER) -// FIXME FABRIC .tileEntity(registry.tileEntity("charger", ChargerBlockEntity.class, ChargerBlockEntity::new) -// FIXME FABRIC .rendering(new TileEntityRenderingCustomizer() { -// FIXME FABRIC @Override -// FIXME FABRIC @Environment(EnvType.CLIENT) -// FIXME FABRIC public void customize(TileEntityRendering rendering) { -// FIXME FABRIC rendering.tileEntityRenderer(ChargerBlock.createTesr()); -// FIXME FABRIC } -// FIXME FABRIC }).build()) -// FIXME FABRIC .build(); + this.grindstone = registry + .block("grindstone", () -> new GrinderBlock(defaultProps(Material.STONE).strength(3.2f))) + .features(AEFeature.GRIND_STONE) + .tileEntity(registry.tileEntity("grindstone", GrinderBlockEntity.class, GrinderBlockEntity::new).build()) + .build(); + this.crank = registry + .block("crank", + () -> new CrankBlock( + defaultProps(Material.WOOD).breakByTool(FabricToolTags.AXES, 0).solidBlock((state, world, pos) -> false))) + .features(AEFeature.GRIND_STONE) + .tileEntity(registry.tileEntity("crank", CrankBlockEntity.class, CrankBlockEntity::new) + .rendering(new TileEntityRenderingCustomizer() { + @Override + @Environment(EnvType.CLIENT) + public void customize(TileEntityRendering rendering) { + rendering.tileEntityRenderer(CrankTESR::new); + } + }).build()) + .build(); + this.inscriber = registry.block("inscriber", () -> new InscriberBlock(defaultProps(Material.METAL).solidBlock((state, world, pos) -> false))) + .features(AEFeature.INSCRIBER) + .tileEntity(registry.tileEntity("inscriber", InscriberBlockEntity.class, InscriberBlockEntity::new) + .rendering(new InscriberRendering()).build()) + .build(); + this.wirelessAccessPoint = registry.block("wireless_access_point", WirelessBlock::new) + .features(AEFeature.WIRELESS_ACCESS_TERMINAL) + .tileEntity(registry + .tileEntity("wireless_access_point", WirelessBlockEntity.class, WirelessBlockEntity::new).build()) + .rendering(new WirelessRendering()).build(); + this.charger = registry.block("charger", ChargerBlock::new).features(AEFeature.CHARGER) + .tileEntity(registry.tileEntity("charger", ChargerBlockEntity.class, ChargerBlockEntity::new) + .rendering(new TileEntityRenderingCustomizer() { + @Override + @Environment(EnvType.CLIENT) + public void customize(TileEntityRendering rendering) { + rendering.tileEntityRenderer(ChargerBlock.createTesr()); + } + }).build()) + .build(); TinyTNTPrimedEntity.TYPE = registry .entity("tiny_tnt_primed", TinyTNTPrimedEntity::new, SpawnGroup.MISC) @@ -299,178 +320,178 @@ public final class ApiBlocks implements IBlocks { .features(AEFeature.TINY_TNT).bootstrap((block, item) -> (IInitComponent) () -> DispenserBlock .registerBehavior(item, new TinyTNTDispenseItemBehavior())) .build(); -// FIXME this.securityStation = registry.block("security_station", SecurityStationBlock::new) -// FIXME .features(AEFeature.SECURITY) -// FIXME .tileEntity(registry -// FIXME .tileEntity("security_station", SecurityStationBlockEntity.class, SecurityStationBlockEntity::new) -// FIXME .build()) -// FIXME .rendering(new SecurityStationRendering()).build(); -// FIXME -// FIXME TileEntityDefinition quantumRingTile = registry -// FIXME .tileEntity("quantum_ring", QuantumBridgeBlockEntity.class, QuantumBridgeBlockEntity::new).build(); -// FIXME this.quantumRing = registry.block("quantum_ring", QuantumRingBlock::new) -// FIXME .features(AEFeature.QUANTUM_NETWORK_BRIDGE).tileEntity(quantumRingTile) -// FIXME .rendering(new QuantumBridgeRendering()).build(); -// FIXME this.quantumLink = registry.block("quantum_link", QuantumLinkChamberBlock::new) -// FIXME .features(AEFeature.QUANTUM_NETWORK_BRIDGE).tileEntity(quantumRingTile) -// FIXME .rendering(new QuantumBridgeRendering()).build(); -// FIXME this.spatialPylon = registry.block("spatial_pylon", SpatialPylonBlock::new).features(AEFeature.SPATIAL_IO) -// FIXME .tileEntity(registry -// FIXME .tileEntity("spatial_pylon", SpatialPylonBlockEntity.class, SpatialPylonBlockEntity::new).build()) -// FIXME .rendering(new SpatialPylonRendering()).build(); -// FIXME this.spatialIOPort = registry.block("spatial_io_port", SpatialIOPortBlock::new).features(AEFeature.SPATIAL_IO) -// FIXME .tileEntity(registry -// FIXME .tileEntity("spatial_io_port", SpatialIOPortBlockEntity.class, SpatialIOPortBlockEntity::new) -// FIXME .build()) -// FIXME .build(); -// FIXME this.controller = registry -// FIXME .block("controller", ControllerBlock::new).features(AEFeature.CHANNELS).tileEntity(registry -// FIXME .tileEntity("controller", ControllerBlockEntity.class, ControllerBlockEntity::new).build()) -// FIXME .rendering(new ControllerRendering()).build(); -// FIXME this.drive = registry.block("drive", DriveBlock::new).features(AEFeature.STORAGE_CELLS, AEFeature.ME_DRIVE) -// FIXME .tileEntity(registry.tileEntity("drive", DriveBlockEntity.class, DriveBlockEntity::new) -// FIXME .rendering(new TileEntityRenderingCustomizer() { -// FIXME @Override -// FIXME @Environment(EnvType.CLIENT) -// FIXME public void customize(TileEntityRendering rendering) { -// FIXME rendering.tileEntityRenderer(DriveLedTileEntityRenderer::new); -// FIXME } -// FIXME }).build()) -// FIXME .rendering(new DriveRendering()).build(); + this.securityStation = registry.block("security_station", SecurityStationBlock::new) + .features(AEFeature.SECURITY) + .tileEntity(registry + .tileEntity("security_station", SecurityStationBlockEntity.class, SecurityStationBlockEntity::new) + .build()) + .rendering(new SecurityStationRendering()).build(); + + TileEntityDefinition quantumRingTile = registry + .tileEntity("quantum_ring", QuantumBridgeBlockEntity.class, QuantumBridgeBlockEntity::new).build(); + this.quantumRing = registry.block("quantum_ring", QuantumRingBlock::new) + .features(AEFeature.QUANTUM_NETWORK_BRIDGE).tileEntity(quantumRingTile) + .rendering(new QuantumBridgeRendering()).build(); + this.quantumLink = registry.block("quantum_link", QuantumLinkChamberBlock::new) + .features(AEFeature.QUANTUM_NETWORK_BRIDGE).tileEntity(quantumRingTile) + .rendering(new QuantumBridgeRendering()).build(); + this.spatialPylon = registry.block("spatial_pylon", SpatialPylonBlock::new).features(AEFeature.SPATIAL_IO) + .tileEntity(registry + .tileEntity("spatial_pylon", SpatialPylonBlockEntity.class, SpatialPylonBlockEntity::new).build()) + .rendering(new SpatialPylonRendering()).build(); + this.spatialIOPort = registry.block("spatial_io_port", SpatialIOPortBlock::new).features(AEFeature.SPATIAL_IO) + .tileEntity(registry + .tileEntity("spatial_io_port", SpatialIOPortBlockEntity.class, SpatialIOPortBlockEntity::new) + .build()) + .build(); + this.controller = registry + .block("controller", ControllerBlock::new).features(AEFeature.CHANNELS).tileEntity(registry + .tileEntity("controller", ControllerBlockEntity.class, ControllerBlockEntity::new).build()) + .rendering(new ControllerRendering()).build(); + this.drive = registry.block("drive", DriveBlock::new).features(AEFeature.STORAGE_CELLS, AEFeature.ME_DRIVE) + .tileEntity(registry.tileEntity("drive", DriveBlockEntity.class, DriveBlockEntity::new) + .rendering(new TileEntityRenderingCustomizer() { + @Override + @Environment(EnvType.CLIENT) + public void customize(TileEntityRendering rendering) { + rendering.tileEntityRenderer(DriveLedTileEntityRenderer::new); + } + }).build()) + .rendering(new DriveRendering()).build(); this.chest = registry.block("chest", ChestBlock::new).features(AEFeature.STORAGE_CELLS, AEFeature.ME_CHEST) .tileEntity(registry.tileEntity("chest", ChestBlockEntity.class, ChestBlockEntity::new).build()) .rendering(new ChestRendering()).build(); -// FIXME this.iface = registry.block("interface", InterfaceBlock::new).features(AEFeature.INTERFACE) -// FIXME .tileEntity( -// FIXME registry.tileEntity("interface", InterfaceBlockEntity.class, InterfaceBlockEntity::new).build()) -// FIXME .build(); + this.iface = registry.block("interface", InterfaceBlock::new).features(AEFeature.INTERFACE) + .tileEntity( + registry.tileEntity("interface", InterfaceBlockEntity.class, InterfaceBlockEntity::new).build()) + .build(); // FIXME this.fluidIface = registry.block("fluid_interface", FluidInterfaceBlock::new) // FIXME .features(AEFeature.FLUID_INTERFACE) // FIXME .tileEntity(registry // FIXME .tileEntity("fluid_interface", FluidInterfaceBlockEntity.class, FluidInterfaceBlockEntity::new) // FIXME .build()) // FIXME .build(); -// FIXME this.cellWorkbench = registry.block("cell_workbench", CellWorkbenchBlock::new).features(AEFeature.STORAGE_CELLS) -// FIXME .tileEntity(registry -// FIXME .tileEntity("cell_workbench", CellWorkbenchBlockEntity.class, CellWorkbenchBlockEntity::new) -// FIXME .build()) -// FIXME .build(); -// FIXME this.iOPort = registry.block("io_port", IOPortBlock::new).features(AEFeature.STORAGE_CELLS, AEFeature.IO_PORT) -// FIXME .tileEntity(registry.tileEntity("io_port", IOPortBlockEntity.class, IOPortBlockEntity::new).build()) -// FIXME .build(); -// FIXME this.condenser = registry.block("condenser", CondenserBlock::new).features(AEFeature.CONDENSER) -// FIXME .tileEntity( -// FIXME registry.tileEntity("condenser", CondenserBlockEntity.class, CondenserBlockEntity::new).build()) -// FIXME .build(); -// FIXME this.energyAcceptor = registry.block("energy_acceptor", EnergyAcceptorBlock::new) -// FIXME .features(AEFeature.ENERGY_ACCEPTOR) -// FIXME .tileEntity(registry -// FIXME .tileEntity("energy_acceptor", EnergyAcceptorBlockEntity.class, EnergyAcceptorBlockEntity::new) -// FIXME .build()) -// FIXME .build(); -// FIXME this.vibrationChamber = registry.block("vibration_chamber", VibrationChamberBlock::new) -// FIXME .features(AEFeature.POWER_GEN).tileEntity(registry.tileEntity("vibration_chamber", -// FIXME VibrationChamberBlockEntity.class, VibrationChamberBlockEntity::new).build()) -// FIXME .build(); -// FIXME this.quartzGrowthAccelerator = registry.block("quartz_growth_accelerator", QuartzGrowthAcceleratorBlock::new) -// FIXME .tileEntity(registry.tileEntity("quartz_growth_accelerator", QuartzGrowthAcceleratorBlockEntity.class, -// FIXME QuartzGrowthAcceleratorBlockEntity::new).build()) -// FIXME .features(AEFeature.CRYSTAL_GROWTH_ACCELERATOR).build(); -// FIXME this.energyCell = registry.block("energy_cell", EnergyCellBlock::new).features(AEFeature.ENERGY_CELLS) -// FIXME .item(AEBaseBlockItemChargeable::new).tileEntity(registry -// FIXME .tileEntity("energy_cell", EnergyCellBlockEntity.class, EnergyCellBlockEntity::new).build()) -// FIXME .build(); -// FIXME this.energyCellDense = registry.block("dense_energy_cell", DenseEnergyCellBlock::new) -// FIXME .features(AEFeature.ENERGY_CELLS, AEFeature.DENSE_ENERGY_CELLS).item(AEBaseBlockItemChargeable::new) -// FIXME .tileEntity(registry.tileEntity("dense_energy_cell", DenseEnergyCellBlockEntity.class, -// FIXME DenseEnergyCellBlockEntity::new).build()) -// FIXME .build(); -// FIXME this.energyCellCreative = registry.block("creative_energy_cell", CreativeEnergyCellBlock::new) -// FIXME .features(AEFeature.CREATIVE).tileEntity(registry.tileEntity("creative_energy_cell", -// FIXME CreativeEnergyCellBlockEntity.class, CreativeEnergyCellBlockEntity::new).build()) -// FIXME .build(); -// FIXME -// FIXME TileEntityDefinition craftingUnit = registry -// FIXME .tileEntity("crafting_unit", CraftingBlockEntity.class, CraftingBlockEntity::new).build(); -// FIXME -// FIXME FeatureFactory crafting = registry.features(AEFeature.CRAFTING_CPU); -// FIXME AbstractBlock.Settings craftingBlockProps = defaultProps(Material.METAL); -// FIXME this.craftingUnit = crafting -// FIXME .block("crafting_unit", () -> new CraftingUnitBlock(craftingBlockProps, CraftingUnitType.UNIT)) -// FIXME .rendering(new CraftingCubeRendering()).tileEntity(craftingUnit).build(); -// FIXME this.craftingAccelerator = crafting -// FIXME .block("crafting_accelerator", -// FIXME () -> new CraftingUnitBlock(craftingBlockProps, CraftingUnitType.ACCELERATOR)) -// FIXME .rendering(new CraftingCubeRendering()).tileEntity(craftingUnit).build(); -// FIXME -// FIXME TileEntityDefinition craftingStorage = registry -// FIXME .tileEntity("crafting_storage", CraftingStorageBlockEntity.class, CraftingStorageBlockEntity::new) -// FIXME .build(); -// FIXME this.craftingStorage1k = crafting -// FIXME .block("1k_crafting_storage", -// FIXME () -> new CraftingStorageBlock(craftingBlockProps, CraftingUnitType.STORAGE_1K)) -// FIXME .item(CraftingStorageItem::new).tileEntity(craftingStorage).rendering(new CraftingCubeRendering()) -// FIXME .build(); -// FIXME this.craftingStorage4k = crafting -// FIXME .block("4k_crafting_storage", -// FIXME () -> new CraftingStorageBlock(craftingBlockProps, CraftingUnitType.STORAGE_4K)) -// FIXME .item(CraftingStorageItem::new).tileEntity(craftingStorage).rendering(new CraftingCubeRendering()) -// FIXME .build(); -// FIXME this.craftingStorage16k = crafting -// FIXME .block("16k_crafting_storage", -// FIXME () -> new CraftingStorageBlock(craftingBlockProps, CraftingUnitType.STORAGE_16K)) -// FIXME .item(CraftingStorageItem::new).tileEntity(craftingStorage).rendering(new CraftingCubeRendering()) -// FIXME .build(); -// FIXME this.craftingStorage64k = crafting -// FIXME .block("64k_crafting_storage", -// FIXME () -> new CraftingStorageBlock(craftingBlockProps, CraftingUnitType.STORAGE_64K)) -// FIXME .item(CraftingStorageItem::new).tileEntity(craftingStorage).rendering(new CraftingCubeRendering()) -// FIXME .build(); -// FIXME this.craftingMonitor = crafting.block("crafting_monitor", () -> new CraftingMonitorBlock(craftingBlockProps)) -// FIXME .tileEntity(registry -// FIXME .tileEntity("crafting_monitor", CraftingMonitorBlockEntity.class, CraftingMonitorBlockEntity::new) -// FIXME .rendering(new TileEntityRenderingCustomizer() { -// FIXME @Environment(EnvType.CLIENT) -// FIXME @Override -// FIXME public void customize(TileEntityRendering rendering) { -// FIXME rendering.tileEntityRenderer(CraftingMonitorTESR::new); -// FIXME } -// FIXME }).build()) -// FIXME .rendering(new BlockRenderingCustomizer() { -// FIXME @Override -// FIXME @Environment(EnvType.CLIENT) -// FIXME public void customize(IBlockRendering rendering, IItemRendering itemRendering) { -// FIXME rendering.renderType(RenderLayer.getCutout()); -// FIXME rendering.modelCustomizer((path, model) -> { -// FIXME // The formed model handles rotations itself, the unformed one does not -// FIXME if (model instanceof MonitorBakedModel) { -// FIXME return model; -// FIXME } -// FIXME return new AutoRotatingBakedModel(model); -// FIXME }); -// FIXME } -// FIXME }).build(); -// FIXME -// FIXME this.molecularAssembler = registry -// FIXME .block("molecular_assembler", () -> new MolecularAssemblerBlock(defaultProps(Material.METAL).notSolid())) -// FIXME .features(AEFeature.MOLECULAR_ASSEMBLER).rendering(new BlockRenderingCustomizer() { -// FIXME @Environment(EnvType.CLIENT) -// FIXME @Override -// FIXME public void customize(IBlockRendering rendering, IItemRendering itemRendering) { -// FIXME rendering.renderType(RenderLayer.getCutout()); -// FIXME } -// FIXME }) -// FIXME .tileEntity(registry -// FIXME .tileEntity("molecular_assembler", MolecularAssemblerBlockEntity.class, -// FIXME MolecularAssemblerBlockEntity::new) -// FIXME .rendering(new TileEntityRenderingCustomizer() { -// FIXME @Override -// FIXME @Environment(EnvType.CLIENT) -// FIXME public void customize(TileEntityRendering rendering) { -// FIXME rendering.tileEntityRenderer(MolecularAssemblerRenderer::new); -// FIXME } -// FIXME }).build()) -// FIXME .build(); + this.cellWorkbench = registry.block("cell_workbench", CellWorkbenchBlock::new).features(AEFeature.STORAGE_CELLS) + .tileEntity(registry + .tileEntity("cell_workbench", CellWorkbenchBlockEntity.class, CellWorkbenchBlockEntity::new) + .build()) + .build(); + this.iOPort = registry.block("io_port", IOPortBlock::new).features(AEFeature.STORAGE_CELLS, AEFeature.IO_PORT) + .tileEntity(registry.tileEntity("io_port", IOPortBlockEntity.class, IOPortBlockEntity::new).build()) + .build(); + this.condenser = registry.block("condenser", CondenserBlock::new).features(AEFeature.CONDENSER) + .tileEntity( + registry.tileEntity("condenser", CondenserBlockEntity.class, CondenserBlockEntity::new).build()) + .build(); + this.energyAcceptor = registry.block("energy_acceptor", EnergyAcceptorBlock::new) + .features(AEFeature.ENERGY_ACCEPTOR) + .tileEntity(registry + .tileEntity("energy_acceptor", EnergyAcceptorBlockEntity.class, EnergyAcceptorBlockEntity::new) + .build()) + .build(); + this.vibrationChamber = registry.block("vibration_chamber", VibrationChamberBlock::new) + .features(AEFeature.POWER_GEN).tileEntity(registry.tileEntity("vibration_chamber", + VibrationChamberBlockEntity.class, VibrationChamberBlockEntity::new).build()) + .build(); + this.quartzGrowthAccelerator = registry.block("quartz_growth_accelerator", QuartzGrowthAcceleratorBlock::new) + .tileEntity(registry.tileEntity("quartz_growth_accelerator", QuartzGrowthAcceleratorBlockEntity.class, + QuartzGrowthAcceleratorBlockEntity::new).build()) + .features(AEFeature.CRYSTAL_GROWTH_ACCELERATOR).build(); + this.energyCell = registry.block("energy_cell", EnergyCellBlock::new).features(AEFeature.ENERGY_CELLS) + .item(AEBaseBlockItemChargeable::new).tileEntity(registry + .tileEntity("energy_cell", EnergyCellBlockEntity.class, EnergyCellBlockEntity::new).build()) + .build(); + this.energyCellDense = registry.block("dense_energy_cell", DenseEnergyCellBlock::new) + .features(AEFeature.ENERGY_CELLS, AEFeature.DENSE_ENERGY_CELLS).item(AEBaseBlockItemChargeable::new) + .tileEntity(registry.tileEntity("dense_energy_cell", DenseEnergyCellBlockEntity.class, + DenseEnergyCellBlockEntity::new).build()) + .build(); + this.energyCellCreative = registry.block("creative_energy_cell", CreativeEnergyCellBlock::new) + .features(AEFeature.CREATIVE).tileEntity(registry.tileEntity("creative_energy_cell", + CreativeEnergyCellBlockEntity.class, CreativeEnergyCellBlockEntity::new).build()) + .build(); + + TileEntityDefinition craftingUnit = registry + .tileEntity("crafting_unit", CraftingBlockEntity.class, CraftingBlockEntity::new).build(); + + FeatureFactory crafting = registry.features(AEFeature.CRAFTING_CPU); + AbstractBlock.Settings craftingBlockProps = defaultProps(Material.METAL); + this.craftingUnit = crafting + .block("crafting_unit", () -> new CraftingUnitBlock(craftingBlockProps, CraftingUnitType.UNIT)) + .rendering(new CraftingCubeRendering()).tileEntity(craftingUnit).build(); + this.craftingAccelerator = crafting + .block("crafting_accelerator", + () -> new CraftingUnitBlock(craftingBlockProps, CraftingUnitType.ACCELERATOR)) + .rendering(new CraftingCubeRendering()).tileEntity(craftingUnit).build(); + + TileEntityDefinition craftingStorage = registry + .tileEntity("crafting_storage", CraftingStorageBlockEntity.class, CraftingStorageBlockEntity::new) + .build(); + this.craftingStorage1k = crafting + .block("1k_crafting_storage", + () -> new CraftingStorageBlock(craftingBlockProps, CraftingUnitType.STORAGE_1K)) + .item(CraftingStorageItem::new).tileEntity(craftingStorage).rendering(new CraftingCubeRendering()) + .build(); + this.craftingStorage4k = crafting + .block("4k_crafting_storage", + () -> new CraftingStorageBlock(craftingBlockProps, CraftingUnitType.STORAGE_4K)) + .item(CraftingStorageItem::new).tileEntity(craftingStorage).rendering(new CraftingCubeRendering()) + .build(); + this.craftingStorage16k = crafting + .block("16k_crafting_storage", + () -> new CraftingStorageBlock(craftingBlockProps, CraftingUnitType.STORAGE_16K)) + .item(CraftingStorageItem::new).tileEntity(craftingStorage).rendering(new CraftingCubeRendering()) + .build(); + this.craftingStorage64k = crafting + .block("64k_crafting_storage", + () -> new CraftingStorageBlock(craftingBlockProps, CraftingUnitType.STORAGE_64K)) + .item(CraftingStorageItem::new).tileEntity(craftingStorage).rendering(new CraftingCubeRendering()) + .build(); + this.craftingMonitor = crafting.block("crafting_monitor", () -> new CraftingMonitorBlock(craftingBlockProps)) + .tileEntity(registry + .tileEntity("crafting_monitor", CraftingMonitorBlockEntity.class, CraftingMonitorBlockEntity::new) + .rendering(new TileEntityRenderingCustomizer() { + @Environment(EnvType.CLIENT) + @Override + public void customize(TileEntityRendering rendering) { + // FIXME FABRIC rendering.tileEntityRenderer(CraftingMonitorTESR::new); + } + }).build()) + .rendering(new BlockRenderingCustomizer() { + @Override + @Environment(EnvType.CLIENT) + public void customize(IBlockRendering rendering, IItemRendering itemRendering) { + rendering.renderType(RenderLayer.getCutout()); + // FIXME FABRIC rendering.modelCustomizer((path, model) -> { + // FIXME FABRIC // The formed model handles rotations itself, the unformed one does not + // FIXME FABRIC if (model instanceof MonitorBakedModel) { + // FIXME FABRIC return model; + // FIXME FABRIC } + // FIXME FABRIC return new AutoRotatingBakedModel(model); + // FIXME FABRIC }); + } + }).build(); + + this.molecularAssembler = registry + .block("molecular_assembler", () -> new MolecularAssemblerBlock(defaultProps(Material.METAL).solidBlock((state, world, pos) -> false))) + .features(AEFeature.MOLECULAR_ASSEMBLER).rendering(new BlockRenderingCustomizer() { + @Environment(EnvType.CLIENT) + @Override + public void customize(IBlockRendering rendering, IItemRendering itemRendering) { + rendering.renderType(RenderLayer.getCutout()); + } + }) + .tileEntity(registry + .tileEntity("molecular_assembler", MolecularAssemblerBlockEntity.class, + MolecularAssemblerBlockEntity::new) + .rendering(new TileEntityRenderingCustomizer() { + @Override + @Environment(EnvType.CLIENT) + public void customize(TileEntityRendering rendering) { + rendering.tileEntityRenderer(MolecularAssemblerRenderer::new); + } + }).build()) + .build(); this.lightDetector = registry.block("light_detector", LightDetectorBlock::new) .features(AEFeature.LIGHT_DETECTOR) @@ -484,10 +505,10 @@ public final class ApiBlocks implements IBlocks { rendering.renderType(RenderLayer.getCutout()); } }).build(); -// FIXME this.paint = registry -// FIXME .block("paint", PaintSplotchesBlock::new).features(AEFeature.PAINT_BALLS).tileEntity(registry -// FIXME .tileEntity("paint", PaintSplotchesBlockEntity.class, PaintSplotchesBlockEntity::new).build()) -// FIXME .rendering(new PaintSplotchesRendering()).build(); + this.paint = registry + .block("paint", PaintSplotchesBlock::new).features(AEFeature.PAINT_BALLS).tileEntity(registry + .tileEntity("paint", PaintSplotchesBlockEntity.class, PaintSplotchesBlockEntity::new).build()) + .rendering(new PaintSplotchesRendering()).build(); this.skyStoneStairs = deco .block("sky_stone_stairs", diff --git a/src/main/java/appeng/core/api/definitions/ApiItems.java b/src/main/java/appeng/core/api/definitions/ApiItems.java index 764ba94f4..968497448 100644 --- a/src/main/java/appeng/core/api/definitions/ApiItems.java +++ b/src/main/java/appeng/core/api/definitions/ApiItems.java @@ -21,14 +21,48 @@ package appeng.core.api.definitions; import appeng.api.definitions.IItemDefinition; import appeng.api.definitions.IItems; import appeng.api.features.AEFeature; +import appeng.api.util.AEColor; import appeng.api.util.AEColoredItemDefinition; import appeng.bootstrap.FeatureFactory; import appeng.bootstrap.IItemRendering; import appeng.bootstrap.ItemRenderingCustomizer; +import appeng.core.features.ActivityState; +import appeng.core.features.ColoredItemDefinition; +import appeng.core.features.ItemStackSrc; +import appeng.debug.DebugCardItem; +import appeng.debug.DebugPartPlacerItem; +import appeng.debug.EraserItem; +import appeng.debug.ReplicatorCardItem; +import appeng.entity.GrowingCrystalEntity; +import appeng.fluids.items.BasicFluidStorageCell; import appeng.fluids.items.FluidDummyItem; +import appeng.fluids.items.FluidDummyItemColor; +import appeng.hooks.BlockToolDispenseItemBehavior; +import appeng.hooks.MatterCannonDispenseItemBehavior; +import appeng.items.materials.MaterialType; +import appeng.items.misc.CrystalSeedItem; +import appeng.items.misc.EncodedPatternItem; +import appeng.items.misc.PaintBallItem; +import appeng.items.misc.PaintBallItemRendering; +import appeng.items.parts.FacadeItem; +import appeng.items.storage.BasicStorageCellItem; +import appeng.items.storage.CreativeStorageCellItem; +import appeng.items.storage.ViewCellItem; +import appeng.items.tools.BiometricCardItem; +import appeng.items.tools.MemoryCardItem; +import appeng.items.tools.NetworkToolItem; +import appeng.items.tools.powered.*; import appeng.items.tools.quartz.*; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.entity.EntityDimensions; +import net.minecraft.entity.SpawnGroup; +import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; +import java.util.function.Consumer; + /** * Internal implementation for the API items */ @@ -146,144 +180,144 @@ public final class ApiItems implements IItems { .itemGroup(ItemGroup.TOOLS).props(props -> props.maxCount(1).maxDamage(50)) .addFeatures(AEFeature.QUARTZ_KNIFE).build(); -// Consumer chargedDefaults = props -> props.maxCount(1).maxDamage(32).setNoRepair(); -// -// FeatureFactory powerTools = registry.features(AEFeature.POWERED_TOOLS); -// this.entropyManipulator = powerTools.item("entropy_manipulator", EntropyManipulatorItem::new) -// .props(chargedDefaults).addFeatures(AEFeature.ENTROPY_MANIPULATOR) -// .dispenserBehavior(BlockToolDispenseItemBehavior::new).build(); -// this.wirelessTerminal = powerTools.item("wireless_terminal", WirelessTerminalItem::new).props(chargedDefaults) -// .addFeatures(AEFeature.WIRELESS_ACCESS_TERMINAL).build(); -// this.chargedStaff = powerTools.item("charged_staff", ChargedStaffItem::new).props(chargedDefaults) -// .addFeatures(AEFeature.CHARGED_STAFF).build(); -// this.massCannon = powerTools.item("matter_cannon", MatterCannonItem::new).props(chargedDefaults) -// .addFeatures(AEFeature.MATTER_CANNON).dispenserBehavior(MatterCannonDispenseItemBehavior::new).build(); -// this.portableCell = powerTools.item("portable_cell", PortableCellItem::new).props(chargedDefaults) -// .addFeatures(AEFeature.PORTABLE_CELL, AEFeature.STORAGE_CELLS).build(); -// this.colorApplicator = powerTools.item("color_applicator", ColorApplicatorItem::new).props(chargedDefaults) -// .addFeatures(AEFeature.COLOR_APPLICATOR).dispenserBehavior(BlockToolDispenseItemBehavior::new) -// .rendering(new ColorApplicatorItemRendering()).build(); -// -// this.biometricCard = registry.item("biometric_card", BiometricCardItem::new) -// .props(props -> props.maxCount(1)).features(AEFeature.SECURITY).build(); -// this.memoryCard = registry.item("memory_card", MemoryCardItem::new).props(props -> props.maxCount(1)) -// .features(AEFeature.MEMORY_CARD).build(); -// this.networkTool = registry.item("network_tool", NetworkToolItem::new) -// .props(props -> props.maxCount(1).addToolType(FabricToolTags.get("wrench"), 0)) -// .features(AEFeature.NETWORK_TOOL).build(); -// -// this.cellCreative = registry.item("creative_storage_cell", CreativeStorageCellItem::new) -// .props(props -> props.maxCount(1)).features(AEFeature.STORAGE_CELLS, AEFeature.CREATIVE).build(); -// this.viewCell = registry.item("view_cell", ViewCellItem::new).props(props -> props.maxCount(1)) -// .features(AEFeature.VIEW_CELL).build(); -// -// Consumer storageCellProps = p -> p.maxCount(1); -// -// FeatureFactory storageCells = registry.features(AEFeature.STORAGE_CELLS); -// this.cell1k = storageCells -// .item("1k_storage_cell", -// props -> new BasicStorageCellItem(props, MaterialType.ITEM_1K_CELL_COMPONENT, 1)) -// .props(storageCellProps).build(); -// this.cell4k = storageCells -// .item("4k_storage_cell", -// props -> new BasicStorageCellItem(props, MaterialType.ITEM_4K_CELL_COMPONENT, 4)) -// .props(storageCellProps).build(); -// this.cell16k = storageCells -// .item("16k_storage_cell", -// props -> new BasicStorageCellItem(props, MaterialType.ITEM_16K_CELL_COMPONENT, 16)) -// .props(storageCellProps).build(); -// this.cell64k = storageCells -// .item("64k_storage_cell", -// props -> new BasicStorageCellItem(props, MaterialType.ITEM_64K_CELL_COMPONENT, 64)) -// .props(storageCellProps).build(); -// -// this.fluidCell1k = storageCells -// .item("1k_fluid_storage_cell", -// props -> new BasicFluidStorageCell(props, MaterialType.FLUID_1K_CELL_COMPONENT, 1)) -// .props(storageCellProps).build(); -// this.fluidCell4k = storageCells -// .item("4k_fluid_storage_cell", -// props -> new BasicFluidStorageCell(props, MaterialType.FLUID_4K_CELL_COMPONENT, 4)) -// .props(storageCellProps).build(); -// this.fluidCell16k = storageCells -// .item("16k_fluid_storage_cell", -// props -> new BasicFluidStorageCell(props, MaterialType.FLUID_16K_CELL_COMPONENT, 16)) -// .props(storageCellProps).build(); -// this.fluidCell64k = storageCells -// .item("64k_fluid_storage_cell", -// props -> new BasicFluidStorageCell(props, MaterialType.FLUID_64K_CELL_COMPONENT, 64)) -// .props(storageCellProps).build(); -// -// FeatureFactory spatialCells = registry.features(AEFeature.SPATIAL_IO); -// this.spatialCell2 = spatialCells -// .item("2_cubed_spatial_storage_cell", props -> new SpatialStorageCellItem(props, 2)) -// .props(storageCellProps).build(); -// this.spatialCell16 = spatialCells -// .item("16_cubed_spatial_storage_cell", props -> new SpatialStorageCellItem(props, 16)) -// .props(storageCellProps).build(); -// this.spatialCell128 = spatialCells -// .item("128_cubed_spatial_storage_cell", props -> new SpatialStorageCellItem(props, 128)) -// .props(storageCellProps).build(); -// -// this.facade = registry.item("facade", FacadeItem::new).features(AEFeature.FACADES).build(); -// -// this.certusCrystalSeed = registry -// .item("certus_crystal_seed", -// props -> new CrystalSeedItem(props, materials.purifiedCertusQuartzCrystal().item())) -// .features(AEFeature.CRYSTAL_SEEDS).build(); -// this.fluixCrystalSeed = registry -// .item("fluix_crystal_seed", -// props -> new CrystalSeedItem(props, materials.purifiedFluixCrystal().item())) -// .features(AEFeature.CRYSTAL_SEEDS).build(); -// this.netherQuartzSeed = registry -// .item("nether_quartz_seed", -// props -> new CrystalSeedItem(props, materials.purifiedNetherQuartzCrystal().item())) -// .features(AEFeature.CRYSTAL_SEEDS).build(); -// -// GrowingCrystalEntity.TYPE = registry -// .entity("growing_crystal", GrowingCrystalEntity::new, SpawnGroup.MISC) -// .customize(builder -> builder.size(0.25F, 0.25F)).build(); -// -// // rv1 -// this.encodedPattern = registry.item("encoded_pattern", EncodedPatternItem::new) -// .props(props -> props.maxCount(1)).features(AEFeature.PATTERNS).build(); -// -// this.coloredPaintBall = createPaintBalls(registry, "_paint_ball", false); -// this.coloredLumenPaintBall = createPaintBalls(registry, "_lumen_paint_ball", true); -// -// FeatureFactory debugTools = registry.features(AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE); -// this.toolEraser = debugTools.item("debug_eraser", EraserItem::new).build(); -// this.toolMeteoritePlacer = debugTools.item("debug_meteorite_placer", MeteoritePlacerItem::new).build(); -// this.toolDebugCard = debugTools.item("debug_card", DebugCardItem::new).build(); -// this.toolReplicatorCard = debugTools.item("debug_replicator_card", ReplicatorCardItem::new).build(); -// debugTools.item("debug_part_placer", DebugPartPlacerItem::new).build(); -// -// this.dummyFluidItem = registry.item("dummy_fluid_item", FluidDummyItem::new) -// .rendering(new ItemRenderingCustomizer() { -// @Override -// @Environment(Dist.CLIENT) -// public void customize(IItemRendering rendering) { -// rendering.color(new FluidDummyItemColor()); -// } -// }) -// .build(); + Consumer chargedDefaults = props -> props.maxCount(1).maxDamage(32); + + FeatureFactory powerTools = registry.features(AEFeature.POWERED_TOOLS); + this.entropyManipulator = powerTools.item("entropy_manipulator", EntropyManipulatorItem::new) + .props(chargedDefaults).addFeatures(AEFeature.ENTROPY_MANIPULATOR) + .dispenserBehavior(BlockToolDispenseItemBehavior::new).build(); + this.wirelessTerminal = powerTools.item("wireless_terminal", WirelessTerminalItem::new).props(chargedDefaults) + .addFeatures(AEFeature.WIRELESS_ACCESS_TERMINAL).build(); + this.chargedStaff = powerTools.item("charged_staff", ChargedStaffItem::new).props(chargedDefaults) + .addFeatures(AEFeature.CHARGED_STAFF).build(); + this.massCannon = powerTools.item("matter_cannon", MatterCannonItem::new).props(chargedDefaults) + .addFeatures(AEFeature.MATTER_CANNON).dispenserBehavior(MatterCannonDispenseItemBehavior::new).build(); + this.portableCell = powerTools.item("portable_cell", PortableCellItem::new).props(chargedDefaults) + .addFeatures(AEFeature.PORTABLE_CELL, AEFeature.STORAGE_CELLS).build(); + this.colorApplicator = powerTools.item("color_applicator", ColorApplicatorItem::new).props(chargedDefaults) + .addFeatures(AEFeature.COLOR_APPLICATOR).dispenserBehavior(BlockToolDispenseItemBehavior::new) + .rendering(new ColorApplicatorItemRendering()).build(); + + this.biometricCard = registry.item("biometric_card", BiometricCardItem::new) + .props(props -> props.maxCount(1)).features(AEFeature.SECURITY).build(); + this.memoryCard = registry.item("memory_card", MemoryCardItem::new).props(props -> props.maxCount(1)) + .features(AEFeature.MEMORY_CARD).build(); + this.networkTool = registry.item("network_tool", NetworkToolItem::new) + .props(props -> props.maxCount(1)) // FIXME FABRIC .addToolType(FabricToolTags.get("wrench"), 0) (how???, just add a tag???) + .features(AEFeature.NETWORK_TOOL).build(); + + this.cellCreative = registry.item("creative_storage_cell", CreativeStorageCellItem::new) + .props(props -> props.maxCount(1)).features(AEFeature.STORAGE_CELLS, AEFeature.CREATIVE).build(); + this.viewCell = registry.item("view_cell", ViewCellItem::new).props(props -> props.maxCount(1)) + .features(AEFeature.VIEW_CELL).build(); + + Consumer storageCellProps = p -> p.maxCount(1); + + FeatureFactory storageCells = registry.features(AEFeature.STORAGE_CELLS); + this.cell1k = storageCells + .item("1k_storage_cell", + props -> new BasicStorageCellItem(props, MaterialType.ITEM_1K_CELL_COMPONENT, 1)) + .props(storageCellProps).build(); + this.cell4k = storageCells + .item("4k_storage_cell", + props -> new BasicStorageCellItem(props, MaterialType.ITEM_4K_CELL_COMPONENT, 4)) + .props(storageCellProps).build(); + this.cell16k = storageCells + .item("16k_storage_cell", + props -> new BasicStorageCellItem(props, MaterialType.ITEM_16K_CELL_COMPONENT, 16)) + .props(storageCellProps).build(); + this.cell64k = storageCells + .item("64k_storage_cell", + props -> new BasicStorageCellItem(props, MaterialType.ITEM_64K_CELL_COMPONENT, 64)) + .props(storageCellProps).build(); + + this.fluidCell1k = storageCells + .item("1k_fluid_storage_cell", + props -> new BasicFluidStorageCell(props, MaterialType.FLUID_1K_CELL_COMPONENT, 1)) + .props(storageCellProps).build(); + this.fluidCell4k = storageCells + .item("4k_fluid_storage_cell", + props -> new BasicFluidStorageCell(props, MaterialType.FLUID_4K_CELL_COMPONENT, 4)) + .props(storageCellProps).build(); + this.fluidCell16k = storageCells + .item("16k_fluid_storage_cell", + props -> new BasicFluidStorageCell(props, MaterialType.FLUID_16K_CELL_COMPONENT, 16)) + .props(storageCellProps).build(); + this.fluidCell64k = storageCells + .item("64k_fluid_storage_cell", + props -> new BasicFluidStorageCell(props, MaterialType.FLUID_64K_CELL_COMPONENT, 64)) + .props(storageCellProps).build(); + + FeatureFactory spatialCells = registry.features(AEFeature.SPATIAL_IO); +// FIXME FABRIC this.spatialCell2 = spatialCells +// FIXME FABRIC .item("2_cubed_spatial_storage_cell", props -> new SpatialStorageCellItem(props, 2)) +// FIXME FABRIC .props(storageCellProps).build(); +// FIXME FABRIC this.spatialCell16 = spatialCells +// FIXME FABRIC .item("16_cubed_spatial_storage_cell", props -> new SpatialStorageCellItem(props, 16)) +// FIXME FABRIC .props(storageCellProps).build(); +// FIXME FABRIC this.spatialCell128 = spatialCells +// FIXME FABRIC .item("128_cubed_spatial_storage_cell", props -> new SpatialStorageCellItem(props, 128)) +// FIXME FABRIC .props(storageCellProps).build(); + + this.facade = registry.item("facade", FacadeItem::new).features(AEFeature.FACADES).build(); + + this.certusCrystalSeed = registry + .item("certus_crystal_seed", + props -> new CrystalSeedItem(props, materials.purifiedCertusQuartzCrystal().item())) + .features(AEFeature.CRYSTAL_SEEDS).build(); + this.fluixCrystalSeed = registry + .item("fluix_crystal_seed", + props -> new CrystalSeedItem(props, materials.purifiedFluixCrystal().item())) + .features(AEFeature.CRYSTAL_SEEDS).build(); + this.netherQuartzSeed = registry + .item("nether_quartz_seed", + props -> new CrystalSeedItem(props, materials.purifiedNetherQuartzCrystal().item())) + .features(AEFeature.CRYSTAL_SEEDS).build(); + + GrowingCrystalEntity.TYPE = registry + .entity("growing_crystal", GrowingCrystalEntity::new, SpawnGroup.MISC) + .customize(builder -> builder.dimensions(EntityDimensions.fixed(0.25F, 0.25F))).build(); + + // rv1 + this.encodedPattern = registry.item("encoded_pattern", EncodedPatternItem::new) + .props(props -> props.maxCount(1)).features(AEFeature.PATTERNS).build(); + + this.coloredPaintBall = createPaintBalls(registry, "_paint_ball", false); + this.coloredLumenPaintBall = createPaintBalls(registry, "_lumen_paint_ball", true); + + FeatureFactory debugTools = registry.features(AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE); + this.toolEraser = debugTools.item("debug_eraser", EraserItem::new).build(); +// FIXME FABRIC this.toolMeteoritePlacer = debugTools.item("debug_meteorite_placer", MeteoritePlacerItem::new).build(); + this.toolDebugCard = debugTools.item("debug_card", DebugCardItem::new).build(); + this.toolReplicatorCard = debugTools.item("debug_replicator_card", ReplicatorCardItem::new).build(); + debugTools.item("debug_part_placer", DebugPartPlacerItem::new).build(); + + this.dummyFluidItem = registry.item("dummy_fluid_item", FluidDummyItem::new) + .rendering(new ItemRenderingCustomizer() { + @Override + @Environment(EnvType.CLIENT) + public void customize(IItemRendering rendering) { + rendering.color(new FluidDummyItemColor()); + } + }) + .build(); + } + + private static AEColoredItemDefinition createPaintBalls(FeatureFactory registry, String idSuffix, boolean lumen) { + ColoredItemDefinition colors = new ColoredItemDefinition(); + for (AEColor color : AEColor.values()) { + if (color == AEColor.TRANSPARENT) { + continue; // Fluix paintballs don't exist + } + + String id = color.registryPrefix + idSuffix; + IItemDefinition paintBall = registry.item(id, props -> new PaintBallItem(props, color, lumen)) + .features(AEFeature.PAINT_BALLS).rendering(new PaintBallItemRendering(color, lumen)).build(); + colors.add(color, new ItemStackSrc(paintBall.item(), ActivityState.Enabled)); + } + return colors; } -// private static AEColoredItemDefinition createPaintBalls(FeatureFactory registry, String idSuffix, boolean lumen) { -// ColoredItemDefinition colors = new ColoredItemDefinition(); -// for (AEColor color : AEColor.values()) { -// if (color == AEColor.TRANSPARENT) { -// continue; // Fluix paintballs don't exist -// } -// -// String id = color.registryPrefix + idSuffix; -// IItemDefinition paintBall = registry.item(id, props -> new PaintBallItem(props, color, lumen)) -// .features(AEFeature.PAINT_BALLS).rendering(new PaintBallItemRendering(color, lumen)).build(); -// colors.add(color, new ItemStackSrc(paintBall.item(), ActivityState.Enabled)); -// } -// return colors; -// } -// @Override public IItemDefinition certusQuartzAxe() { return this.certusQuartzAxe; diff --git a/src/main/java/appeng/core/api/definitions/ApiParts.java b/src/main/java/appeng/core/api/definitions/ApiParts.java index 3372b24fd..bfb7f26ba 100644 --- a/src/main/java/appeng/core/api/definitions/ApiParts.java +++ b/src/main/java/appeng/core/api/definitions/ApiParts.java @@ -20,6 +20,8 @@ package appeng.core.api.definitions; import java.util.function.Function; +import appeng.fluids.parts.*; +import appeng.parts.automation.*; import net.minecraft.item.ItemStack; import appeng.api.definitions.IItemDefinition; @@ -109,57 +111,45 @@ public final class ApiParts implements IParts { this.monitor = createPart("monitor", PanelPart.class, PanelPart::new); this.semiDarkMonitor = createPart("semi_dark_monitor", SemiDarkPanelPart.class, SemiDarkPanelPart::new); this.darkMonitor = createPart("dark_monitor", DarkPanelPart.class, DarkPanelPart::new); -// FIXME FABRIC this.storageBus = createPart("storage_bus", StorageBusPart.class, StorageBusPart::new); -// FIXME FABRIC this.fluidStorageBus = createPart("fluid_storage_bus", FluidStorageBusPart.class, FluidStorageBusPart::new); -// FIXME FABRIC this.importBus = createPart("import_bus", ImportBusPart.class, ImportBusPart::new); -// FIXME FABRIC this.fluidImportBus = createPart("fluid_import_bus", FluidImportBusPart.class, FluidImportBusPart::new); -// FIXME FABRIC this.exportBus = createPart("export_bus", ExportBusPart.class, ExportBusPart::new); -// FIXME FABRIC this.fluidExportBus = createPart("fluid_export_bus", FluidExportBusPart.class, FluidExportBusPart::new); -// FIXME FABRIC this.levelEmitter = createPart("level_emitter", LevelEmitterPart.class, LevelEmitterPart::new); -// FIXME FABRIC this.fluidLevelEmitter = createPart("fluid_level_emitter", FluidLevelEmitterPart.class, -// FIXME FABRIC FluidLevelEmitterPart::new); -// FIXME FABRIC this.annihilationPlane = createPart("annihilation_plane", AnnihilationPlanePart.class, -// FIXME FABRIC AnnihilationPlanePart::new); -// FIXME FABRIC this.identityAnnihilationPlane = createPart("identity_annihilation_plane", IdentityAnnihilationPlanePart.class, -// FIXME FABRIC IdentityAnnihilationPlanePart::new); -// FIXME FABRIC this.fluidAnnihilationPlane = createPart("fluid_annihilation_plane", FluidAnnihilationPlanePart.class, -// FIXME FABRIC FluidAnnihilationPlanePart::new); -// FIXME FABRIC this.formationPlane = createPart("formation_plane", FormationPlanePart.class, FormationPlanePart::new); -// FIXME FABRIC this.fluidFormationPlane = createPart("fluid_formation_plane", FluidFormationPlanePart.class, -// FIXME FABRIC FluidFormationPlanePart::new); -// FIXME FABRIC this.patternTerminal = createPart("pattern_terminal", PatternTerminalPart.class, PatternTerminalPart::new); -// FIXME FABRIC this.craftingTerminal = createPart("crafting_terminal", CraftingTerminalPart.class, CraftingTerminalPart::new); -// FIXME FABRIC this.terminal = createPart("terminal", TerminalPart.class, TerminalPart::new); -// FIXME FABRIC this.storageMonitor = createPart("storage_monitor", StorageMonitorPart.class, StorageMonitorPart::new); -// FIXME FABRIC this.conversionMonitor = createPart("conversion_monitor", ConversionMonitorPart.class, -// FIXME FABRIC ConversionMonitorPart::new); -// FIXME FABRIC this.iface = createPart("cable_interface", InterfacePart.class, InterfacePart::new); -// FIXME FABRIC this.fluidIface = createPart("cable_fluid_interface", FluidInterfacePart.class, FluidInterfacePart::new); -// FIXME FABRIC this.p2PTunnelME = createPart("me_p2p_tunnel", MEP2PTunnelPart.class, MEP2PTunnelPart::new); -// FIXME FABRIC this.p2PTunnelRedstone = createPart("redstone_p2p_tunnel", RedstoneP2PTunnelPart.class, -// FIXME FABRIC RedstoneP2PTunnelPart::new); -// FIXME FABRIC this.p2PTunnelItems = createPart("item_p2p_tunnel", ItemP2PTunnelPart.class, ItemP2PTunnelPart::new); -// FIXME FABRIC this.p2PTunnelFluids = createPart("fluid_p2p_tunnel", FluidP2PTunnelPart.class, FluidP2PTunnelPart::new); -// FIXME FABRIC this.p2PTunnelEU = null; // FIXME createPart( "ic2_p2p_tunnel", PartType.P2P_TUNNEL_IC2, -// FIXME FABRIC // PartP2PIC2Power.class, PartP2PIC2Power::new); -// FIXME FABRIC this.p2PTunnelFE = createPart("fe_p2p_tunnel", FEP2PTunnelPart.class, FEP2PTunnelPart::new); -// FIXME FABRIC this.p2PTunnelLight = createPart("light_p2p_tunnel", LightP2PTunnelPart.class, LightP2PTunnelPart::new); -// FIXME FABRIC this.interfaceTerminal = createPart("interface_terminal", InterfaceTerminalPart.class, -// FIXME FABRIC InterfaceTerminalPart::new); -// FIXME FABRIC this.fluidTerminal = createPart("fluid_terminal", FluidTerminalPart.class, FluidTerminalPart::new); + this.storageBus = createPart("storage_bus", StorageBusPart.class, StorageBusPart::new); + this.fluidStorageBus = createPart("fluid_storage_bus", FluidStorageBusPart.class, FluidStorageBusPart::new); + this.importBus = createPart("import_bus", ImportBusPart.class, ImportBusPart::new); + this.fluidImportBus = createPart("fluid_import_bus", FluidImportBusPart.class, FluidImportBusPart::new); + this.exportBus = createPart("export_bus", ExportBusPart.class, ExportBusPart::new); + this.fluidExportBus = createPart("fluid_export_bus", FluidExportBusPart.class, FluidExportBusPart::new); + this.levelEmitter = createPart("level_emitter", LevelEmitterPart.class, LevelEmitterPart::new); + this.fluidLevelEmitter = createPart("fluid_level_emitter", FluidLevelEmitterPart.class, + FluidLevelEmitterPart::new); + this.annihilationPlane = createPart("annihilation_plane", AnnihilationPlanePart.class, + AnnihilationPlanePart::new); + this.identityAnnihilationPlane = createPart("identity_annihilation_plane", IdentityAnnihilationPlanePart.class, + IdentityAnnihilationPlanePart::new); + this.fluidAnnihilationPlane = createPart("fluid_annihilation_plane", FluidAnnihilationPlanePart.class, + FluidAnnihilationPlanePart::new); + this.formationPlane = createPart("formation_plane", FormationPlanePart.class, FormationPlanePart::new); + this.fluidFormationPlane = createPart("fluid_formation_plane", FluidFormationPlanePart.class, + FluidFormationPlanePart::new); + this.patternTerminal = createPart("pattern_terminal", PatternTerminalPart.class, PatternTerminalPart::new); + this.craftingTerminal = createPart("crafting_terminal", CraftingTerminalPart.class, CraftingTerminalPart::new); + this.terminal = createPart("terminal", TerminalPart.class, TerminalPart::new); + this.storageMonitor = createPart("storage_monitor", StorageMonitorPart.class, StorageMonitorPart::new); + this.conversionMonitor = createPart("conversion_monitor", ConversionMonitorPart.class, + ConversionMonitorPart::new); + this.iface = createPart("cable_interface", InterfacePart.class, InterfacePart::new); + this.fluidIface = createPart("cable_fluid_interface", FluidInterfacePart.class, FluidInterfacePart::new); +// FIXME FABRIC this.p2PTunnelME = createPart("me_p2p_tunnel", MEP2PTunnelPart.class, MEP2PTunnelPart::new); +// FIXME FABRIC this.p2PTunnelRedstone = createPart("redstone_p2p_tunnel", RedstoneP2PTunnelPart.class, +// FIXME FABRIC RedstoneP2PTunnelPart::new); +// FIXME FABRIC this.p2PTunnelItems = createPart("item_p2p_tunnel", ItemP2PTunnelPart.class, ItemP2PTunnelPart::new); +// FIXME FABRIC this.p2PTunnelFluids = createPart("fluid_p2p_tunnel", FluidP2PTunnelPart.class, FluidP2PTunnelPart::new); +// FIXME FABRIC this.p2PTunnelEU = null; // FIXME createPart( "ic2_p2p_tunnel", PartType.P2P_TUNNEL_IC2, +// FIXME FABRIC // PartP2PIC2Power.class, PartP2PIC2Power::new); +// FIXME FABRIC this.p2PTunnelFE = createPart("fe_p2p_tunnel", FEP2PTunnelPart.class, FEP2PTunnelPart::new); +// FIXME FABRIC this.p2PTunnelLight = createPart("light_p2p_tunnel", LightP2PTunnelPart.class, LightP2PTunnelPart::new); + this.interfaceTerminal = createPart("interface_terminal", InterfaceTerminalPart.class, + InterfaceTerminalPart::new); + this.fluidTerminal = createPart("fluid_terminal", FluidTerminalPart.class, FluidTerminalPart::new); - this.storageBus = null; - this.importBus = null; - this.exportBus = null; - this.iface = null; - this.fluidIface = null; - this.levelEmitter = null; - this.fluidLevelEmitter = null; - this.annihilationPlane = null; - this.identityAnnihilationPlane = null; - this.fluidAnnihilationPlane = null; - this.formationPlane = null; - this.fluidFormationPlane = null; this.p2PTunnelME = null; this.p2PTunnelRedstone = null; this.p2PTunnelItems = null; @@ -167,16 +157,6 @@ public final class ApiParts implements IParts { this.p2PTunnelEU = null; this.p2PTunnelFE = null; this.p2PTunnelLight = null; - this.interfaceTerminal = null; - this.patternTerminal = null; - this.craftingTerminal = null; - this.terminal = null; - this.storageMonitor = null; - this.conversionMonitor = null; - this.fluidImportBus = null; - this.fluidExportBus = null; - this.fluidTerminal = null; - this.fluidStorageBus = null; this.registry = null; this.partModels = null; diff --git a/src/main/java/appeng/core/features/registries/MovableTileRegistry.java b/src/main/java/appeng/core/features/registries/MovableTileRegistry.java index 2ae967103..189159af5 100644 --- a/src/main/java/appeng/core/features/registries/MovableTileRegistry.java +++ b/src/main/java/appeng/core/features/registries/MovableTileRegistry.java @@ -49,7 +49,7 @@ public class MovableTileRegistry implements IMovableRegistry { } @Override - public void whiteListTileEntity(final Class c) { + public void whiteListBlockEntity(final Class c) { if (c.getName().equals(BlockEntity.class.getName())) { throw new IllegalArgumentException(new AppEngException("Someone tried to make all tiles movable with " + c + ", this is a clear violation of the purpose of the white list.")); diff --git a/src/main/java/appeng/core/localization/ButtonToolTips.java b/src/main/java/appeng/core/localization/ButtonToolTips.java index 5eb4cca2a..181d654ec 100644 --- a/src/main/java/appeng/core/localization/ButtonToolTips.java +++ b/src/main/java/appeng/core/localization/ButtonToolTips.java @@ -18,6 +18,7 @@ package appeng.core.localization; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; @@ -70,23 +71,18 @@ public enum ButtonToolTips { FilterMode, FilterModeKeep, FilterModeClear; - private final String root; + private final TranslatableText text; ButtonToolTips() { - this.root = "gui.tooltips.appliedenergistics2"; + this.text = new TranslatableText("gui.tooltips.appliedenergistics2." + this.name()); } - ButtonToolTips(final String r) { - this.root = r; + public Text text() { + return text; } - @Deprecated - public String getLocal() { - return getTranslationKey().getString(); - } - - public Text getTranslationKey() { - return new TranslatableText(this.root + '.' + this.toString()); + public MutableText text(Object... args) { + return new TranslatableText(text.getKey(), args); } } diff --git a/src/main/java/appeng/core/sync/BasePacketHandler.java b/src/main/java/appeng/core/sync/BasePacketHandler.java index 3707d351c..07b48e823 100644 --- a/src/main/java/appeng/core/sync/BasePacketHandler.java +++ b/src/main/java/appeng/core/sync/BasePacketHandler.java @@ -22,6 +22,8 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Function; +import appeng.core.sync.packets.*; +import appeng.core.sync.packets.CompassResponsePacket; import appeng.core.sync.packets.PartPlacementPacket; import appeng.core.sync.packets.SpawnEntityPacket; import net.minecraft.network.PacketByteBuf; @@ -30,58 +32,58 @@ public class BasePacketHandler { private static final Map, PacketTypes> REVERSE_LOOKUP = new HashMap<>(); public enum PacketTypes { -// PACKET_COMPASS_REQUEST(CompassRequestPacket.class, CompassRequestPacket::new), -// -// PACKET_COMPASS_RESPONSE(CompassResponsePacket.class, CompassResponsePacket::new), -// -// PACKET_INVENTORY_ACTION(InventoryActionPacket.class, InventoryActionPacket::new), -// -// PACKET_ME_INVENTORY_UPDATE(MEInventoryUpdatePacket.class, MEInventoryUpdatePacket::new), -// -// PACKET_ME_FLUID_INVENTORY_UPDATE(MEFluidInventoryUpdatePacket.class, MEFluidInventoryUpdatePacket::new), -// -// PACKET_CONFIG_BUTTON(ConfigButtonPacket.class, ConfigButtonPacket::new), + PACKET_COMPASS_REQUEST(CompassRequestPacket.class, CompassRequestPacket::new), + + PACKET_COMPASS_RESPONSE(CompassResponsePacket.class, CompassResponsePacket::new), + + PACKET_INVENTORY_ACTION(InventoryActionPacket.class, InventoryActionPacket::new), + + PACKET_ME_INVENTORY_UPDATE(MEInventoryUpdatePacket.class, MEInventoryUpdatePacket::new), + + PACKET_ME_FLUID_INVENTORY_UPDATE(MEFluidInventoryUpdatePacket.class, MEFluidInventoryUpdatePacket::new), + + PACKET_CONFIG_BUTTON(ConfigButtonPacket.class, ConfigButtonPacket::new), PACKET_PART_PLACEMENT(PartPlacementPacket.class, PartPlacementPacket::new), -// PACKET_LIGHTNING(LightningPacket.class, LightningPacket::new), -// -// PACKET_MATTER_CANNON(MatterCannonPacket.class, MatterCannonPacket::new), -// -// PACKET_VALUE_CONFIG(ConfigValuePacket.class, ConfigValuePacket::new), -// -// PACKET_ITEM_TRANSITION_EFFECT(ItemTransitionEffectPacket.class, ItemTransitionEffectPacket::new), -// -// PACKET_BLOCK_TRANSITION_EFFECT(BlockTransitionEffectPacket.class, BlockTransitionEffectPacket::new), -// -// PACKET_PROGRESS_VALUE(ProgressBarPacket.class, ProgressBarPacket::new), -// -// PACKET_CLICK(ClickPacket.class, ClickPacket::new), -// -// PACKET_SWITCH_GUIS(SwitchGuisPacket.class, SwitchGuisPacket::new), -// -// PACKET_SWAP_SLOTS(SwapSlotsPacket.class, SwapSlotsPacket::new), -// -// PACKET_PATTERN_SLOT(PatternSlotPacket.class, PatternSlotPacket::new), -// -// PACKET_RECIPE_JEI(JEIRecipePacket.class, JEIRecipePacket::new), -// -// PACKET_TARGET_ITEM(TargetItemStackPacket.class, TargetItemStackPacket::new), -// -// PACKET_TARGET_FLUID(TargetFluidStackPacket.class, TargetFluidStackPacket::new), -// -// PACKET_CRAFTING_REQUEST(CraftRequestPacket.class, CraftRequestPacket::new), -// -// PACKET_ASSEMBLER_ANIMATION(AssemblerAnimationPacket.class, AssemblerAnimationPacket::new), -// -// PACKET_COMPRESSED_NBT(CompressedNBTPacket.class, CompressedNBTPacket::new), -// -// PACKET_PAINTED_ENTITY(PaintedEntityPacket.class, PaintedEntityPacket::new), -// -// PACKET_FLUID_TANK(FluidSlotPacket.class, FluidSlotPacket::new); + PACKET_LIGHTNING(LightningPacket.class, LightningPacket::new), + + PACKET_MATTER_CANNON(MatterCannonPacket.class, MatterCannonPacket::new), + + PACKET_VALUE_CONFIG(ConfigValuePacket.class, ConfigValuePacket::new), + + PACKET_ITEM_TRANSITION_EFFECT(ItemTransitionEffectPacket.class, ItemTransitionEffectPacket::new), + + PACKET_BLOCK_TRANSITION_EFFECT(BlockTransitionEffectPacket.class, BlockTransitionEffectPacket::new), + + PACKET_PROGRESS_VALUE(ProgressBarPacket.class, ProgressBarPacket::new), + + PACKET_CLICK(ClickPacket.class, ClickPacket::new), + + PACKET_SWITCH_GUIS(SwitchGuisPacket.class, SwitchGuisPacket::new), + + PACKET_SWAP_SLOTS(SwapSlotsPacket.class, SwapSlotsPacket::new), + + PACKET_PATTERN_SLOT(PatternSlotPacket.class, PatternSlotPacket::new), + + PACKET_RECIPE_JEI(JEIRecipePacket.class, JEIRecipePacket::new), + + PACKET_TARGET_ITEM(TargetItemStackPacket.class, TargetItemStackPacket::new), + + PACKET_TARGET_FLUID(TargetFluidStackPacket.class, TargetFluidStackPacket::new), + + PACKET_CRAFTING_REQUEST(CraftRequestPacket.class, CraftRequestPacket::new), + + PACKET_ASSEMBLER_ANIMATION(AssemblerAnimationPacket.class, AssemblerAnimationPacket::new), + + PACKET_COMPRESSED_NBT(CompressedNBTPacket.class, CompressedNBTPacket::new), + + PACKET_PAINTED_ENTITY(PaintedEntityPacket.class, PaintedEntityPacket::new), + + PACKET_FLUID_TANK(FluidSlotPacket.class, FluidSlotPacket::new), SPAWN_ENTITY(SpawnEntityPacket.class, SpawnEntityPacket::new); -; + private final Function factory; PacketTypes(Class packetClass, Function factory) { diff --git a/src/unported/java/appeng/core/sync/packets/AssemblerAnimationPacket.java b/src/main/java/appeng/core/sync/packets/AssemblerAnimationPacket.java similarity index 100% rename from src/unported/java/appeng/core/sync/packets/AssemblerAnimationPacket.java rename to src/main/java/appeng/core/sync/packets/AssemblerAnimationPacket.java diff --git a/src/unported/java/appeng/core/sync/packets/BlockTransitionEffectPacket.java b/src/main/java/appeng/core/sync/packets/BlockTransitionEffectPacket.java similarity index 85% rename from src/unported/java/appeng/core/sync/packets/BlockTransitionEffectPacket.java rename to src/main/java/appeng/core/sync/packets/BlockTransitionEffectPacket.java index d55f19767..23068ee70 100644 --- a/src/unported/java/appeng/core/sync/packets/BlockTransitionEffectPacket.java +++ b/src/main/java/appeng/core/sync/packets/BlockTransitionEffectPacket.java @@ -18,25 +18,6 @@ package appeng.core.sync.packets; -import io.netty.buffer.Unpooled; - -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.client.MinecraftClient; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.client.audio.SimpleSound; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.fluid.Fluid; -import net.minecraft.sound.SoundEvents; -import net.minecraft.tag.FluidTags; -import net.minecraft.sound.SoundCategory; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.fabricmc.api.EnvType; -import net.minecraftforge.registries.GameData; - import appeng.api.util.AEPartLocation; import appeng.client.render.effects.EnergyParticleData; import appeng.core.AELog; @@ -44,6 +25,23 @@ import appeng.core.AppEng; import appeng.core.sync.BasePacket; import appeng.core.sync.network.INetworkInfo; import appeng.util.Platform; +import io.netty.buffer.Unpooled; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.sound.PositionedSoundInstance; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluid; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; +import net.minecraft.sound.SoundEvents; +import net.minecraft.tag.FluidTags; +import net.minecraft.util.math.BlockPos; /** * Plays the block breaking or fluid pickup sound and a transition particle @@ -71,7 +69,7 @@ public class BlockTransitionEffectPacket extends BasePacket { data.writeInt(this.getPacketID()); data.writeBlockPos(pos); - int blockStateId = GameData.getBlockStateIDMap().get(blockState); + int blockStateId = Block.getRawIdFromState(blockState); if (blockStateId == -1) { AELog.warn("Failed to find numeric id for block state %s", blockState); } @@ -85,7 +83,7 @@ public class BlockTransitionEffectPacket extends BasePacket { this.pos = stream.readBlockPos(); int blockStateId = stream.readInt(); - BlockState blockState = GameData.getBlockStateIDMap().getByValue(blockStateId); + BlockState blockState = Block.getStateFromRawId(blockStateId); if (blockState == null) { AELog.warn("Received invalid blockstate id %d from server", blockStateId); blockState = Blocks.AIR.getDefaultState(); @@ -128,14 +126,11 @@ public class BlockTransitionEffectPacket extends BasePacket { float pitch; if (soundMode == SoundMode.FLUID) { // This code is based on what BucketItem does - Fluid fluid = blockState.getFluidState().getFluid(); - soundEvent = fluid.getAttributes().getFillSound(); - if (soundEvent == null) { - if (fluid.isIn(FluidTags.LAVA)) { - soundEvent = SoundEvents.ITEM_BUCKET_FILL_LAVA; - } else { - soundEvent = SoundEvents.ITEM_BUCKET_FILL; - } + Fluid rawFluid = blockState.getFluidState().getFluid(); + if (rawFluid.isIn(FluidTags.LAVA)) { + soundEvent = SoundEvents.ITEM_BUCKET_FILL_LAVA; + } else { + soundEvent = SoundEvents.ITEM_BUCKET_FILL; } volume = 1; pitch = 1; @@ -148,9 +143,9 @@ public class BlockTransitionEffectPacket extends BasePacket { return; } - SimpleSound sound = new SimpleSound(soundEvent, SoundCategory.BLOCKS, (volume + 1.0F) / 2.0F, pitch * 0.8F, + PositionedSoundInstance sound = new PositionedSoundInstance(soundEvent, SoundCategory.BLOCKS, (volume + 1.0F) / 2.0F, pitch * 0.8F, pos); - MinecraftClient.getInstance().getSoundHandler().play(sound); + MinecraftClient.getInstance().getSoundManager().play(sound); } } diff --git a/src/unported/java/appeng/core/sync/packets/ClickPacket.java b/src/main/java/appeng/core/sync/packets/ClickPacket.java similarity index 100% rename from src/unported/java/appeng/core/sync/packets/ClickPacket.java rename to src/main/java/appeng/core/sync/packets/ClickPacket.java diff --git a/src/unported/java/appeng/core/sync/packets/CompressedNBTPacket.java b/src/main/java/appeng/core/sync/packets/CompressedNBTPacket.java similarity index 89% rename from src/unported/java/appeng/core/sync/packets/CompressedNBTPacket.java rename to src/main/java/appeng/core/sync/packets/CompressedNBTPacket.java index df9bb165e..863e09238 100644 --- a/src/unported/java/appeng/core/sync/packets/CompressedNBTPacket.java +++ b/src/main/java/appeng/core/sync/packets/CompressedNBTPacket.java @@ -32,12 +32,11 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NbtIo; import net.minecraft.network.PacketByteBuf; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import appeng.client.gui.implementations.InterfaceTerminalScreen; import appeng.core.sync.BasePacket; import appeng.core.sync.network.INetworkInfo; @@ -65,7 +64,7 @@ public class CompressedNBTPacket extends BasePacket { return stream.readByte() & 0xff; } }))) { - this.in = CompressedStreamTools.read(inStream); + this.in = NbtIo.read(inStream); } catch (IOException e) { throw new RuntimeException("Failed to decompress packet.", e); } @@ -87,7 +86,7 @@ public class CompressedNBTPacket extends BasePacket { } }); - CompressedStreamTools.write(din, new DataOutputStream(this.compressFrame)); + NbtIo.write(din, new DataOutputStream(this.compressFrame)); this.compressFrame.close(); this.configureWrite(this.data); @@ -98,8 +97,9 @@ public class CompressedNBTPacket extends BasePacket { public void clientPacketData(final INetworkInfo network, final PlayerEntity player) { final Screen gs = MinecraftClient.getInstance().currentScreen; - if (gs instanceof InterfaceTerminalScreen) { - ((InterfaceTerminalScreen) gs).postUpdate(this.in); - } + throw new IllegalStateException(); + // FIXME FABRIC if (gs instanceof InterfaceTerminalScreen) { + // FIXME FABRIC ((InterfaceTerminalScreen) gs).postUpdate(this.in); + // FIXME FABRIC } } } diff --git a/src/unported/java/appeng/core/sync/packets/ConfigButtonPacket.java b/src/main/java/appeng/core/sync/packets/ConfigButtonPacket.java similarity index 96% rename from src/unported/java/appeng/core/sync/packets/ConfigButtonPacket.java rename to src/main/java/appeng/core/sync/packets/ConfigButtonPacket.java index 8bfe21ba9..957878e39 100644 --- a/src/unported/java/appeng/core/sync/packets/ConfigButtonPacket.java +++ b/src/main/java/appeng/core/sync/packets/ConfigButtonPacket.java @@ -60,8 +60,8 @@ public final class ConfigButtonPacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { final ServerPlayerEntity sender = (ServerPlayerEntity) player; - if (sender.openContainer instanceof AEBaseContainer) { - final AEBaseContainer baseContainer = (AEBaseContainer) sender.openContainer; + if (sender.currentScreenHandler instanceof AEBaseContainer) { + final AEBaseContainer baseContainer = (AEBaseContainer) sender.currentScreenHandler; if (baseContainer.getTarget() instanceof IConfigurableObject) { final IConfigManager cm = ((IConfigurableObject) baseContainer.getTarget()).getConfigManager(); Enum setting = cm.getSetting(this.option); diff --git a/src/unported/java/appeng/core/sync/packets/ConfigValuePacket.java b/src/main/java/appeng/core/sync/packets/ConfigValuePacket.java similarity index 63% rename from src/unported/java/appeng/core/sync/packets/ConfigValuePacket.java rename to src/main/java/appeng/core/sync/packets/ConfigValuePacket.java index 352472739..fe19c32ff 100644 --- a/src/unported/java/appeng/core/sync/packets/ConfigValuePacket.java +++ b/src/main/java/appeng/core/sync/packets/ConfigValuePacket.java @@ -18,38 +18,25 @@ package appeng.core.sync.packets; -import io.netty.buffer.Unpooled; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.Container; -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.Hand; - import appeng.api.config.FuzzyMode; import appeng.api.config.Settings; import appeng.api.util.IConfigManager; import appeng.api.util.IConfigurableObject; -import appeng.client.gui.implementations.CraftingCPUScreen; import appeng.container.AEBaseContainer; import appeng.container.implementations.CellWorkbenchContainer; -import appeng.container.implementations.CraftConfirmContainer; -import appeng.container.implementations.CraftingCPUContainer; -import appeng.container.implementations.CraftingStatusContainer; -import appeng.container.implementations.LevelEmitterContainer; import appeng.container.implementations.NetworkToolContainer; import appeng.container.implementations.PatternTermContainer; -import appeng.container.implementations.PriorityContainer; -import appeng.container.implementations.QuartzKnifeContainer; -import appeng.container.implementations.SecurityStationContainer; -import appeng.container.implementations.StorageBusContainer; import appeng.core.sync.BasePacket; import appeng.core.sync.network.INetworkInfo; -import appeng.fluids.container.FluidLevelEmitterContainer; -import appeng.fluids.container.FluidStorageBusContainer; import appeng.helpers.IMouseWheelItem; +import io.netty.buffer.Unpooled; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.util.Hand; public class ConfigValuePacket extends BasePacket { @@ -78,8 +65,7 @@ public class ConfigValuePacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { - final Container c = player.openContainer; - + final ScreenHandler c = player.currentScreenHandler; if (this.Name.equals("Item") && ((!player.getStackInHand(Hand.MAIN_HAND).isEmpty() && player.getStackInHand(Hand.MAIN_HAND).getItem() instanceof IMouseWheelItem) || (!player.getStackInHand(Hand.OFF_HAND).isEmpty() @@ -98,33 +84,33 @@ public class ConfigValuePacket extends BasePacket { final ItemStack is = player.getStackInHand(hand); final IMouseWheelItem si = (IMouseWheelItem) is.getItem(); si.onWheel(is, this.Value.equals("WheelUp")); - } else if (this.Name.equals("Terminal.Cpu") && c instanceof CraftingStatusContainer) { - final CraftingStatusContainer qk = (CraftingStatusContainer) c; - qk.cycleCpu(this.Value.equals("Next")); - } else if (this.Name.equals("Terminal.Cpu") && c instanceof CraftConfirmContainer) { - final CraftConfirmContainer qk = (CraftConfirmContainer) c; - qk.cycleCpu(this.Value.equals("Next")); - } else if (this.Name.equals("Terminal.Start") && c instanceof CraftConfirmContainer) { - final CraftConfirmContainer qk = (CraftConfirmContainer) c; - qk.startJob(); - } else if (this.Name.equals("TileCrafting.Cancel") && c instanceof CraftingCPUContainer) { - final CraftingCPUContainer qk = (CraftingCPUContainer) c; - qk.cancelCrafting(); - } else if (this.Name.equals("QuartzKnife.Name") && c instanceof QuartzKnifeContainer) { - final QuartzKnifeContainer qk = (QuartzKnifeContainer) c; - qk.setName(this.Value); - } else if (this.Name.equals("TileSecurityStation.ToggleOption") && c instanceof SecurityStationContainer) { - final SecurityStationContainer sc = (SecurityStationContainer) c; - sc.toggleSetting(this.Value, player); - } else if (this.Name.equals("PriorityHost.Priority") && c instanceof PriorityContainer) { - final PriorityContainer pc = (PriorityContainer) c; - pc.setPriority(Integer.parseInt(this.Value), player); - } else if (this.Name.equals("LevelEmitter.Value") && c instanceof LevelEmitterContainer) { - final LevelEmitterContainer lvc = (LevelEmitterContainer) c; - lvc.setLevel(Long.parseLong(this.Value), player); - } else if (this.Name.equals("FluidLevelEmitter.Value") && c instanceof FluidLevelEmitterContainer) { - final FluidLevelEmitterContainer lvc = (FluidLevelEmitterContainer) c; - lvc.setLevel(Long.parseLong(this.Value), player); +// FIXME FABRIC } else if (this.Name.equals("Terminal.Cpu") && c instanceof CraftingStatusContainer) { +// FIXME FABRIC final CraftingStatusContainer qk = (CraftingStatusContainer) c; +// FIXME FABRIC qk.cycleCpu(this.Value.equals("Next")); +// FIXME FABRIC } else if (this.Name.equals("Terminal.Cpu") && c instanceof CraftConfirmContainer) { +// FIXME FABRIC final CraftConfirmContainer qk = (CraftConfirmContainer) c; +// FIXME FABRIC qk.cycleCpu(this.Value.equals("Next")); +// FIXME FABRIC } else if (this.Name.equals("Terminal.Start") && c instanceof CraftConfirmContainer) { +// FIXME FABRIC final CraftConfirmContainer qk = (CraftConfirmContainer) c; +// FIXME FABRIC qk.startJob(); +// FIXME FABRIC } else if (this.Name.equals("TileCrafting.Cancel") && c instanceof CraftingCPUContainer) { +// FIXME FABRIC final CraftingCPUContainer qk = (CraftingCPUContainer) c; +// FIXME FABRIC qk.cancelCrafting(); +// FIXME FABRIC } else if (this.Name.equals("QuartzKnife.Name") && c instanceof QuartzKnifeContainer) { +// FIXME FABRIC final QuartzKnifeContainer qk = (QuartzKnifeContainer) c; +// FIXME FABRIC qk.setName(this.Value); +// FIXME FABRIC } else if (this.Name.equals("TileSecurityStation.ToggleOption") && c instanceof SecurityStationContainer) { +// FIXME FABRIC final SecurityStationContainer sc = (SecurityStationContainer) c; +// FIXME FABRIC sc.toggleSetting(this.Value, player); +// FIXME FABRIC } else if (this.Name.equals("PriorityHost.Priority") && c instanceof PriorityContainer) { +// FIXME FABRIC final PriorityContainer pc = (PriorityContainer) c; +// FIXME FABRIC pc.setPriority(Integer.parseInt(this.Value), player); +// FIXME FABRIC } else if (this.Name.equals("LevelEmitter.Value") && c instanceof LevelEmitterContainer) { +// FIXME FABRIC final LevelEmitterContainer lvc = (LevelEmitterContainer) c; +// FIXME FABRIC lvc.setLevel(Long.parseLong(this.Value), player); +// FIXME FABRIC } else if (this.Name.equals("FluidLevelEmitter.Value") && c instanceof FluidLevelEmitterContainer) { +// FIXME FABRIC final FluidLevelEmitterContainer lvc = (FluidLevelEmitterContainer) c; +// FIXME FABRIC lvc.setLevel(Long.parseLong(this.Value), player); } else if (this.Name.startsWith("PatternTerminal.") && c instanceof PatternTermContainer) { final PatternTermContainer cpt = (PatternTermContainer) c; if (this.Name.equals("PatternTerminal.CraftMode")) { @@ -136,22 +122,22 @@ public class ConfigValuePacket extends BasePacket { } else if (this.Name.equals("PatternTerminal.Substitute")) { cpt.getPatternTerminal().setSubstitution(this.Value.equals("1")); } - } else if (this.Name.startsWith("StorageBus.")) { - if (this.Name.equals("StorageBus.Action")) { - if (this.Value.equals("Partition")) { - if (c instanceof StorageBusContainer) { - ((StorageBusContainer) c).partition(); - } else if (c instanceof FluidStorageBusContainer) { - ((FluidStorageBusContainer) c).partition(); - } - } else if (this.Value.equals("Clear")) { - if (c instanceof StorageBusContainer) { - ((StorageBusContainer) c).clear(); - } else if (c instanceof FluidStorageBusContainer) { - ((FluidStorageBusContainer) c).clear(); - } - } - } +// FIXME FABRIC } else if (this.Name.startsWith("StorageBus.")) { +// FIXME FABRIC if (this.Name.equals("StorageBus.Action")) { +// FIXME FABRIC if (this.Value.equals("Partition")) { +// FIXME FABRIC if (c instanceof StorageBusContainer) { +// FIXME FABRIC ((StorageBusContainer) c).partition(); +// FIXME FABRIC } else if (c instanceof FluidStorageBusContainer) { +// FIXME FABRIC ((FluidStorageBusContainer) c).partition(); +// FIXME FABRIC } +// FIXME FABRIC } else if (this.Value.equals("Clear")) { +// FIXME FABRIC if (c instanceof StorageBusContainer) { +// FIXME FABRIC ((StorageBusContainer) c).clear(); +// FIXME FABRIC } else if (c instanceof FluidStorageBusContainer) { +// FIXME FABRIC ((FluidStorageBusContainer) c).clear(); +// FIXME FABRIC } +// FIXME FABRIC } +// FIXME FABRIC } } else if (this.Name.startsWith("CellWorkbench.") && c instanceof CellWorkbenchContainer) { final CellWorkbenchContainer ccw = (CellWorkbenchContainer) c; if (this.Name.equals("CellWorkbench.Action")) { @@ -186,11 +172,12 @@ public class ConfigValuePacket extends BasePacket { } } } + throw new IllegalStateException(); } @Override public void clientPacketData(final INetworkInfo network, final PlayerEntity player) { - final Container c = player.openContainer; + final ScreenHandler c = player.currentScreenHandler; if (this.Name.equals("CustomName") && c instanceof AEBaseContainer) { ((AEBaseContainer) c).setCustomName(this.Value); @@ -198,9 +185,10 @@ public class ConfigValuePacket extends BasePacket { ((AEBaseContainer) c).stringSync(Integer.parseInt(this.Name.substring(8)), this.Value); } else if (this.Name.equals("CraftingStatus") && this.Value.equals("Clear")) { final Screen gs = MinecraftClient.getInstance().currentScreen; - if (gs instanceof CraftingCPUScreen) { - ((CraftingCPUScreen) gs).clearItems(); - } +// FIXME FABRIC if (gs instanceof CraftingCPUScreen) { +// FIXME FABRIC ((CraftingCPUScreen) gs).clearItems(); +// FIXME FABRIC } + throw new IllegalStateException(); } else if (c instanceof IConfigurableObject) { final IConfigManager cm = ((IConfigurableObject) c).getConfigManager(); diff --git a/src/unported/java/appeng/core/sync/packets/CraftRequestPacket.java b/src/main/java/appeng/core/sync/packets/CraftRequestPacket.java similarity index 92% rename from src/unported/java/appeng/core/sync/packets/CraftRequestPacket.java rename to src/main/java/appeng/core/sync/packets/CraftRequestPacket.java index 1f5ca4ebe..e080297c3 100644 --- a/src/unported/java/appeng/core/sync/packets/CraftRequestPacket.java +++ b/src/main/java/appeng/core/sync/packets/CraftRequestPacket.java @@ -63,8 +63,8 @@ public class CraftRequestPacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { - if (player.openContainer instanceof CraftAmountContainer) { - final CraftAmountContainer cca = (CraftAmountContainer) player.openContainer; + if (player.currentScreenHandler instanceof CraftAmountContainer) { + final CraftAmountContainer cca = (CraftAmountContainer) player.currentScreenHandler; final Object target = cca.getTarget(); if (target instanceof IActionHost) { final IActionHost ah = (IActionHost) target; @@ -90,11 +90,11 @@ public class CraftRequestPacket extends BasePacket { if (locator != null) { ContainerOpener.openContainer(CraftConfirmContainer.TYPE, player, locator); - if (player.openContainer instanceof CraftConfirmContainer) { - final CraftConfirmContainer ccc = (CraftConfirmContainer) player.openContainer; + if (player.currentScreenHandler instanceof CraftConfirmContainer) { + final CraftConfirmContainer ccc = (CraftConfirmContainer) player.currentScreenHandler; ccc.setAutoStart(this.heldShift); ccc.setJob(futureJob); - cca.detectAndSendChanges(); + cca.sendContentUpdates(); } } } catch (final Throwable e) { diff --git a/src/unported/java/appeng/core/sync/packets/FluidSlotPacket.java b/src/main/java/appeng/core/sync/packets/FluidSlotPacket.java similarity index 94% rename from src/unported/java/appeng/core/sync/packets/FluidSlotPacket.java rename to src/main/java/appeng/core/sync/packets/FluidSlotPacket.java index 0b72a9983..fd05ae21e 100644 --- a/src/unported/java/appeng/core/sync/packets/FluidSlotPacket.java +++ b/src/main/java/appeng/core/sync/packets/FluidSlotPacket.java @@ -24,7 +24,7 @@ import java.util.Map; import io.netty.buffer.Unpooled; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.Container; +import net.minecraft.screen.ScreenHandler; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; @@ -66,7 +66,7 @@ public class FluidSlotPacket extends BasePacket { @Override public void clientPacketData(final INetworkInfo manager, final PlayerEntity player) { - final Container c = player.openContainer; + final ScreenHandler c = player.currentScreenHandler; if (c instanceof IFluidSyncContainer) { ((IFluidSyncContainer) c).receiveFluidSlots(this.list); } @@ -74,7 +74,7 @@ public class FluidSlotPacket extends BasePacket { @Override public void serverPacketData(INetworkInfo manager, PlayerEntity player) { - final Container c = player.openContainer; + final ScreenHandler c = player.currentScreenHandler; if (c instanceof IFluidSyncContainer) { ((IFluidSyncContainer) c).receiveFluidSlots(this.list); } diff --git a/src/unported/java/appeng/core/sync/packets/InventoryActionPacket.java b/src/main/java/appeng/core/sync/packets/InventoryActionPacket.java similarity index 89% rename from src/unported/java/appeng/core/sync/packets/InventoryActionPacket.java rename to src/main/java/appeng/core/sync/packets/InventoryActionPacket.java index ce0f391ba..a6694769e 100644 --- a/src/unported/java/appeng/core/sync/packets/InventoryActionPacket.java +++ b/src/main/java/appeng/core/sync/packets/InventoryActionPacket.java @@ -37,6 +37,8 @@ import appeng.helpers.InventoryAction; import appeng.util.Platform; import appeng.util.item.AEItemStack; +import java.util.Optional; + public class InventoryActionPacket extends BasePacket { private final InventoryAction action; @@ -106,23 +108,23 @@ public class InventoryActionPacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { final ServerPlayerEntity sender = (ServerPlayerEntity) player; - if (sender.openContainer instanceof AEBaseContainer) { - final AEBaseContainer baseContainer = (AEBaseContainer) sender.openContainer; + if (sender.currentScreenHandler instanceof AEBaseContainer) { + final AEBaseContainer baseContainer = (AEBaseContainer) sender.currentScreenHandler; if (this.action == InventoryAction.AUTO_CRAFT) { final ContainerLocator locator = baseContainer.getLocator(); if (locator != null) { ContainerOpener.openContainer(CraftAmountContainer.TYPE, player, locator); - if (sender.openContainer instanceof CraftAmountContainer) { - final CraftAmountContainer cca = (CraftAmountContainer) sender.openContainer; + if (sender.currentScreenHandler instanceof CraftAmountContainer) { + final CraftAmountContainer cca = (CraftAmountContainer) sender.currentScreenHandler; if (baseContainer.getTargetStack() != null) { - cca.getCraftingItem().putStack(baseContainer.getTargetStack().asItemStackRepresentation()); + cca.getCraftingItem().setStack(baseContainer.getTargetStack().asItemStackRepresentation()); // This is the *actual* item that matters, not the display item above cca.setItemToCraft(baseContainer.getTargetStack()); } - cca.detectAndSendChanges(); + cca.sendContentUpdates(); } } } else { @@ -134,10 +136,10 @@ public class InventoryActionPacket extends BasePacket { @Override public void clientPacketData(final INetworkInfo network, final PlayerEntity player) { if (this.action == InventoryAction.UPDATE_HAND) { - if (this.slotItem == null) { - AppEng.instance().getPlayers().get(0).inventory.setItemStack(ItemStack.EMPTY); + if (this.slotItem != null) { + player.inventory.setCursorStack(this.slotItem.createItemStack()); } else { - AppEng.instance().getPlayers().get(0).inventory.setItemStack(this.slotItem.createItemStack()); + player.inventory.setCursorStack(ItemStack.EMPTY); } } } diff --git a/src/unported/java/appeng/core/sync/packets/ItemTransitionEffectPacket.java b/src/main/java/appeng/core/sync/packets/ItemTransitionEffectPacket.java similarity index 100% rename from src/unported/java/appeng/core/sync/packets/ItemTransitionEffectPacket.java rename to src/main/java/appeng/core/sync/packets/ItemTransitionEffectPacket.java diff --git a/src/unported/java/appeng/core/sync/packets/JEIRecipePacket.java b/src/main/java/appeng/core/sync/packets/JEIRecipePacket.java similarity index 97% rename from src/unported/java/appeng/core/sync/packets/JEIRecipePacket.java rename to src/main/java/appeng/core/sync/packets/JEIRecipePacket.java index 2021e3482..0812797a4 100644 --- a/src/unported/java/appeng/core/sync/packets/JEIRecipePacket.java +++ b/src/main/java/appeng/core/sync/packets/JEIRecipePacket.java @@ -22,8 +22,8 @@ import alexiil.mc.lib.attributes.item.FixedItemInv; import io.netty.buffer.Unpooled; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.screen.ScreenHandler; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -86,7 +86,7 @@ public class JEIRecipePacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { final ServerPlayerEntity pmp = (ServerPlayerEntity) player; - final Container con = pmp.openContainer; + final ScreenHandler con = pmp.currentScreenHandler; if (!(con instanceof IContainerCraftingPacket)) { return; @@ -181,7 +181,7 @@ public class JEIRecipePacket extends BasePacket { } ItemHandlerUtil.setStackInSlot(craftMatrix, x, currentItem); } - con.onCraftMatrixChanged(new WrapperInvItemHandler(craftMatrix)); + con.onContentChanged(new WrapperInvItemHandler(craftMatrix)); } } diff --git a/src/unported/java/appeng/core/sync/packets/LightningPacket.java b/src/main/java/appeng/core/sync/packets/LightningPacket.java similarity index 100% rename from src/unported/java/appeng/core/sync/packets/LightningPacket.java rename to src/main/java/appeng/core/sync/packets/LightningPacket.java diff --git a/src/unported/java/appeng/core/sync/packets/MEFluidInventoryUpdatePacket.java b/src/main/java/appeng/core/sync/packets/MEFluidInventoryUpdatePacket.java similarity index 100% rename from src/unported/java/appeng/core/sync/packets/MEFluidInventoryUpdatePacket.java rename to src/main/java/appeng/core/sync/packets/MEFluidInventoryUpdatePacket.java diff --git a/src/unported/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java b/src/main/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java similarity index 87% rename from src/unported/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java rename to src/main/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java index 9f50d0898..c6e54d675 100644 --- a/src/unported/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java +++ b/src/main/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java @@ -41,10 +41,6 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import appeng.api.storage.data.IAEItemStack; -import appeng.client.gui.implementations.CraftConfirmScreen; -import appeng.client.gui.implementations.CraftingCPUScreen; -import appeng.client.gui.implementations.MEMonitorableScreen; -import appeng.client.gui.implementations.NetworkStatusScreen; import appeng.core.AELog; import appeng.core.sync.BasePacket; import appeng.core.sync.network.INetworkInfo; @@ -136,21 +132,22 @@ public class MEInventoryUpdatePacket extends BasePacket { public void clientPacketData(final INetworkInfo network, final PlayerEntity player) { final Screen gs = MinecraftClient.getInstance().currentScreen; - if (gs instanceof CraftConfirmScreen) { - ((CraftConfirmScreen) gs).postUpdate(this.list, this.ref); - } - - if (gs instanceof CraftingCPUScreen) { - ((CraftingCPUScreen) gs).postUpdate(this.list, this.ref); - } - - if (gs instanceof MEMonitorableScreen) { - ((MEMonitorableScreen) gs).postUpdate(this.list); - } - - if (gs instanceof NetworkStatusScreen) { - ((NetworkStatusScreen) gs).postUpdate(this.list); - } + throw new IllegalStateException(); +// FIXME FABRIC if (gs instanceof CraftConfirmScreen) { +// FIXME FABRIC ((CraftConfirmScreen) gs).postUpdate(this.list, this.ref); +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC if (gs instanceof CraftingCPUScreen) { +// FIXME FABRIC ((CraftingCPUScreen) gs).postUpdate(this.list, this.ref); +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC if (gs instanceof MEMonitorableScreen) { +// FIXME FABRIC ((MEMonitorableScreen) gs).postUpdate(this.list); +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC if (gs instanceof NetworkStatusScreen) { +// FIXME FABRIC ((NetworkStatusScreen) gs).postUpdate(this.list); +// FIXME FABRIC } } @Nullable diff --git a/src/unported/java/appeng/core/sync/packets/MatterCannonPacket.java b/src/main/java/appeng/core/sync/packets/MatterCannonPacket.java similarity index 100% rename from src/unported/java/appeng/core/sync/packets/MatterCannonPacket.java rename to src/main/java/appeng/core/sync/packets/MatterCannonPacket.java diff --git a/src/unported/java/appeng/core/sync/packets/PatternSlotPacket.java b/src/main/java/appeng/core/sync/packets/PatternSlotPacket.java similarity index 96% rename from src/unported/java/appeng/core/sync/packets/PatternSlotPacket.java rename to src/main/java/appeng/core/sync/packets/PatternSlotPacket.java index ba68e56d2..18ff39281 100644 --- a/src/unported/java/appeng/core/sync/packets/PatternSlotPacket.java +++ b/src/main/java/appeng/core/sync/packets/PatternSlotPacket.java @@ -96,8 +96,8 @@ public class PatternSlotPacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { final ServerPlayerEntity sender = (ServerPlayerEntity) player; - if (sender.openContainer instanceof PatternTermContainer) { - final PatternTermContainer patternTerminal = (PatternTermContainer) sender.openContainer; + if (sender.currentScreenHandler instanceof PatternTermContainer) { + final PatternTermContainer patternTerminal = (PatternTermContainer) sender.currentScreenHandler; patternTerminal.craftOrGetItem(this); } } diff --git a/src/unported/java/appeng/core/sync/packets/ProgressBarPacket.java b/src/main/java/appeng/core/sync/packets/ProgressBarPacket.java similarity index 93% rename from src/unported/java/appeng/core/sync/packets/ProgressBarPacket.java rename to src/main/java/appeng/core/sync/packets/ProgressBarPacket.java index cf659e344..569775358 100644 --- a/src/unported/java/appeng/core/sync/packets/ProgressBarPacket.java +++ b/src/main/java/appeng/core/sync/packets/ProgressBarPacket.java @@ -21,7 +21,7 @@ package appeng.core.sync.packets; import io.netty.buffer.Unpooled; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.Container; +import net.minecraft.screen.ScreenHandler; import net.minecraft.network.PacketByteBuf; import appeng.container.AEBaseContainer; @@ -54,7 +54,7 @@ public class ProgressBarPacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { - final Container c = player.openContainer; + final ScreenHandler c = player.currentScreenHandler; if (c instanceof AEBaseContainer) { ((AEBaseContainer) c).updateFullProgressBar(this.id, this.value); } @@ -62,7 +62,7 @@ public class ProgressBarPacket extends BasePacket { @Override public void clientPacketData(final INetworkInfo network, final PlayerEntity player) { - final Container c = player.openContainer; + final ScreenHandler c = player.currentScreenHandler; if (c instanceof AEBaseContainer) { ((AEBaseContainer) c).updateFullProgressBar(this.id, this.value); } diff --git a/src/unported/java/appeng/core/sync/packets/SwapSlotsPacket.java b/src/main/java/appeng/core/sync/packets/SwapSlotsPacket.java similarity index 90% rename from src/unported/java/appeng/core/sync/packets/SwapSlotsPacket.java rename to src/main/java/appeng/core/sync/packets/SwapSlotsPacket.java index a9e14f143..c88f90d83 100644 --- a/src/unported/java/appeng/core/sync/packets/SwapSlotsPacket.java +++ b/src/main/java/appeng/core/sync/packets/SwapSlotsPacket.java @@ -50,8 +50,8 @@ public class SwapSlotsPacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { - if (player != null && player.openContainer instanceof AEBaseContainer) { - ((AEBaseContainer) player.openContainer).swapSlotContents(this.slotA, this.slotB); + if (player != null && player.currentScreenHandler instanceof AEBaseContainer) { + ((AEBaseContainer) player.currentScreenHandler).swapSlotContents(this.slotA, this.slotB); } } } diff --git a/src/unported/java/appeng/core/sync/packets/SwitchGuisPacket.java b/src/main/java/appeng/core/sync/packets/SwitchGuisPacket.java similarity index 80% rename from src/unported/java/appeng/core/sync/packets/SwitchGuisPacket.java rename to src/main/java/appeng/core/sync/packets/SwitchGuisPacket.java index 2c6f0b08b..9b5ab84fe 100644 --- a/src/unported/java/appeng/core/sync/packets/SwitchGuisPacket.java +++ b/src/main/java/appeng/core/sync/packets/SwitchGuisPacket.java @@ -21,10 +21,11 @@ package appeng.core.sync.packets; import io.netty.buffer.Unpooled; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.Container; +import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; import appeng.container.AEBaseContainer; import appeng.container.ContainerLocator; @@ -37,7 +38,7 @@ public class SwitchGuisPacket extends BasePacket { private final ScreenHandlerType newGui; public SwitchGuisPacket(final PacketByteBuf stream) { - this.newGui = ForgeRegistries.CONTAINERS.getValue(stream.readResourceLocation()); + this.newGui = Registry.SCREEN_HANDLER.get(stream.readIdentifier()); } // api @@ -47,14 +48,18 @@ public class SwitchGuisPacket extends BasePacket { final PacketByteBuf data = new PacketByteBuf(Unpooled.buffer()); data.writeInt(this.getPacketID()); - data.writeResourceLocation(newGui.getRegistryName()); + Identifier newGuiId = Registry.SCREEN_HANDLER.getId(newGui); + if (newGuiId == null) { + throw new IllegalArgumentException("Unregistered screen handler: " + newGui); + } + data.writeIdentifier(newGuiId); this.configureWrite(data); } @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { - final Container c = player.openContainer; + final ScreenHandler c = player.currentScreenHandler; if (c instanceof AEBaseContainer) { final AEBaseContainer bc = (AEBaseContainer) c; final ContainerLocator locator = bc.getLocator(); diff --git a/src/unported/java/appeng/core/sync/packets/TargetFluidStackPacket.java b/src/main/java/appeng/core/sync/packets/TargetFluidStackPacket.java similarity index 93% rename from src/unported/java/appeng/core/sync/packets/TargetFluidStackPacket.java rename to src/main/java/appeng/core/sync/packets/TargetFluidStackPacket.java index 3d96057f7..36a9d08b3 100644 --- a/src/unported/java/appeng/core/sync/packets/TargetFluidStackPacket.java +++ b/src/main/java/appeng/core/sync/packets/TargetFluidStackPacket.java @@ -69,8 +69,8 @@ public class TargetFluidStackPacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { - if (player.openContainer instanceof FluidTerminalContainer) { - ((FluidTerminalContainer) player.openContainer).setTargetStack(this.stack); + if (player.currentScreenHandler instanceof FluidTerminalContainer) { + ((FluidTerminalContainer) player.currentScreenHandler).setTargetStack(this.stack); } } } diff --git a/src/unported/java/appeng/core/sync/packets/TargetItemStackPacket.java b/src/main/java/appeng/core/sync/packets/TargetItemStackPacket.java similarity index 93% rename from src/unported/java/appeng/core/sync/packets/TargetItemStackPacket.java rename to src/main/java/appeng/core/sync/packets/TargetItemStackPacket.java index 1bf74c2b0..10e664dde 100644 --- a/src/unported/java/appeng/core/sync/packets/TargetItemStackPacket.java +++ b/src/main/java/appeng/core/sync/packets/TargetItemStackPacket.java @@ -64,8 +64,8 @@ public class TargetItemStackPacket extends BasePacket { @Override public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { - if (player.openContainer instanceof AEBaseContainer) { - ((AEBaseContainer) player.openContainer).setTargetStack(this.stack); + if (player.currentScreenHandler instanceof AEBaseContainer) { + ((AEBaseContainer) player.currentScreenHandler).setTargetStack(this.stack); } } } diff --git a/src/unported/java/appeng/crafting/CraftBranchFailure.java b/src/main/java/appeng/crafting/CraftBranchFailure.java similarity index 90% rename from src/unported/java/appeng/crafting/CraftBranchFailure.java rename to src/main/java/appeng/crafting/CraftBranchFailure.java index 4a92dec94..e340a2151 100644 --- a/src/unported/java/appeng/crafting/CraftBranchFailure.java +++ b/src/main/java/appeng/crafting/CraftBranchFailure.java @@ -19,6 +19,7 @@ package appeng.crafting; import appeng.api.storage.data.IAEItemStack; +import net.minecraft.util.registry.Registry; public class CraftBranchFailure extends Exception { @@ -27,7 +28,7 @@ public class CraftBranchFailure extends Exception { private final IAEItemStack missing; public CraftBranchFailure(final IAEItemStack what, final long howMany) { - super("Failed: " + what.getItem().getRegistryName() + " x " + howMany); + super("Failed: " + Registry.ITEM.getId(what.getItem()) + " x " + howMany); this.missing = what.copy(); this.missing.setStackSize(howMany); } diff --git a/src/unported/java/appeng/crafting/CraftingCalculationFailure.java b/src/main/java/appeng/crafting/CraftingCalculationFailure.java similarity index 100% rename from src/unported/java/appeng/crafting/CraftingCalculationFailure.java rename to src/main/java/appeng/crafting/CraftingCalculationFailure.java diff --git a/src/main/java/appeng/crafting/CraftingJob.java b/src/main/java/appeng/crafting/CraftingJob.java index eaa1f0b31..45fbf7da9 100644 --- a/src/main/java/appeng/crafting/CraftingJob.java +++ b/src/main/java/appeng/crafting/CraftingJob.java @@ -1,8 +1,345 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + package appeng.crafting; -// FIXME FABRIC DUMMY -public class CraftingJob { - public boolean simulateFor(int simTime) { - return false; +import java.util.HashMap; +import java.util.concurrent.TimeUnit; + +import com.google.common.base.Stopwatch; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.World; + +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.networking.IGrid; +import appeng.api.networking.IGridHost; +import appeng.api.networking.IGridNode; +import appeng.api.networking.crafting.ICraftingCallback; +import appeng.api.networking.crafting.ICraftingGrid; +import appeng.api.networking.crafting.ICraftingJob; +import appeng.api.networking.crafting.ICraftingPatternDetails; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.IActionSource; +import appeng.api.networking.storage.IStorageGrid; +import appeng.api.storage.channels.IItemStorageChannel; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import appeng.api.util.DimensionalCoord; +import appeng.core.AELog; +import appeng.hooks.TickHandler; + +public class CraftingJob implements Runnable, ICraftingJob { + private static final String LOG_CRAFTING_JOB = "CraftingJob (%s) issued by %s requesting [%s] using %s bytes took %s ms"; + private static final String LOG_MACHINE_SOURCE_DETAILS = "Machine[object=%s, %s]"; + + private final MECraftingInventory original; + private final World world; + private final IItemList crafting = AEApi.instance().storage() + .getStorageChannel(IItemStorageChannel.class).createList(); + private final IItemList missing = AEApi.instance().storage() + .getStorageChannel(IItemStorageChannel.class).createList(); + private final HashMap opsAndMultiplier = new HashMap<>(); + private final Object monitor = new Object(); + private final Stopwatch watch = Stopwatch.createUnstarted(); + private CraftingTreeNode tree; + private final IAEItemStack output; + private boolean simulate = false; + private MECraftingInventory availableCheck; + private long bytes = 0; + private final IActionSource actionSrc; + private final ICraftingCallback callback; + private boolean running = false; + private boolean done = false; + private int time = 5; + private int incTime = Integer.MAX_VALUE; + + private World wrapWorld(final World w) { + return w; + } + + public CraftingJob(final World w, final IGrid grid, final IActionSource actionSrc, final IAEItemStack what, + final ICraftingCallback callback) { + this.world = this.wrapWorld(w); + this.output = what.copy(); + this.actionSrc = actionSrc; + + this.callback = callback; + final ICraftingGrid cc = grid.getCache(ICraftingGrid.class); + final IStorageGrid sg = grid.getCache(IStorageGrid.class); + this.original = new MECraftingInventory( + sg.getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class)), actionSrc, + false, false, false); + + this.setTree(this.getCraftingTree(cc, what)); + this.availableCheck = null; + } + + private CraftingTreeNode getCraftingTree(final ICraftingGrid cc, final IAEItemStack what) { + return new CraftingTreeNode(cc, this, what, null, -1, 0); + } + + void refund(final IAEItemStack o) { + this.availableCheck.injectItems(o, Actionable.MODULATE, this.actionSrc); + } + + IAEItemStack checkUse(final IAEItemStack available) { + return this.availableCheck.extractItems(available, Actionable.MODULATE, this.actionSrc); + } + + public void writeToNBT(final CompoundTag out) { + + } + + void addTask(IAEItemStack what, final long crafts, final ICraftingPatternDetails details, final int depth) { + if (crafts > 0) { + what = what.copy(); + what.setStackSize(what.getStackSize() * crafts); + this.crafting.add(what); + } + } + + void addMissing(IAEItemStack what) { + what = what.copy(); + this.missing.add(what); + } + + @Override + public void run() { + try { + try { + TickHandler.INSTANCE.registerCraftingSimulation(this.world, this); + this.handlePausing(); + + final Stopwatch timer = Stopwatch.createStarted(); + + final MECraftingInventory craftingInventory = new MECraftingInventory(this.original, true, false, true); + craftingInventory.ignore(this.output); + + this.availableCheck = new MECraftingInventory(this.original, false, false, false); + this.getTree().request(craftingInventory, this.output.getStackSize(), this.actionSrc); + this.getTree().dive(this); + + for (final String s : this.opsAndMultiplier.keySet()) { + final TwoIntegers ti = this.opsAndMultiplier.get(s); + AELog.crafting(s + " * " + ti.times + " = " + (ti.perOp * ti.times)); + } + + this.logCraftingJob("real", timer); + // if ( mode == Actionable.MODULATE ) + // craftingInventory.moveItemsToStorage( storage ); + } catch (final CraftBranchFailure e) { + this.simulate = true; + + try { + final Stopwatch timer = Stopwatch.createStarted(); + final MECraftingInventory craftingInventory = new MECraftingInventory(this.original, true, false, + true); + craftingInventory.ignore(this.output); + + this.availableCheck = new MECraftingInventory(this.original, false, false, false); + + this.getTree().setSimulate(); + this.getTree().request(craftingInventory, this.output.getStackSize(), this.actionSrc); + this.getTree().dive(this); + + for (final String s : this.opsAndMultiplier.keySet()) { + final TwoIntegers ti = this.opsAndMultiplier.get(s); + AELog.crafting(s + " * " + ti.times + " = " + (ti.perOp * ti.times)); + } + + this.logCraftingJob("simulate", timer); + } catch (final CraftBranchFailure e1) { + AELog.debug(e1); + } catch (final CraftingCalculationFailure f) { + AELog.debug(f); + } catch (final InterruptedException e1) { + AELog.crafting("Crafting calculation canceled."); + this.finish(); + return; + } + } catch (final CraftingCalculationFailure f) { + AELog.debug(f); + } catch (final InterruptedException e1) { + AELog.crafting("Crafting calculation canceled."); + this.finish(); + return; + } + + AELog.craftingDebug("crafting job now done"); + } catch (final Throwable t) { + this.finish(); + throw new IllegalStateException(t); + } + + this.finish(); + } + + void handlePausing() throws InterruptedException { + if (this.incTime > 100) { + this.incTime = 0; + + synchronized (this.monitor) { + if (this.watch.elapsed(TimeUnit.MICROSECONDS) > this.time) { + this.running = false; + this.watch.stop(); + this.monitor.notify(); + } + + if (!this.running) { + AELog.craftingDebug("crafting job will now sleep"); + + while (!this.running) { + this.monitor.wait(); + } + + AELog.craftingDebug("crafting job now active"); + } + } + + if (Thread.interrupted()) { + throw new InterruptedException(); + } + } + this.incTime++; + } + + private void finish() { + if (this.callback != null) { + this.callback.calculationComplete(this); + } + + this.availableCheck = null; + + synchronized (this.monitor) { + this.running = false; + this.done = true; + this.monitor.notify(); + } + } + + @Override + public boolean isSimulation() { + return this.simulate; + } + + @Override + public long getByteTotal() { + return this.bytes; + } + + @Override + public void populatePlan(final IItemList plan) { + if (this.getTree() != null) { + this.getTree().getPlan(plan); + } + } + + @Override + public IAEItemStack getOutput() { + return this.output; + } + + public boolean isDone() { + return this.done; + } + + World getWorld() { + return this.world; + } + + /** + * returns true if this needs more simulation. + * + * @param milli milliseconds of simulation + * + * @return true if this needs more simulation + */ + public boolean simulateFor(final int milli) { + this.time = milli; + + synchronized (this.monitor) { + if (this.done) { + return false; + } + + this.watch.reset(); + this.watch.start(); + this.running = true; + + AELog.craftingDebug("main thread is now going to sleep"); + + this.monitor.notify(); + + while (this.running) { + try { + this.monitor.wait(); + } catch (final InterruptedException ignored) { + } + } + + AELog.craftingDebug("main thread is now active"); + } + + return true; + } + + void addBytes(final long crafts) { + this.bytes += crafts; + } + + public CraftingTreeNode getTree() { + return this.tree; + } + + private void setTree(final CraftingTreeNode tree) { + this.tree = tree; + } + + private void logCraftingJob(String type, Stopwatch timer) { + if (AELog.isCraftingLogEnabled()) { + final String itemToOutput = this.output.toString(); + final long elapsedTime = timer.elapsed(TimeUnit.MILLISECONDS); + final String actionSource; + + if (this.actionSrc.player().isPresent()) { + final PlayerEntity player = this.actionSrc.player().get(); + + actionSource = player.toString(); + } else if (this.actionSrc.machine().isPresent()) { + final IActionHost machineSource = this.actionSrc.machine().get(); + final IGridNode actionableNode = machineSource.getActionableNode(); + final IGridHost machine = actionableNode.getMachine(); + final DimensionalCoord location = actionableNode.getGridBlock().getLocation(); + + actionSource = String.format(LOG_MACHINE_SOURCE_DETAILS, machine, location); + } else { + actionSource = "[unknown source]"; + } + + AELog.crafting(LOG_CRAFTING_JOB, type, actionSource, itemToOutput, this.bytes, elapsedTime); + } + } + + private static class TwoIntegers { + private final long perOp = 0; + private final long times = 0; } } diff --git a/src/unported/java/appeng/crafting/CraftingLink.java b/src/main/java/appeng/crafting/CraftingLink.java similarity index 100% rename from src/unported/java/appeng/crafting/CraftingLink.java rename to src/main/java/appeng/crafting/CraftingLink.java diff --git a/src/unported/java/appeng/crafting/CraftingLinkNexus.java b/src/main/java/appeng/crafting/CraftingLinkNexus.java similarity index 100% rename from src/unported/java/appeng/crafting/CraftingLinkNexus.java rename to src/main/java/appeng/crafting/CraftingLinkNexus.java diff --git a/src/unported/java/appeng/crafting/CraftingTreeNode.java b/src/main/java/appeng/crafting/CraftingTreeNode.java similarity index 100% rename from src/unported/java/appeng/crafting/CraftingTreeNode.java rename to src/main/java/appeng/crafting/CraftingTreeNode.java diff --git a/src/unported/java/appeng/crafting/CraftingTreeProcess.java b/src/main/java/appeng/crafting/CraftingTreeProcess.java similarity index 94% rename from src/unported/java/appeng/crafting/CraftingTreeProcess.java rename to src/main/java/appeng/crafting/CraftingTreeProcess.java index 782a1cf43..9b8cc33a5 100644 --- a/src/unported/java/appeng/crafting/CraftingTreeProcess.java +++ b/src/main/java/appeng/crafting/CraftingTreeProcess.java @@ -18,18 +18,6 @@ package appeng.crafting; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import appeng.util.FakePlayer; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraft.server.world.ServerWorld; -import net.minecraftforge.fml.hooks.BasicEventHooks; - import appeng.api.AEApi; import appeng.api.config.Actionable; import appeng.api.networking.crafting.ICraftingGrid; @@ -41,6 +29,13 @@ import appeng.api.storage.data.IItemList; import appeng.container.ContainerNull; import appeng.me.cluster.implementations.CraftingCPUCluster; import appeng.util.Platform; +import net.minecraft.inventory.CraftingInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; public class CraftingTreeProcess { @@ -74,8 +69,9 @@ public class CraftingTreeProcess { ic.setStack(x, is[x] == null ? ItemStack.EMPTY : is[x].createItemStack()); } - BasicEventHooks.firePlayerCraftingEvent((PlayerEntity) FakePlayer.getOrCreate((ServerWorld) world), - details.getOutput(ic, world), ic); + // FIXME FABRIC Hooks don't exist + // FIXME FABRIC BasicEventHooks.firePlayerCraftingEvent((PlayerEntity) FakePlayer.getOrCreate((ServerWorld) world), + // FIXME FABRIC details.getOutput(ic, world), ic); for (int x = 0; x < ic.size(); x++) { final ItemStack g = ic.getStack(x); @@ -98,7 +94,7 @@ public class CraftingTreeProcess { this.limitQty = true; } - if (g.getItem().hasRecipeRemainder(g)) { + if (g.getItem().hasRecipeRemainder()) { this.limitQty = this.containerItems = true; } } @@ -175,8 +171,9 @@ public class CraftingTreeProcess { ic.setStack(entry.getKey().getSlot(), stack.createItemStack()); } - BasicEventHooks.firePlayerCraftingEvent((PlayerEntity) FakePlayer.getOrCreate((ServerWorld) this.world), - this.details.getOutput(ic, this.world), ic); + // FIXME FABRIC Hook doesn't exist + // FIXME FABRIC BasicEventHooks.firePlayerCraftingEvent((PlayerEntity) FakePlayer.getOrCreate((ServerWorld) this.world), + // FIXME FABRIC this.details.getOutput(ic, this.world), ic); for (int x = 0; x < ic.size(); x++) { ItemStack is = ic.getStack(x); diff --git a/src/unported/java/appeng/crafting/CraftingWatcher.java b/src/main/java/appeng/crafting/CraftingWatcher.java similarity index 100% rename from src/unported/java/appeng/crafting/CraftingWatcher.java rename to src/main/java/appeng/crafting/CraftingWatcher.java diff --git a/src/unported/java/appeng/crafting/MECraftingInventory.java b/src/main/java/appeng/crafting/MECraftingInventory.java similarity index 100% rename from src/unported/java/appeng/crafting/MECraftingInventory.java rename to src/main/java/appeng/crafting/MECraftingInventory.java diff --git a/src/unported/java/appeng/debug/DebugCardItem.java b/src/main/java/appeng/debug/DebugCardItem.java similarity index 96% rename from src/unported/java/appeng/debug/DebugCardItem.java rename to src/main/java/appeng/debug/DebugCardItem.java index c840e2507..2810762a1 100644 --- a/src/unported/java/appeng/debug/DebugCardItem.java +++ b/src/main/java/appeng/debug/DebugCardItem.java @@ -21,6 +21,8 @@ package appeng.debug; import java.util.HashSet; import java.util.Set; +import appeng.hooks.AEToolItem; +import appeng.tile.networking.ControllerBlockEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -28,6 +30,7 @@ import net.minecraft.item.ItemUsageContext; import net.minecraft.block.entity.BlockEntity; import net.minecraft.text.LiteralText; import net.minecraft.util.ActionResult; +import net.minecraft.util.Util; import net.minecraft.util.math.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -49,11 +52,10 @@ import appeng.me.Grid; import appeng.me.GridNode; import appeng.me.cache.TickManagerCache; import appeng.parts.p2p.P2PTunnelPart; -import appeng.tile.networking.ControllerBlockEntity; -public class DebugCardItem extends AEBaseItem { +public class DebugCardItem extends AEBaseItem implements AEToolItem { - public DebugCardItem(Properties properties) { + public DebugCardItem(Settings properties) { super(properties); } @@ -186,7 +188,7 @@ public class DebugCardItem extends AEBaseItem { } private void outputMsg(final Entity player, final String string) { - player.sendMessage(new LiteralText(string)); + player.sendSystemMessage(new LiteralText(string), Util.NIL_UUID); } private String timeMeasurement(final long nanos) { diff --git a/src/unported/java/appeng/debug/DebugPartPlacerItem.java b/src/main/java/appeng/debug/DebugPartPlacerItem.java similarity index 90% rename from src/unported/java/appeng/debug/DebugPartPlacerItem.java rename to src/main/java/appeng/debug/DebugPartPlacerItem.java index 898e70495..a1711ee36 100644 --- a/src/unported/java/appeng/debug/DebugPartPlacerItem.java +++ b/src/main/java/appeng/debug/DebugPartPlacerItem.java @@ -2,6 +2,7 @@ package appeng.debug; import java.util.Arrays; +import appeng.hooks.AEToolItem; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; @@ -9,11 +10,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; import net.minecraft.text.LiteralText; import net.minecraft.util.ActionResult; +import net.minecraft.util.Util; import net.minecraft.util.math.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3i; +import net.minecraft.util.registry.Registry; import net.minecraft.world.World; -import net.minecraftforge.registries.ForgeRegistries; import appeng.api.parts.IPart; import appeng.api.parts.IPartHost; @@ -28,9 +30,9 @@ import appeng.items.parts.PartItem; * (and not a colored one) onto an existing cable to quickly test parts and * their rendering. */ -public class DebugPartPlacerItem extends AEBaseItem { +public class DebugPartPlacerItem extends AEBaseItem implements AEToolItem { - public DebugPartPlacerItem(Properties properties) { + public DebugPartPlacerItem(Settings properties) { super(properties); } @@ -48,7 +50,7 @@ public class DebugPartPlacerItem extends AEBaseItem { return ActionResult.PASS; } - if (!player.abilities.isCreativeMode) { + if (!player.isCreative()) { player.sendSystemMessage(new LiteralText("Only usable in creative mode"), Util.NIL_UUID); return ActionResult.FAIL; } @@ -81,7 +83,7 @@ public class DebugPartPlacerItem extends AEBaseItem { } nextPos = nextPos.add(offset); - if (!world.setBlockState(nextPos, te.getBlockState())) { + if (!world.setBlockState(nextPos, te.getCachedState())) { continue; } diff --git a/src/unported/java/appeng/debug/EraserItem.java b/src/main/java/appeng/debug/EraserItem.java similarity index 93% rename from src/unported/java/appeng/debug/EraserItem.java rename to src/main/java/appeng/debug/EraserItem.java index c3c8b406d..fa3a8ba72 100644 --- a/src/unported/java/appeng/debug/EraserItem.java +++ b/src/main/java/appeng/debug/EraserItem.java @@ -23,6 +23,7 @@ import java.util.HashSet; import java.util.Queue; import java.util.Set; +import appeng.hooks.AEToolItem; import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.entity.player.PlayerEntity; @@ -36,13 +37,13 @@ import net.minecraft.world.World; import appeng.core.AELog; import appeng.items.AEBaseItem; -public class EraserItem extends AEBaseItem { +public class EraserItem extends AEBaseItem implements AEToolItem { private static final int BOX_SIZE = 48; private static final int BLOCK_ERASE_LIMIT = BOX_SIZE * BOX_SIZE * BOX_SIZE; final static Set COMMON_BLOCKS = new HashSet<>(); - public EraserItem(Properties properties) { + public EraserItem(Settings properties) { super(properties); } @@ -141,9 +142,9 @@ public class EraserItem extends AEBaseItem { COMMON_BLOCKS.add(Blocks.WATER); COMMON_BLOCKS.add(Blocks.LAVA); - COMMON_BLOCKS.addAll(BlockTags.LEAVES.getAllElements()); - COMMON_BLOCKS.addAll(BlockTags.SAND.getAllElements()); - COMMON_BLOCKS.addAll(BlockTags.LOGS.getAllElements()); + COMMON_BLOCKS.addAll(BlockTags.LEAVES.values()); + COMMON_BLOCKS.addAll(BlockTags.SAND.values()); + COMMON_BLOCKS.addAll(BlockTags.LOGS.values()); } return COMMON_BLOCKS; diff --git a/src/unported/java/appeng/debug/ReplicatorCardItem.java b/src/main/java/appeng/debug/ReplicatorCardItem.java similarity index 87% rename from src/unported/java/appeng/debug/ReplicatorCardItem.java rename to src/main/java/appeng/debug/ReplicatorCardItem.java index fb0ed4fc3..2a6887135 100644 --- a/src/unported/java/appeng/debug/ReplicatorCardItem.java +++ b/src/main/java/appeng/debug/ReplicatorCardItem.java @@ -18,6 +18,7 @@ package appeng.debug; +import appeng.hooks.AEToolItem; import net.minecraft.block.Block; import net.minecraft.block.BlockEntityProvider; import net.minecraft.block.BlockState; @@ -27,11 +28,17 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.ActionResult; +import net.minecraft.util.Identifier; +import net.minecraft.util.Util; import net.minecraft.util.math.Direction; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.text.LiteralText; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; import net.minecraft.world.dimension.DimensionType; @@ -43,9 +50,9 @@ import appeng.api.util.AEPartLocation; import appeng.api.util.DimensionalCoord; import appeng.items.AEBaseItem; -public class ReplicatorCardItem extends AEBaseItem { +public class ReplicatorCardItem extends AEBaseItem implements AEToolItem { - public ReplicatorCardItem(Properties properties) { + public ReplicatorCardItem(Settings properties) { super(properties); } @@ -76,7 +83,7 @@ public class ReplicatorCardItem extends AEBaseItem { tag.putInt("y", y); tag.putInt("z", z); tag.putInt("side", side.ordinal()); - tag.putInt("dimid", world.getDimension().getType().getId()); + tag.putString("w", world.getRegistryKey().getValue().toString()); player.getStackInHand(hand).setTag(tag); } else { this.outputMsg(player, "This is not a Grid Tile."); @@ -88,8 +95,8 @@ public class ReplicatorCardItem extends AEBaseItem { final int src_y = ish.getInt("y"); final int src_z = ish.getInt("z"); final int src_side = ish.getInt("side"); - final int dimid = ish.getInt("dimid"); - final World src_w = world.getServer().getWorld(DimensionType.getById(dimid)); + final String worldId = ish.getString("w"); + final World src_w = world.getServer().getWorld(RegistryKey.of(Registry.DIMENSION, new Identifier(worldId))); final BlockEntity te = src_w.getBlockEntity(new BlockPos(src_x, src_y, src_z)); if (te instanceof IGridHost) { @@ -136,9 +143,9 @@ public class ReplicatorCardItem extends AEBaseItem { final BlockEntity ote = src_w.getBlockEntity(p); final BlockEntity nte = blkEntityProvider.createBlockEntity(world); final CompoundTag data = new CompoundTag(); - ote.write(data); - nte.read(data.copy()); - world.setTileEntity(d, nte); + ote.toTag(data); + nte.fromTag(state, data.copy()); + world.setBlockEntity(d, nte); } world.updateListeners(d, prev, state, 3); } @@ -164,6 +171,6 @@ public class ReplicatorCardItem extends AEBaseItem { } private void outputMsg(final Entity player, final String string) { - player.sendMessage(new LiteralText(string)); + player.sendSystemMessage(new LiteralText(string), Util.NIL_UUID); } } diff --git a/src/unported/java/appeng/fluids/block/FluidInterfaceBlock.java b/src/main/java/appeng/fluids/block/FluidInterfaceBlock.java similarity index 100% rename from src/unported/java/appeng/fluids/block/FluidInterfaceBlock.java rename to src/main/java/appeng/fluids/block/FluidInterfaceBlock.java diff --git a/src/unported/java/appeng/fluids/client/gui/FluidTerminalScreen.java b/src/main/java/appeng/fluids/client/gui/FluidTerminalScreen.java similarity index 76% rename from src/unported/java/appeng/fluids/client/gui/FluidTerminalScreen.java rename to src/main/java/appeng/fluids/client/gui/FluidTerminalScreen.java index cee165f98..090799258 100644 --- a/src/unported/java/appeng/fluids/client/gui/FluidTerminalScreen.java +++ b/src/main/java/appeng/fluids/client/gui/FluidTerminalScreen.java @@ -24,15 +24,15 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale; -import net.minecraft.client.util.InputUtil; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.LiteralText; import org.lwjgl.glfw.GLFW; -import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ClickType; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.slot.SlotActionType; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.api.config.Settings; import appeng.api.config.SortDir; @@ -84,34 +84,34 @@ public class FluidTerminalScreen extends AEBaseMEScreen public FluidTerminalScreen(FluidTerminalContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.xSize = 185; - this.ySize = 222; + this.backgroundWidth = 185; + this.backgroundHeight = 222; final Scrollbar scrollbar = new Scrollbar(); this.setScrollBar(scrollbar); this.repo = new FluidRepo(scrollbar, this); this.configSrc = container.getConfigManager(); - this.container.setGui(this); + this.handler.setGui(this); } @Override public void init() { - this.guiLeft = (this.width - this.xSize) / 2; - this.guiTop = (this.height - this.ySize) / 2; + this.x = (this.width - this.backgroundWidth) / 2; + this.y = (this.height - this.backgroundHeight) / 2; - this.searchField = new AETextField(this.font, this.guiLeft + 80, this.guiTop + 4, 90, 12); - this.searchField.setEnableBackgroundDrawing(false); - this.searchField.setMaxStringLength(25); - this.searchField.setTextColor(0xFFFFFF); + this.searchField = new AETextField(this.textRenderer, this.x + 80, this.y + 4, 90, 12); + this.searchField.setHasBorder(false); + this.searchField.setMaxLength(25); + this.searchField.setEditableColor(0xFFFFFF); this.searchField.setSelectionColor(0xFF99FF99); this.searchField.setVisible(true); - int offset = this.guiTop; + int offset = this.y; - this.sortByBox = this.addButton(new SettingToggleButton<>(this.guiLeft - 18, offset, Settings.SORT_BY, + this.sortByBox = this.addButton(new SettingToggleButton<>(this.x - 18, offset, Settings.SORT_BY, getSortBy(), Platform::isSortOrderAvailable, this::toggleServerSetting)); offset += 20; - this.sortDirBox = this.addButton(new SettingToggleButton<>(this.guiLeft - 18, offset, Settings.SORT_DIRECTION, + this.sortDirBox = this.addButton(new SettingToggleButton<>(this.x - 18, offset, Settings.SORT_DIRECTION, getSortDir(), this::toggleServerSetting)); for (int y = 0; y < ROWS; y++) { @@ -119,47 +119,46 @@ public class FluidTerminalScreen extends AEBaseMEScreen SlotFluidME slot = new SlotFluidME(new InternalFluidSlotME(this.repo, x + y * COLS, GRID_OFFSET_X + x * 18, GRID_OFFSET_Y + y * 18)); this.getMeFluidSlots().add(slot); - this.container.inventorySlots.add(slot); + this.handler.slots.add(slot); } } this.setScrollBar(); } @Override - public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) { - this.font.drawString(this.getGuiDisplayName("Fluid Terminal"), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName("Fluid Terminal"), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); } @Override - public void drawBG(int offsetX, int offsetY, int mouseX, int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY, float partialTicks) { this.bindTexture(this.getBackground()); final int x_width = 197; - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, x_width, 18, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, x_width, 18); for (int x = 0; x < 6; x++) { - GuiUtils.drawTexturedModalRect(offsetX, offsetY + 18 + x * 18, 0, 18, x_width, 18, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY + 18 + x * 18, 0, 18, x_width, 18); } - GuiUtils.drawTexturedModalRect(offsetX, offsetY + 16 + 6 * 18, 0, 106 - 18 - 18, x_width, 99 + 77, - getBlitOffset()); + drawTexture(matrices, offsetX, offsetY + 16 + 6 * 18, 0, 106 - 18 - 18, x_width, 99 + 77); if (this.searchField != null) { - this.searchField.render(mouseX, mouseY, partialTicks); + this.searchField.render(matrices, mouseX, mouseY, partialTicks); } } @Override public void tick() { - this.repo.setPower(this.container.isPowered()); + this.repo.setPower(this.handler.isPowered()); super.tick(); } @Override - protected void renderHoveredToolTip(int mouseX, int mouseY) { + protected void drawMouseoverTooltip(MatrixStack matrices, int mouseX, int mouseY) { final Slot slot = this.getSlot(mouseX, mouseY); - if (slot instanceof IMEFluidSlot && slot.isEnabled()) { + if (slot instanceof IMEFluidSlot && slot.doDrawHoveringEffect()) { final IMEFluidSlot fluidSlot = (IMEFluidSlot) slot; if (fluidSlot.getAEFluidStack() != null && fluidSlot.shouldRenderAsFluid()) { @@ -169,18 +168,17 @@ public class FluidTerminalScreen extends AEBaseMEScreen final String modName = Platform.getModName(Platform.getModId(fluidStack)); - final List list = new ArrayList<>(); + final List list = new ArrayList<>(); + list.add(fluidStack.getFluidStack().getName()); + list.add(new LiteralText(formattedAmount)); + list.add(new LiteralText(modName)); - list.add(fluidStack.getFluidStack().getName().getFormattedText()); - list.add(formattedAmount); - list.add(modName); - - this.renderTooltip(list, mouseX, mouseY); + this.renderTooltip(matrices, list, mouseX, mouseY); return; } } - super.renderHoveredToolTip(mouseX, mouseY); + super.drawMouseoverTooltip(matrices, mouseX, mouseY); } private > void toggleServerSetting(SettingToggleButton btn, boolean backwards) { @@ -190,29 +188,29 @@ public class FluidTerminalScreen extends AEBaseMEScreen } @Override - protected void handleMouseClick(Slot slot, int slotIdx, int mouseButton, ClickType clickType) { + protected void onMouseClick(Slot slot, int slotIdx, int mouseButton, SlotActionType clickType) { if (slot instanceof SlotFluidME) { final SlotFluidME meSlot = (SlotFluidME) slot; - if (clickType == ClickType.PICKUP) { + if (clickType == SlotActionType.PICKUP) { // TODO: Allow more options - if (mouseButton == 0 && meSlot.getHasStack()) { - this.container.setTargetStack(meSlot.getAEFluidStack()); + if (mouseButton == 0 && meSlot.hasStack()) { + this.handler.setTargetStack(meSlot.getAEFluidStack()); AELog.debug("mouse0 GUI STACK SIZE %s", meSlot.getAEFluidStack().getStackSize()); NetworkHandler.instance() - .sendToServer(new InventoryActionPacket(InventoryAction.FILL_ITEM, slot.slotNumber, 0)); + .sendToServer(new InventoryActionPacket(InventoryAction.FILL_ITEM, slot.id, 0)); } else { - this.container.setTargetStack(meSlot.getAEFluidStack()); + this.handler.setTargetStack(meSlot.getAEFluidStack()); if (meSlot.getAEFluidStack() != null) { AELog.debug("mouse1 GUI STACK SIZE %s", meSlot.getAEFluidStack().getStackSize()); } NetworkHandler.instance() - .sendToServer(new InventoryActionPacket(InventoryAction.EMPTY_ITEM, slot.slotNumber, 0)); + .sendToServer(new InventoryActionPacket(InventoryAction.EMPTY_ITEM, slot.id, 0)); } } return; } - super.handleMouseClick(slot, slotIdx, mouseButton, clickType); + super.onMouseClick(slot, slotIdx, mouseButton, clickType); } @Override @@ -234,17 +232,15 @@ public class FluidTerminalScreen extends AEBaseMEScreen @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - InputUtil.Key input = InputMappings.getInputByCode(keyCode, scanCode); - - if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(input)) { - if (AppEng.instance().isActionKey(ActionKey.TOGGLE_FOCUS, input)) { - this.searchField.setFocused2(!this.searchField.isFocused()); + if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(keyCode, scanCode)) { + if (AppEng.instance().isActionKey(ActionKey.TOGGLE_FOCUS, keyCode, scanCode)) { + this.searchField.setFocused(!this.searchField.isFocused()); return true; } if (this.searchField.isFocused()) { if (keyCode == GLFW.GLFW_KEY_ENTER) { - this.searchField.setFocused2(false); + this.searchField.setFocused(false); return true; } diff --git a/src/unported/java/appeng/fluids/client/render/FluidStackSizeRenderer.java b/src/main/java/appeng/fluids/client/render/FluidStackSizeRenderer.java similarity index 97% rename from src/unported/java/appeng/fluids/client/render/FluidStackSizeRenderer.java rename to src/main/java/appeng/fluids/client/render/FluidStackSizeRenderer.java index e7b5f91f0..84dca5ca9 100644 --- a/src/unported/java/appeng/fluids/client/render/FluidStackSizeRenderer.java +++ b/src/main/java/appeng/fluids/client/render/FluidStackSizeRenderer.java @@ -22,7 +22,7 @@ import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; -import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.font.TextRenderer; import appeng.api.storage.data.IAEFluidStack; import appeng.client.render.StackSizeRenderer; @@ -45,7 +45,7 @@ public class FluidStackSizeRenderer { private static final ISlimReadableNumberConverter SLIM_CONVERTER = ReadableNumberConverter.INSTANCE; private static final IWideReadableNumberConverter WIDE_CONVERTER = ReadableNumberConverter.INSTANCE; - public void renderStackSize(FontRenderer fontRenderer, IAEFluidStack aeStack, int xPos, int yPos) { + public void renderStackSize(TextRenderer fontRenderer, IAEFluidStack aeStack, int xPos, int yPos) { if (aeStack != null && aeStack.getStackSize() > 0) { final String stackSize = this.getToBeRenderedStackSize(aeStack.getStackSize()); StackSizeRenderer.renderSizeLabel(fontRenderer, xPos, yPos, stackSize); diff --git a/src/unported/java/appeng/fluids/container/FluidConfigurableContainer.java b/src/main/java/appeng/fluids/container/FluidConfigurableContainer.java similarity index 83% rename from src/unported/java/appeng/fluids/container/FluidConfigurableContainer.java rename to src/main/java/appeng/fluids/container/FluidConfigurableContainer.java index 2fb05754a..41b08c8db 100644 --- a/src/unported/java/appeng/fluids/container/FluidConfigurableContainer.java +++ b/src/main/java/appeng/fluids/container/FluidConfigurableContainer.java @@ -1,16 +1,18 @@ package appeng.fluids.container; +import java.math.RoundingMode; import java.util.Collections; import java.util.Map; +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.fluid.FluidAttributes; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.inventory.container.IContainerListener; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.FluidUtil; import appeng.api.config.Upgrades; import appeng.api.implementations.IUpgradeableHost; @@ -39,10 +41,12 @@ public abstract class FluidConfigurableContainer extends UpgradeableContainer im @Override protected ItemStack transferStackToContainer(ItemStack input) { - LazyOptional fsOpt = FluidUtil.getFluidContained(input); - if (fsOpt.isPresent()) { + FluidVolume fluid = FluidAttributes.EXTRACTABLE.get(input) + .attemptAnyExtraction(FluidAmount.MAX_VALUE, Simulation.ACTION); + + if (!fluid.isEmpty()) { final IAEFluidTank t = this.getFluidConfigInventory(); - final IAEFluidStack stack = AEFluidStack.fromFluidVolume(fsOpt.orElse(null)); + final IAEFluidStack stack = AEFluidStack.fromFluidVolume(fluid, RoundingMode.DOWN); for (int i = 0; i < t.getSlots(); ++i) { if (t.getFluidInSlot(i) == null && this.isValidForConfig(i, stack)) { t.setFluidInSlot(i, stack); @@ -72,7 +76,7 @@ public abstract class FluidConfigurableContainer extends UpgradeableContainer im @Override protected void standardDetectAndSendChanges() { if (Platform.isServer()) { - this.getSyncHelper().sendDiff(this.listeners); + this.getSyncHelper().sendDiff(this.getListeners()); // clear out config items that are no longer valid (eg capacity upgrade removed) final IAEFluidTank t = this.getFluidConfigInventory(); @@ -86,7 +90,7 @@ public abstract class FluidConfigurableContainer extends UpgradeableContainer im } @Override - public void addListener(IContainerListener listener) { + public void addListener(ScreenHandlerListener listener) { super.addListener(listener); this.getSyncHelper().sendFull(Collections.singleton(listener)); } diff --git a/src/unported/java/appeng/fluids/container/FluidFormationPlaneContainer.java b/src/main/java/appeng/fluids/container/FluidFormationPlaneContainer.java similarity index 98% rename from src/unported/java/appeng/fluids/container/FluidFormationPlaneContainer.java rename to src/main/java/appeng/fluids/container/FluidFormationPlaneContainer.java index 3c6865a5e..008bc78f8 100644 --- a/src/unported/java/appeng/fluids/container/FluidFormationPlaneContainer.java +++ b/src/main/java/appeng/fluids/container/FluidFormationPlaneContainer.java @@ -64,7 +64,7 @@ public class FluidFormationPlaneContainer extends FluidConfigurableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); this.checkToolbox(); this.standardDetectAndSendChanges(); diff --git a/src/unported/java/appeng/fluids/container/FluidIOContainer.java b/src/main/java/appeng/fluids/container/FluidIOContainer.java similarity index 100% rename from src/unported/java/appeng/fluids/container/FluidIOContainer.java rename to src/main/java/appeng/fluids/container/FluidIOContainer.java diff --git a/src/unported/java/appeng/fluids/container/FluidInterfaceContainer.java b/src/main/java/appeng/fluids/container/FluidInterfaceContainer.java similarity index 93% rename from src/unported/java/appeng/fluids/container/FluidInterfaceContainer.java rename to src/main/java/appeng/fluids/container/FluidInterfaceContainer.java index 6ee61ed5c..f399c4e18 100644 --- a/src/unported/java/appeng/fluids/container/FluidInterfaceContainer.java +++ b/src/main/java/appeng/fluids/container/FluidInterfaceContainer.java @@ -23,8 +23,8 @@ import java.util.Map; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.inventory.container.IContainerListener; import net.minecraft.network.PacketByteBuf; import appeng.api.config.SecurityPermissions; @@ -78,14 +78,14 @@ public class FluidInterfaceContainer extends FluidConfigurableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { - this.tankSync.sendDiff(this.listeners); + this.tankSync.sendDiff(this.getListeners()); } - super.detectAndSendChanges(); + super.sendContentUpdates(); } @Override @@ -97,7 +97,7 @@ public class FluidInterfaceContainer extends FluidConfigurableContainer { } @Override - public void addListener(IContainerListener listener) { + public void addListener(ScreenHandlerListener listener) { super.addListener(listener); this.tankSync.sendFull(Collections.singleton(listener)); } diff --git a/src/unported/java/appeng/fluids/container/FluidLevelEmitterContainer.java b/src/main/java/appeng/fluids/container/FluidLevelEmitterContainer.java similarity index 98% rename from src/unported/java/appeng/fluids/container/FluidLevelEmitterContainer.java rename to src/main/java/appeng/fluids/container/FluidLevelEmitterContainer.java index 6f5c33f64..6a8429bbb 100644 --- a/src/unported/java/appeng/fluids/container/FluidLevelEmitterContainer.java +++ b/src/main/java/appeng/fluids/container/FluidLevelEmitterContainer.java @@ -71,7 +71,7 @@ public class FluidLevelEmitterContainer extends FluidConfigurableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { diff --git a/src/unported/java/appeng/fluids/container/FluidStorageBusContainer.java b/src/main/java/appeng/fluids/container/FluidStorageBusContainer.java similarity index 98% rename from src/unported/java/appeng/fluids/container/FluidStorageBusContainer.java rename to src/main/java/appeng/fluids/container/FluidStorageBusContainer.java index a21bb06ff..1384cade8 100644 --- a/src/unported/java/appeng/fluids/container/FluidStorageBusContainer.java +++ b/src/main/java/appeng/fluids/container/FluidStorageBusContainer.java @@ -125,7 +125,7 @@ public class FluidStorageBusContainer extends FluidConfigurableContainer { } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { this.verifyPermissions(SecurityPermissions.BUILD, false); if (Platform.isServer()) { @@ -151,7 +151,7 @@ public class FluidStorageBusContainer extends FluidConfigurableContainer { for (int i = 0; i < h.getSlots(); ++i) { h.setFluidInSlot(i, null); } - this.detectAndSendChanges(); + this.sendContentUpdates(); } public void partition() { @@ -173,7 +173,7 @@ public class FluidStorageBusContainer extends FluidConfigurableContainer { h.setFluidInSlot(x, null); } } - this.detectAndSendChanges(); + this.sendContentUpdates(); } public AccessRestriction getReadWriteMode() { diff --git a/src/unported/java/appeng/fluids/container/FluidTerminalContainer.java b/src/main/java/appeng/fluids/container/FluidTerminalContainer.java similarity index 79% rename from src/unported/java/appeng/fluids/container/FluidTerminalContainer.java rename to src/main/java/appeng/fluids/container/FluidTerminalContainer.java index 5562a6984..ea903a5cd 100644 --- a/src/unported/java/appeng/fluids/container/FluidTerminalContainer.java +++ b/src/main/java/appeng/fluids/container/FluidTerminalContainer.java @@ -19,22 +19,26 @@ package appeng.fluids.container; import java.io.IOException; +import java.math.RoundingMode; import java.nio.BufferOverflowException; import javax.annotation.Nonnull; +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.fluid.FluidAttributes; +import alexiil.mc.lib.attributes.fluid.FluidExtractable; +import alexiil.mc.lib.attributes.fluid.FluidInsertable; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; +import alexiil.mc.lib.attributes.fluid.filter.ExactFluidFilter; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; +import alexiil.mc.lib.attributes.misc.Ref; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.inventory.container.IContainerListener; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; -import net.minecraftforge.fluids.capability.IFluidHandlerItem; import appeng.api.AEApi; import appeng.api.config.Actionable; @@ -170,27 +174,27 @@ public class FluidTerminalContainer extends AEBaseContainer @Override public void onListUpdate() { - for (final IContainerListener c : this.listeners) { + for (final ScreenHandlerListener c : this.getListeners()) { this.queueInventory(c); } } @Override - public void addListener(IContainerListener listener) { + public void addListener(ScreenHandlerListener listener) { super.addListener(listener); this.queueInventory(listener); } @Override - public void onContainerClosed(final PlayerEntity player) { - super.onContainerClosed(player); + public void close(final PlayerEntity player) { + super.close(player); if (this.monitor != null) { this.monitor.removeListener(this); } } - private void queueInventory(final IContainerListener c) { + private void queueInventory(final ScreenHandlerListener c) { if (Platform.isServer() && c instanceof PlayerEntity && this.monitor != null) { try { MEFluidInventoryUpdatePacket piu = new MEFluidInventoryUpdatePacket(); @@ -228,7 +232,7 @@ public class FluidTerminalContainer extends AEBaseContainer return; } if (stack != null && this.clientRequestedTargetFluid != null - && stack.getFluidStack().isFluidEqual(this.clientRequestedTargetFluid.getFluidStack())) { + && FluidVolume.areEqualExceptAmounts(stack.getFluidStack(), this.clientRequestedTargetFluid.getFluidStack())) { return; } NetworkHandler.instance().sendToServer(new TargetFluidStackPacket((AEFluidStack) stack)); @@ -245,7 +249,7 @@ public class FluidTerminalContainer extends AEBaseContainer } @Override - public void detectAndSendChanges() { + public void sendContentUpdates() { if (Platform.isServer()) { if (this.monitor != this.terminal .getInventory(AEApi.instance().storage().getStorageChannel(IFluidStorageChannel.class))) { @@ -258,7 +262,7 @@ public class FluidTerminalContainer extends AEBaseContainer if (sideLocal != sideRemote) { this.clientCM.putSetting(set, sideLocal); - for (final IContainerListener crafter : this.listeners) { + for (final ScreenHandlerListener crafter : this.getListeners()) { if (crafter instanceof ServerPlayerEntity) { NetworkHandler.instance().sendTo(new ConfigValuePacket(set.name(), sideLocal.name()), (ServerPlayerEntity) crafter); @@ -286,7 +290,7 @@ public class FluidTerminalContainer extends AEBaseContainer if (!piu.isEmpty()) { this.fluids.resetStatus(); - for (final Object c : this.listeners) { + for (final Object c : this.getListeners()) { if (c instanceof PlayerEntity) { NetworkHandler.instance().sendTo(piu, (ServerPlayerEntity) c); } @@ -298,7 +302,7 @@ public class FluidTerminalContainer extends AEBaseContainer } this.updatePowerStatus(); - super.detectAndSendChanges(); + super.sendContentUpdates(); } } @@ -309,26 +313,26 @@ public class FluidTerminalContainer extends AEBaseContainer return; } - final ItemStack held = player.inventory.getItemStack(); + final ItemStack held = player.inventory.getCursorStack(); if (held.getCount() != 1) { // only support stacksize 1 for now return; } - final LazyOptional fhOpt = FluidUtil.getFluidHandler(held); - if (!fhOpt.isPresent()) { - // only fluid handlers items - return; - } - IFluidHandlerItem fh = fhOpt.orElse(null); - if (action == InventoryAction.FILL_ITEM && this.clientRequestedTargetFluid != null) { - final IAEFluidStack stack = this.clientRequestedTargetFluid.copy(); + Ref container = new Ref<>(held); + FluidInsertable insertable = FluidAttributes.INSERTABLE.getFirstOrNull(container); + if (insertable == null) { + return; // Not a fillable item. + } // Check how much we can store in the item - stack.setStackSize(Integer.MAX_VALUE); - int amountAllowed = fh.fill(stack.getFluidStack(), FluidAction.SIMULATE); - stack.setStackSize(amountAllowed); + FluidVolume volumeAllowed = insertable.attemptInsertion(this.clientRequestedTargetFluid.getFluidStack().withAmount(FluidAmount.MAX_VALUE), Simulation.SIMULATE); + + final IAEFluidStack stack = AEFluidStack.fromFluidVolume(this.clientRequestedTargetFluid.getFluidStack().withAmount(volumeAllowed.amount()), RoundingMode.DOWN); + if (stack == null) { + return; // Might be nothing allowed... + } // Check if we can pull out of the system final IAEFluidStack canPull = Platform.poweredExtraction(this.getPowerSource(), this.monitor, stack, @@ -338,13 +342,13 @@ public class FluidTerminalContainer extends AEBaseContainer } // How much could fit into the container - final int canFill = fh.fill(canPull.getFluidStack(), FluidAction.SIMULATE); - if (canFill == 0) { + volumeAllowed = insertable.attemptInsertion(canPull.getFluidStack(), Simulation.SIMULATE); + if (volumeAllowed.isEmpty()) { return; } // Now actually pull out of the system - stack.setStackSize(canFill); + stack.setStackSize(volumeAllowed.amount().asLong(1000, RoundingMode.DOWN)); final IAEFluidStack pulled = Platform.poweredExtraction(this.getPowerSource(), this.monitor, stack, this.getActionSource()); if (pulled == null || pulled.getStackSize() < 1) { @@ -354,50 +358,60 @@ public class FluidTerminalContainer extends AEBaseContainer } // Actually fill - final int used = fh.fill(pulled.getFluidStack(), FluidAction.EXECUTE); + final FluidVolume reallyFilled = insertable.attemptInsertion(pulled.getFluidStack(), Simulation.ACTION); - if (used != canFill) { + if (!reallyFilled.amount().equals(volumeAllowed.amount())) { AELog.error("Fluid item [%s] reported a different possible amount than it actually accepted.", held.getName()); } - player.inventory.setItemStack(fh.getContainer()); + player.inventory.setCursorStack(container.get()); this.updateHeld(player); } else if (action == InventoryAction.EMPTY_ITEM) { + Ref container = new Ref<>(held); + FluidExtractable extractable = FluidAttributes.EXTRACTABLE.getFirstOrNull(container); + if (extractable == null) { + return; // Not a drainable item. + } + // See how much we can drain from the item - final FluidVolume extract = fh.drain(Integer.MAX_VALUE, FluidAction.SIMULATE); - if (extract.isEmpty() || extract.getAmount() < 1) { - return; + FluidVolume extract = extractable.attemptAnyExtraction(FluidAmount.MAX_VALUE, Simulation.SIMULATE); + AEFluidStack aeStack = AEFluidStack.fromFluidVolume(extract, RoundingMode.DOWN); + if (aeStack == null || aeStack.getStackSize() == 0) { + return; // Not enough liquid in the container } // Check if we can push into the system final IAEFluidStack notStorable = Platform.poweredInsert(this.getPowerSource(), this.monitor, - AEFluidStack.fromFluidVolume(extract), this.getActionSource(), Actionable.SIMULATE); + aeStack, this.getActionSource(), Actionable.SIMULATE); + // Adjust the amount if needed if (notStorable != null && notStorable.getStackSize() > 0) { - final int toStore = (int) (extract.getAmount() - notStorable.getStackSize()); - final FluidVolume storable = fh.drain(toStore, FluidAction.SIMULATE); + final FluidAmount toStore = aeStack.getAmount().sub(notStorable.getAmount()); + extract = extractable.attemptExtraction(new ExactFluidFilter(aeStack.getFluid()), toStore, Simulation.SIMULATE); - if (storable.isEmpty() || storable.getAmount() == 0) { + if (extract.isEmpty()) { return; - } else { - extract.setAmount(storable.getAmount()); } } // Actually drain - final FluidVolume drained = fh.drain(extract, FluidAction.EXECUTE); - extract.setAmount(drained.getAmount()); + FluidVolume drained = extractable.extract(extract.getFluidKey(), extract.amount()); + aeStack = AEFluidStack.fromFluidVolume(drained, RoundingMode.DOWN); + if (aeStack == null) { + // TODO WARN + return; // I guess the extractable decided to return a different amount upon execution + } final IAEFluidStack notInserted = Platform.poweredInsert(this.getPowerSource(), this.monitor, - AEFluidStack.fromFluidVolume(extract), this.getActionSource()); + aeStack, this.getActionSource()); if (notInserted != null && notInserted.getStackSize() > 0) { AELog.error("Fluid item [%s] reported a different possible amount to drain than it actually provided.", held.getName()); } - player.inventory.setItemStack(fh.getContainer()); + player.inventory.setCursorStack(container.get()); this.updateHeld(player); } } diff --git a/src/unported/java/appeng/fluids/container/IFluidSyncContainer.java b/src/main/java/appeng/fluids/container/IFluidSyncContainer.java similarity index 100% rename from src/unported/java/appeng/fluids/container/IFluidSyncContainer.java rename to src/main/java/appeng/fluids/container/IFluidSyncContainer.java diff --git a/src/unported/java/appeng/fluids/container/slots/IMEFluidSlot.java b/src/main/java/appeng/fluids/container/slots/IMEFluidSlot.java similarity index 100% rename from src/unported/java/appeng/fluids/container/slots/IMEFluidSlot.java rename to src/main/java/appeng/fluids/container/slots/IMEFluidSlot.java diff --git a/src/unported/java/appeng/fluids/helper/DualityFluidInterface.java b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java similarity index 95% rename from src/unported/java/appeng/fluids/helper/DualityFluidInterface.java rename to src/main/java/appeng/fluids/helper/DualityFluidInterface.java index e246fddb8..3c3d6125c 100644 --- a/src/unported/java/appeng/fluids/helper/DualityFluidInterface.java +++ b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java @@ -20,15 +20,11 @@ package appeng.fluids.helper; import java.util.Optional; +import alexiil.mc.lib.attributes.AttributeList; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.util.math.Direction; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.FluidAttributes; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import appeng.api.AEApi; import appeng.api.config.Actionable; @@ -57,7 +53,6 @@ import appeng.api.util.AECableType; import appeng.api.util.AEPartLocation; import appeng.api.util.DimensionalCoord; import appeng.api.util.IConfigManager; -import appeng.capabilities.Capabilities; import appeng.core.settings.TickRates; import appeng.fluids.util.AEFluidInventory; import appeng.fluids.util.IAEFluidInventory; @@ -75,7 +70,7 @@ import appeng.util.Platform; public class DualityFluidInterface implements IGridTickable, IStorageMonitorable, IAEFluidInventory, IUpgradeableHost, IConfigManagerHost { public static final int NUMBER_OF_TANKS = 6; - public static final int TANK_CAPACITY = FluidAttributes.BUCKET_VOLUME * 4; + public static final int TANK_CAPACITY = 1000 * 4; private final ConfigManager cm = new ConfigManager(this); private final AENetworkProxy gridProxy; @@ -204,16 +199,6 @@ public class DualityFluidInterface return new DimensionalCoord(this.iHost.getBlockEntity()); } - @SuppressWarnings("unchecked") - public LazyOptional getCapability(Capability capabilityClass, Direction facing) { - if (capabilityClass == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { - return (LazyOptional) LazyOptional.of(() -> this.tanks); - } else if (capabilityClass == Capabilities.STORAGE_MONITORABLE_ACCESSOR) { - return (LazyOptional) LazyOptional.of(() -> this.accessor); - } - return null; - } - private boolean hasConfig() { return this.hasConfig; } @@ -451,7 +436,7 @@ public class DualityFluidInterface private class InterfaceInventory extends MEMonitorIFluidHandler { InterfaceInventory(final DualityFluidInterface tileInterface) { - super(tileInterface.tanks); + super(tileInterface.tanks.getGroupedInv()); this.setActionSource(new MachineSource(tileInterface.iHost)); } @@ -508,4 +493,10 @@ public class DualityFluidInterface @Override public void updateSetting(IConfigManager manager, Settings settingName, Enum newValue) { } + + public void addAllAttributes(AttributeList to) { + to.offer(this.tanks); + to.offer(this.accessor); + } + } diff --git a/src/main/java/appeng/fluids/helper/FluidCellConfig.java b/src/main/java/appeng/fluids/helper/FluidCellConfig.java new file mode 100644 index 000000000..f3fa231b6 --- /dev/null +++ b/src/main/java/appeng/fluids/helper/FluidCellConfig.java @@ -0,0 +1,88 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2018, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.fluids.helper; + +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.fluid.FluidAttributes; +import alexiil.mc.lib.attributes.fluid.FluidExtractable; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; +import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; +import alexiil.mc.lib.attributes.item.filter.ItemFilter; +import appeng.api.AEApi; +import appeng.fluids.items.FluidDummyItem; +import appeng.items.contents.CellConfig; +import net.minecraft.item.ItemStack; + +/** + * @author DrummerMC + * @version rv6 - 2018-01-22 + * @since rv6 2018-01-22 + */ +public class FluidCellConfig extends CellConfig { + public FluidCellConfig(ItemStack is) { + super(is); + } + + private static ItemStack tryConvertToFluidDummy(ItemStack stack) { + if (stack.isEmpty() || stack.getItem() instanceof FluidDummyItem) { + return stack; + } + + // Try to auto-convert any fluid-containing item into a dummy item before insertion + FluidExtractable fluidExtractable = FluidAttributes.EXTRACTABLE.getFirstOrNull(stack); + if (fluidExtractable == null) { + return ItemStack.EMPTY; + } + + FluidVolume fluid = fluidExtractable.attemptAnyExtraction(FluidAmount.MAX_VALUE, Simulation.SIMULATE); + if (fluid.isEmpty()) { + return ItemStack.EMPTY; + } + + fluid = fluid.withAmount(FluidAmount.BUCKET); + + ItemStack is = AEApi.instance().definitions().items().dummyFluidItem().stack(1); + FluidDummyItem item = (FluidDummyItem) is.getItem(); + item.setFluidStack(is, fluid); + return is; + } + + @Override + public ItemStack attemptInsertion(ItemStack stack, Simulation simulation) { + stack = tryConvertToFluidDummy(stack); + return super.attemptInsertion(stack, simulation); + } + + @Override + public boolean setInvStack(int slot, ItemStack to, Simulation simulation) { + to = tryConvertToFluidDummy(to); + return super.setInvStack(slot, to, simulation); + } + + @Override + public ItemFilter getFilterForSlot(int slot) { + return stack -> !tryConvertToFluidDummy(stack).isEmpty(); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + return !tryConvertToFluidDummy(stack).isEmpty(); + } + +} diff --git a/src/unported/java/appeng/fluids/helper/FluidSyncHelper.java b/src/main/java/appeng/fluids/helper/FluidSyncHelper.java similarity index 87% rename from src/unported/java/appeng/fluids/helper/FluidSyncHelper.java rename to src/main/java/appeng/fluids/helper/FluidSyncHelper.java index 64dc32f50..285df742e 100644 --- a/src/unported/java/appeng/fluids/helper/FluidSyncHelper.java +++ b/src/main/java/appeng/fluids/helper/FluidSyncHelper.java @@ -5,8 +5,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; +import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.IContainerListener; import appeng.api.storage.data.IAEFluidStack; import appeng.core.sync.network.NetworkHandler; @@ -25,11 +25,11 @@ public class FluidSyncHelper { this.idOffset = idOffset; } - public void sendFull(final Iterable listeners) { + public void sendFull(final Iterable listeners) { this.sendDiffMap(this.createDiffMap(true), listeners); } - public void sendDiff(final Iterable listeners) { + public void sendDiff(final Iterable listeners) { this.sendDiffMap(this.createDiffMap(false), listeners); } @@ -41,12 +41,12 @@ public class FluidSyncHelper { } } - private void sendDiffMap(final Map data, final Iterable listeners) { + private void sendDiffMap(final Map data, final Iterable listeners) { if (data.isEmpty()) { return; } - for (final IContainerListener l : listeners) { + for (final ScreenHandlerListener l : listeners) { if (l instanceof ServerPlayerEntity) { NetworkHandler.instance().sendTo(new FluidSlotPacket(data), (ServerPlayerEntity) l); } diff --git a/src/main/java/appeng/fluids/helper/GroupedFluidInvCache.java b/src/main/java/appeng/fluids/helper/GroupedFluidInvCache.java new file mode 100644 index 000000000..d252d5a60 --- /dev/null +++ b/src/main/java/appeng/fluids/helper/GroupedFluidInvCache.java @@ -0,0 +1,84 @@ +package appeng.fluids.helper; + +import alexiil.mc.lib.attributes.fluid.GroupedFluidInv; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; +import alexiil.mc.lib.attributes.fluid.volume.FluidKey; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IItemList; +import appeng.fluids.util.AEFluidStack; + +import java.math.RoundingMode; +import java.util.*; + +public class GroupedFluidInvCache { + + private final GroupedFluidInv inventory; + + private final Map memory = new HashMap<>(); + + public GroupedFluidInvCache(GroupedFluidInv inventory) { + this.inventory = inventory; + } + + public IItemList getAvailable(IItemList out) { + for (Map.Entry entry : memory.entrySet()) { + out.add(entry.getValue()); + } + return out; + } + + public List detectChanges() { + final List changes = new ArrayList<>(); + + Set storedFluids = inventory.getStoredFluids(); + for (FluidKey storedFluid : storedFluids) { + IAEFluidStack old = this.memory.get(storedFluid); + + FluidAmount newAmount = inventory.getAmount_F(storedFluid); + FluidAmount oldAmount = old == null ? FluidAmount.ZERO : old.getAmount(); + + if (!newAmount.equals(oldAmount)) { + AEFluidStack newStack = AEFluidStack.fromFluidVolume(storedFluid.withAmount(newAmount), RoundingMode.DOWN); + + if (old != null) { + old = old.copy(); + old.setStackSize(-old.getStackSize()); + changes.add(old); + } + + if (newStack != null) { + this.memory.put(storedFluid, newStack); + changes.add(newStack); + } else { + this.memory.remove(storedFluid); + } + } + } + + // detect dropped items; should fix non IISided Inventory Changes. + Set toRemove = null; + for (final Map.Entry entry : memory.entrySet()) { + if (storedFluids.contains(entry.getKey())) { + continue; // Still stored + } + + if (toRemove == null) { + toRemove = new HashSet<>(); + } + toRemove.add(entry.getKey()); + + final IAEFluidStack a = entry.getValue().copy(); + a.setStackSize(-a.getStackSize()); + changes.add(a); + } + // Now clean up if any removed entries were found + if (toRemove != null) { + for (FluidKey fluidKey : toRemove) { + memory.remove(fluidKey); + } + } + + return changes; + } + +} diff --git a/src/unported/java/appeng/fluids/helper/IFluidInterfaceHost.java b/src/main/java/appeng/fluids/helper/IFluidInterfaceHost.java similarity index 100% rename from src/unported/java/appeng/fluids/helper/IFluidInterfaceHost.java rename to src/main/java/appeng/fluids/helper/IFluidInterfaceHost.java diff --git a/src/unported/java/appeng/fluids/items/BasicFluidStorageCell.java b/src/main/java/appeng/fluids/items/BasicFluidStorageCell.java similarity index 96% rename from src/unported/java/appeng/fluids/items/BasicFluidStorageCell.java rename to src/main/java/appeng/fluids/items/BasicFluidStorageCell.java index 16759c00a..7aee0ec8a 100644 --- a/src/unported/java/appeng/fluids/items/BasicFluidStorageCell.java +++ b/src/main/java/appeng/fluids/items/BasicFluidStorageCell.java @@ -41,7 +41,7 @@ public final class BasicFluidStorageCell extends AbstractStorageCell tag = FluidTags.getCollection().getOrCreate(TAG_BLACKLIST); + Tag tag = FluidTags.getContainer().getOrCreate(TAG_BLACKLIST); return fluid.isIn(tag); } diff --git a/src/unported/java/appeng/fluids/parts/FluidExportBusPart.java b/src/main/java/appeng/fluids/parts/FluidExportBusPart.java similarity index 73% rename from src/unported/java/appeng/fluids/parts/FluidExportBusPart.java rename to src/main/java/appeng/fluids/parts/FluidExportBusPart.java index 277ab1e95..95c790747 100644 --- a/src/unported/java/appeng/fluids/parts/FluidExportBusPart.java +++ b/src/main/java/appeng/fluids/parts/FluidExportBusPart.java @@ -20,13 +20,14 @@ package appeng.fluids.parts; import javax.annotation.Nonnull; +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.fluid.FluidAttributes; +import alexiil.mc.lib.attributes.fluid.FluidInsertable; +import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; +import appeng.attributes.MEAttributes; import net.minecraft.item.ItemStack; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.Identifier; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import appeng.api.config.Actionable; import appeng.api.config.FuzzyMode; @@ -49,6 +50,8 @@ import appeng.me.GridAccessException; import appeng.me.helpers.MachineSource; import appeng.parts.PartModel; +import java.math.RoundingMode; + /** * @author BrockWS * @version rv6 - 30/04/2018 @@ -99,42 +102,40 @@ public class FluidExportBusPart extends SharedFluidBusPart { return TickRateModulation.IDLE; } - final BlockEntity te = this.getConnectedTE(); - LazyOptional fhOpt = LazyOptional.empty(); - if (te != null) { - fhOpt = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, - this.getSide().getFacing().getOpposite()); - } - if (fhOpt.isPresent()) { + FluidInsertable insertable = MEAttributes.getAttributeInFrontOfPart(FluidAttributes.INSERTABLE, this); + + if (insertable != null) { try { - final IFluidHandler fh = fhOpt.orElse(null); final IMEMonitor inv = this.getProxy().getStorage().getInventory(this.getChannel()); - if (fh != null) { - for (int i = 0; i < this.getConfig().getSlots(); i++) { - IAEFluidStack fluid = this.getConfig().getFluidInSlot(i); - if (fluid != null) { - final IAEFluidStack toExtract = fluid.copy(); + for (int i = 0; i < this.getConfig().getSlots(); i++) { + IAEFluidStack fluid = this.getConfig().getFluidInSlot(i); + if (fluid != null) { + final IAEFluidStack toExtract = fluid.copy(); - toExtract.setStackSize(this.calculateAmountToSend()); + toExtract.setStackSize(this.calculateAmountToSend()); - final IAEFluidStack out = inv.extractItems(toExtract, Actionable.SIMULATE, this.source); + final IAEFluidStack out = inv.extractItems(toExtract, Actionable.SIMULATE, this.source); - if (out != null) { - int wasInserted = fh.fill(out.getFluidStack(), FluidAction.EXECUTE); + if (out != null) { + FluidVolume toInsert = out.getFluidStack(); + FluidVolume remainder = insertable.attemptInsertion(toInsert, Simulation.ACTION); - if (wasInserted > 0) { - toExtract.setStackSize(wasInserted); - inv.extractItems(toExtract, Actionable.MODULATE, this.source); + if (remainder.getAmount_F().isLessThan(toInsert.getAmount_F())) { + // This will loose some liquid if the target accepts 1/1001'th bucket of fluid, + // we'll deduct 1/1000th from storage. + long remainderMillibuckets = remainder.getAmount_F().asInt(1000, RoundingMode.DOWN); - return TickRateModulation.FASTER; - } + toExtract.setStackSize(remainderMillibuckets); + inv.extractItems(toExtract, Actionable.MODULATE, this.source); + + return TickRateModulation.FASTER; } } } - - return TickRateModulation.SLOWER; } + + return TickRateModulation.SLOWER; } catch (GridAccessException e) { // Ignore } diff --git a/src/unported/java/appeng/fluids/parts/FluidFormationPlanePart.java b/src/main/java/appeng/fluids/parts/FluidFormationPlanePart.java similarity index 64% rename from src/unported/java/appeng/fluids/parts/FluidFormationPlanePart.java rename to src/main/java/appeng/fluids/parts/FluidFormationPlanePart.java index 5fe753444..ef56f9465 100644 --- a/src/unported/java/appeng/fluids/parts/FluidFormationPlanePart.java +++ b/src/main/java/appeng/fluids/parts/FluidFormationPlanePart.java @@ -1,32 +1,9 @@ package appeng.fluids.parts; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; - +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraft.server.world.ServerWorld; - -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.FakePlayerFactory; -import net.minecraftforge.fluids.FluidAttributes; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.templates.FluidTank; - import appeng.api.AEApi; import appeng.api.config.AccessRestriction; import appeng.api.config.Actionable; @@ -48,16 +25,38 @@ import appeng.container.ContainerLocator; import appeng.container.ContainerOpener; import appeng.fluids.container.FluidFormationPlaneContainer; import appeng.fluids.util.AEFluidInventory; +import appeng.fluids.util.AEFluidStack; import appeng.fluids.util.IAEFluidInventory; import appeng.fluids.util.IAEFluidTank; import appeng.items.parts.PartModels; import appeng.me.GridAccessException; import appeng.me.storage.MEInventoryHandler; import appeng.parts.automation.AbstractFormationPlanePart; -import appeng.parts.automation.PlaneModelData; import appeng.parts.automation.PlaneModels; import appeng.util.Platform; import appeng.util.prioritylist.PrecisePriorityList; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.FluidBlock; +import net.minecraft.block.FluidFillable; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; + +import javax.annotation.Nonnull; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class FluidFormationPlanePart extends AbstractFormationPlanePart implements IAEFluidInventory { private static final PlaneModels MODELS = new PlaneModels("part/fluid_formation_plane", @@ -94,7 +93,7 @@ public class FluidFormationPlanePart extends AbstractFormationPlanePart(priorityList)); + this.myHandler.setPartitionList(new PrecisePriorityList<>(priorityList)); try { this.getProxy().getGrid().postEvent(new MENetworkCellArrayUpdate()); @@ -105,7 +104,7 @@ public class FluidFormationPlanePart extends AbstractFormationPlanePart, IBaseMonitor, ITickingMonitor { private final Map, Object> listeners = new HashMap<>(); private IActionSource source; - private final IFluidHandler fluidHandler; + private final GroupedFluidInv fluidHandler; private final IGridProxyable proxyable; - private final FluidHandlerAdapter.InventoryCache cache; + private final GroupedFluidInvCache cache; - FluidHandlerAdapter(IFluidHandler fluidHandler, IGridProxyable proxy) { + FluidHandlerAdapter(GroupedFluidInv fluidHandler, IGridProxyable proxy) { this.fluidHandler = fluidHandler; this.proxyable = proxy; - this.cache = new FluidHandlerAdapter.InventoryCache(this.fluidHandler); + this.cache = new GroupedFluidInvCache(this.fluidHandler); + } + + private Simulation getFluidAction(Actionable actionable) { + return actionable == Actionable.MODULATE ? Simulation.ACTION : Simulation.SIMULATE; } @Override @@ -70,9 +76,8 @@ public class FluidHandlerAdapter implements IMEInventory, IBaseMo FluidVolume fluidStack = input.getFluidStack(); // Insert - int wasFillled = this.fluidHandler.fill(fluidStack, type.getFluidAction()); - int remaining = fluidStack.getAmount() - wasFillled; - if (fluidStack.getAmount() == remaining) { + FluidVolume excess = this.fluidHandler.attemptInsertion(fluidStack, getFluidAction(type)); + if (excess.amount().equals(fluidStack.amount())) { // The stack was unmodified, target tank is full return input; } @@ -85,17 +90,15 @@ public class FluidHandlerAdapter implements IMEInventory, IBaseMo } } - fluidStack.setAmount(remaining); - - return AEFluidStack.fromFluidVolume(fluidStack); + return AEFluidStack.fromFluidVolume(excess, RoundingMode.DOWN); } @Override public IAEFluidStack extractItems(IAEFluidStack request, Actionable mode, IActionSource src) { - FluidVolume requestedFluidStack = request.getFluidStack(); + FluidFilter filter = new ExactFluidFilter(request.getFluid()); // Drain the fluid from the tank - FluidVolume gathered = this.fluidHandler.drain(requestedFluidStack, mode.getFluidAction()); + FluidVolume gathered = this.fluidHandler.attemptExtraction(filter, request.getAmount(), getFluidAction(mode)); if (gathered.isEmpty()) { // If nothing was pulled from the tank, return null return null; @@ -108,12 +111,12 @@ public class FluidHandlerAdapter implements IMEInventory, IBaseMo // meh } } - return AEFluidStack.fromFluidVolume(gathered); + return AEFluidStack.fromFluidVolume(gathered, RoundingMode.DOWN); } @Override public TickRateModulation onTick() { - List changes = this.cache.update(); + List changes = this.cache.detectChanges(); if (!changes.isEmpty()) { this.postDifference(changes); return TickRateModulation.URGENT; @@ -124,7 +127,7 @@ public class FluidHandlerAdapter implements IMEInventory, IBaseMo @Override public IItemList getAvailableItems(IItemList out) { - return this.cache.getAvailableItems(out); + return this.cache.getAvailable(out); } @Override @@ -161,96 +164,4 @@ public class FluidHandlerAdapter implements IMEInventory, IBaseMo } } - private static class InventoryCache { - private IAEFluidStack[] cachedAeStacks = new IAEFluidStack[0]; - private final IFluidHandler fluidHandler; - - public InventoryCache(IFluidHandler fluidHandler) { - this.fluidHandler = fluidHandler; - } - - public List update() { - final List changes = new ArrayList<>(); - final int slots = fluidHandler.getTanks(); - - // Make room for new slots - if (slots > this.cachedAeStacks.length) { - this.cachedAeStacks = Arrays.copyOf(this.cachedAeStacks, slots); - } - - for (int slot = 0; slot < slots; slot++) { - // Save the old stuff - final IAEFluidStack oldAEFS = this.cachedAeStacks[slot]; - final FluidVolume newFS = fluidHandler.getFluidInTank(slot); - - this.handlePossibleSlotChanges(slot, oldAEFS, newFS, changes); - } - - // Handle cases where the number of slots actually is lower now than before - if (slots < this.cachedAeStacks.length) { - for (int slot = slots; slot < this.cachedAeStacks.length; slot++) { - final IAEFluidStack aeStack = this.cachedAeStacks[slot]; - - if (aeStack != null) { - final IAEFluidStack a = aeStack.copy(); - a.setStackSize(-a.getStackSize()); - changes.add(a); - } - } - - this.cachedAeStacks = Arrays.copyOf(this.cachedAeStacks, slots); - } - return changes; - } - - public IItemList getAvailableItems(IItemList out) { - Arrays.stream(this.cachedAeStacks).forEach(out::add); - return out; - } - - private void handlePossibleSlotChanges(int slot, IAEFluidStack oldAeFS, FluidVolume newFS, - List changes) { - if (oldAeFS != null && oldAeFS.getFluidStack().isFluidEqual(newFS)) { - this.handleStackSizeChanged(slot, oldAeFS, newFS, changes); - } else { - this.handleFluidChanged(slot, oldAeFS, newFS, changes); - } - } - - private void handleStackSizeChanged(int slot, IAEFluidStack oldAeFS, FluidVolume newFS, - List changes) { - // Still the same fluid, but amount might have changed - final long diff = newFS.getAmount() - oldAeFS.getStackSize(); - - if (diff != 0) { - final IAEFluidStack stack = oldAeFS.copy(); - stack.setStackSize(newFS.getAmount()); - - this.cachedAeStacks[slot] = stack; - - final IAEFluidStack a = stack.copy(); - a.setStackSize(diff); - changes.add(a); - } - } - - private void handleFluidChanged(int slot, IAEFluidStack oldAeFS, FluidVolume newFS, - List changes) { - // Completely different fluid - this.cachedAeStacks[slot] = AEFluidStack.fromFluidVolume(newFS); - - // If we had a stack previously in this slot, notify the network about its - // disappearance - if (oldAeFS != null) { - oldAeFS.setStackSize(-oldAeFS.getStackSize()); - changes.add(oldAeFS); - } - - // Notify the network about the new stack. Note that this is null if newFS was - // null - if (this.cachedAeStacks[slot] != null) { - changes.add(this.cachedAeStacks[slot]); - } - } - } } diff --git a/src/unported/java/appeng/fluids/parts/FluidImportBusPart.java b/src/main/java/appeng/fluids/parts/FluidImportBusPart.java similarity index 62% rename from src/unported/java/appeng/fluids/parts/FluidImportBusPart.java rename to src/main/java/appeng/fluids/parts/FluidImportBusPart.java index e1170fc3a..b73b8977b 100644 --- a/src/unported/java/appeng/fluids/parts/FluidImportBusPart.java +++ b/src/main/java/appeng/fluids/parts/FluidImportBusPart.java @@ -18,23 +18,15 @@ package appeng.fluids.parts; -import javax.annotation.Nonnull; - +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.fluid.FluidAttributes; +import alexiil.mc.lib.attributes.fluid.FluidExtractable; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; +import alexiil.mc.lib.attributes.fluid.filter.ConstantFluidFilter; +import alexiil.mc.lib.attributes.fluid.filter.FluidFilter; +import alexiil.mc.lib.attributes.fluid.volume.FluidKey; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Identifier; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; - -import appeng.api.config.Actionable; -import appeng.api.config.FuzzyMode; -import appeng.api.config.RedstoneMode; -import appeng.api.config.SchedulingMode; -import appeng.api.config.Settings; -import appeng.api.config.YesNo; +import appeng.api.config.*; import appeng.api.networking.IGridNode; import appeng.api.networking.security.IActionSource; import appeng.api.networking.ticking.TickRateModulation; @@ -42,6 +34,7 @@ import appeng.api.networking.ticking.TickingRequest; import appeng.api.parts.IPartModel; import appeng.api.storage.IMEMonitor; import appeng.api.storage.data.IAEFluidStack; +import appeng.attributes.MEAttributes; import appeng.core.AppEng; import appeng.core.settings.TickRates; import appeng.fluids.util.AEFluidStack; @@ -49,6 +42,13 @@ import appeng.items.parts.PartModels; import appeng.me.GridAccessException; import appeng.me.helpers.MachineSource; import appeng.parts.PartModel; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; + +import javax.annotation.Nonnull; +import java.math.RoundingMode; +import java.util.HashSet; +import java.util.Set; /** * @author BrockWS @@ -95,40 +95,39 @@ public class FluidImportBusPart extends SharedFluidBusPart { return TickRateModulation.IDLE; } - final BlockEntity te = this.getConnectedTE(); - LazyOptional fhOpt = LazyOptional.empty(); - if (te != null) { - te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, this.getSide().getFacing().getOpposite()); - } - if (fhOpt.isPresent()) { + FluidExtractable extractable = MEAttributes.getAttributeInFrontOfPart(FluidAttributes.EXTRACTABLE, this); + if (extractable != null) { try { - final IFluidHandler fh = fhOpt.orElse(null); - final IMEMonitor inv = this.getProxy().getStorage().getInventory(this.getChannel()); + IMEMonitor inv = this.getProxy().getStorage().getInventory(this.getChannel()); - if (fh != null) { - final FluidVolume fluidStack = fh.drain(this.calculateAmountToSend(), FluidAction.SIMULATE); + // Ask the target for fluid matching our filter + FluidFilter filter = getFilter(); + FluidVolume extractableVolume = extractable.attemptExtraction(filter, + FluidAmount.of(this.calculateAmountToSend(), 1000), Simulation.SIMULATE); - if (this.filterEnabled() && !this.isInFilter(fluidStack)) { - return TickRateModulation.SLOWER; - } - - final AEFluidStack aeFluidStack = AEFluidStack.fromFluidVolume(fluidStack); - - if (aeFluidStack != null) { - final IAEFluidStack notInserted = inv.injectItems(aeFluidStack, Actionable.MODULATE, - this.source); - - if (notInserted != null && notInserted.getStackSize() > 0) { - aeFluidStack.decStackSize(notInserted.getStackSize()); - } - - fh.drain(aeFluidStack.getFluidStack(), FluidAction.EXECUTE); - - return TickRateModulation.FASTER; - } - - return TickRateModulation.IDLE; + // Also double check that it's valid w.r.t. our filter + if (extractableVolume.isEmpty() || !filter.matches(extractableVolume.fluidKey)) { + return TickRateModulation.SLOWER; } + + // Round down when inserting fluids into the system to avoid duplication + final AEFluidStack aeFluidStack = AEFluidStack.fromFluidVolume(extractableVolume, RoundingMode.DOWN); + + if (aeFluidStack != null) { + final IAEFluidStack notInserted = inv.injectItems(aeFluidStack, Actionable.MODULATE, + this.source); + + if (notInserted != null && notInserted.getStackSize() > 0) { + aeFluidStack.decStackSize(notInserted.getStackSize()); + } + + // Now we need to actually drain the fluid, and use the actual amount we just inserted + extractable.extract(filter, aeFluidStack.getAmount()); // FIXME: If there's a mismatch here, log? + + return TickRateModulation.FASTER; + } + + return TickRateModulation.IDLE; } catch (GridAccessException e) { e.printStackTrace(); } @@ -142,24 +141,20 @@ public class FluidImportBusPart extends SharedFluidBusPart { return this.getProxy().isActive(); } - private boolean isInFilter(FluidVolume fluid) { - for (int i = 0; i < this.getConfig().getSlots(); i++) { - final IAEFluidStack stack = this.getConfig().getFluidInSlot(i); - if (stack != null && stack.equals(fluid)) { - return true; - } - } - return false; - } + // Returns a filter for fluid extraction based on the configured filter for this bus + private FluidFilter getFilter() { + Set allowedFluids = null; - private boolean filterEnabled() { for (int i = 0; i < this.getConfig().getSlots(); i++) { final IAEFluidStack stack = this.getConfig().getFluidInSlot(i); if (stack != null) { - return true; + if (allowedFluids == null) { + allowedFluids = new HashSet<>(); + } + allowedFluids.add(stack.getFluid()); } } - return false; + return allowedFluids == null ? ConstantFluidFilter.ANYTHING : allowedFluids::contains; } @Override diff --git a/src/unported/java/appeng/fluids/parts/FluidInterfacePart.java b/src/main/java/appeng/fluids/parts/FluidInterfacePart.java similarity index 95% rename from src/unported/java/appeng/fluids/parts/FluidInterfacePart.java rename to src/main/java/appeng/fluids/parts/FluidInterfacePart.java index 0e9903e0f..f0878a639 100644 --- a/src/unported/java/appeng/fluids/parts/FluidInterfacePart.java +++ b/src/main/java/appeng/fluids/parts/FluidInterfacePart.java @@ -20,6 +20,7 @@ package appeng.fluids.parts; import java.util.EnumSet; +import alexiil.mc.lib.attributes.AttributeList; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; @@ -29,8 +30,6 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.util.math.Vec3d; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; import alexiil.mc.lib.attributes.item.FixedItemInv; import appeng.api.AEApi; @@ -57,7 +56,7 @@ import appeng.fluids.container.FluidInterfaceContainer; import appeng.fluids.helper.DualityFluidInterface; import appeng.fluids.helper.IFluidInterfaceHost; import appeng.helpers.IPriorityHost; -import appeng.helpers.Reflected; + import appeng.items.parts.PartModels; import appeng.parts.BasicStatePart; import appeng.parts.PartModel; @@ -81,7 +80,6 @@ public class FluidInterfacePart extends BasicStatePart private final DualityFluidInterface duality = new DualityFluidInterface(this.getProxy(), this); - @Reflected public FluidInterfacePart(final ItemStack is) { super(is); } @@ -185,8 +183,9 @@ public class FluidInterfacePart extends BasicStatePart } @Override - public LazyOptional getCapability(Capability capabilityClass) { - return this.duality.getCapability(capabilityClass, this.getSide().getFacing()); + public void addAllAttributes(AttributeList to) { + super.addAllAttributes(to); + this.duality.addAllAttributes(to); } @Override diff --git a/src/unported/java/appeng/fluids/parts/FluidLevelEmitterPart.java b/src/main/java/appeng/fluids/parts/FluidLevelEmitterPart.java similarity index 99% rename from src/unported/java/appeng/fluids/parts/FluidLevelEmitterPart.java rename to src/main/java/appeng/fluids/parts/FluidLevelEmitterPart.java index dfd879e5b..a87228ac2 100644 --- a/src/unported/java/appeng/fluids/parts/FluidLevelEmitterPart.java +++ b/src/main/java/appeng/fluids/parts/FluidLevelEmitterPart.java @@ -275,7 +275,7 @@ public class FluidLevelEmitterPart extends UpgradeablePart final double d1 = d.yOffset * 0.45F + (r.nextFloat() - 0.5F) * 0.2D; final double d2 = d.zOffset * 0.45F + (r.nextFloat() - 0.5F) * 0.2D; - world.addParticle(DustParticleEffect.REDSTONE_DUST, 0.5 + pos.getX() + d0, 0.5 + pos.getY() + d1, + world.addParticle(DustParticleEffect.RED, 0.5 + pos.getX() + d0, 0.5 + pos.getY() + d1, 0.5 + pos.getZ() + d2, 0.0D, 0.0D, 0.0D); } } diff --git a/src/unported/java/appeng/fluids/parts/FluidStorageBusPart.java b/src/main/java/appeng/fluids/parts/FluidStorageBusPart.java similarity index 92% rename from src/unported/java/appeng/fluids/parts/FluidStorageBusPart.java rename to src/main/java/appeng/fluids/parts/FluidStorageBusPart.java index 04aebe33d..ea3f06cd3 100644 --- a/src/unported/java/appeng/fluids/parts/FluidStorageBusPart.java +++ b/src/main/java/appeng/fluids/parts/FluidStorageBusPart.java @@ -24,6 +24,9 @@ import java.util.Objects; import javax.annotation.Nonnull; +import alexiil.mc.lib.attributes.fluid.FluidAttributes; +import alexiil.mc.lib.attributes.fluid.GroupedFluidInv; +import alexiil.mc.lib.attributes.fluid.GroupedFluidInvView; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.screen.ScreenHandlerType; @@ -33,9 +36,6 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.Direction; import net.minecraft.util.Hand; import net.minecraft.util.math.Vec3d; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; import appeng.api.AEApi; import appeng.api.config.AccessRestriction; @@ -63,7 +63,7 @@ import appeng.api.storage.channels.IFluidStorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IItemList; import appeng.api.util.AEPartLocation; -import appeng.capabilities.Capabilities; +import appeng.attributes.MEAttributes; import appeng.container.ContainerLocator; import appeng.container.ContainerOpener; import appeng.core.AppEng; @@ -120,10 +120,8 @@ public class FluidStorageBusPart extends SharedStorageBusPart } private IMEInventory getInventoryWrapper(BlockEntity target) { - Direction targetSide = this.getSide().getFacing().getOpposite(); // Prioritize a handler to directly link to another ME network - IStorageMonitorableAccessor accessor = target - .getCapability(Capabilities.STORAGE_MONITORABLE_ACCESSOR, targetSide).orElse(null); + IStorageMonitorableAccessor accessor = MEAttributes.getAttributeInFrontOfPart(MEAttributes.STORAGE_MONITORABLE_ACCESSOR, this); if (accessor != null) { IStorageMonitorable inventory = accessor.getInventory(this.source); if (inventory != null) { @@ -141,8 +139,7 @@ public class FluidStorageBusPart extends SharedStorageBusPart } // Check via cap for IItemHandler - IFluidHandler handlerExt = target.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, targetSide) - .orElse(null); + GroupedFluidInv handlerExt = MEAttributes.getAttributeInFrontOfPart(FluidAttributes.GROUPED_INV, this); if (handlerExt != null) { return new FluidHandlerAdapter(handlerExt, this); } @@ -382,19 +379,16 @@ public class FluidStorageBusPart extends SharedStorageBusPart return 0; } - final Direction targetSide = this.getSide().getFacing().getOpposite(); - - LazyOptional accessorOpt = target - .getCapability(Capabilities.STORAGE_MONITORABLE_ACCESSOR, targetSide); - if (accessorOpt.isPresent()) { - return Objects.hash(target, accessorOpt.orElse(null)); + IStorageMonitorableAccessor accessor = MEAttributes.getAttributeInFrontOfPart( + MEAttributes.STORAGE_MONITORABLE_ACCESSOR, this); + if (accessor != null) { + return Objects.hash(target, accessor); } - final IFluidHandler fluidHandler = target - .getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, targetSide).orElse(null); - - if (fluidHandler != null) { - return Objects.hash(target, fluidHandler, fluidHandler.getTanks()); + final GroupedFluidInv groupedInv = MEAttributes.getAttributeInFrontOfPart( + FluidAttributes.GROUPED_INV, this); + if (groupedInv != null) { + return Objects.hash(target, groupedInv); } return 0; diff --git a/src/unported/java/appeng/fluids/parts/FluidTerminalPart.java b/src/main/java/appeng/fluids/parts/FluidTerminalPart.java similarity index 100% rename from src/unported/java/appeng/fluids/parts/FluidTerminalPart.java rename to src/main/java/appeng/fluids/parts/FluidTerminalPart.java diff --git a/src/unported/java/appeng/fluids/parts/SharedFluidBusPart.java b/src/main/java/appeng/fluids/parts/SharedFluidBusPart.java similarity index 88% rename from src/unported/java/appeng/fluids/parts/SharedFluidBusPart.java rename to src/main/java/appeng/fluids/parts/SharedFluidBusPart.java index 53ec3ea06..be630bb7e 100644 --- a/src/unported/java/appeng/fluids/parts/SharedFluidBusPart.java +++ b/src/main/java/appeng/fluids/parts/SharedFluidBusPart.java @@ -18,15 +18,14 @@ package appeng.fluids.parts; +import alexiil.mc.lib.attributes.Attribute; +import alexiil.mc.lib.attributes.SearchOptions; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.*; import net.minecraft.world.BlockView; import net.minecraft.world.World; @@ -105,21 +104,6 @@ public abstract class SharedFluidBusPart extends UpgradeablePart implements IGri bch.addBox(4, 4, 14, 12, 12, 16); } - protected BlockEntity getConnectedTE() { - BlockEntity self = this.getHost().getTile(); - return this.getBlockEntity(self, self.getPos().offset(this.getSide().getFacing())); - } - - private BlockEntity getBlockEntity(final BlockEntity self, final BlockPos pos) { - final World w = self.getWorld(); - - if (w.getChunkManager().isChunkLoaded(new ChunkPos(pos))) { - return w.getBlockEntity(pos); - } - - return null; - } - protected int calculateAmountToSend() { double amount = this.getChannel().transferFactor(); switch (this.getInstalledUpgrades(Upgrades.SPEED)) { diff --git a/src/unported/java/appeng/fluids/registries/BasicFluidCellGuiHandler.java b/src/main/java/appeng/fluids/registries/BasicFluidCellGuiHandler.java similarity index 100% rename from src/unported/java/appeng/fluids/registries/BasicFluidCellGuiHandler.java rename to src/main/java/appeng/fluids/registries/BasicFluidCellGuiHandler.java diff --git a/src/unported/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java b/src/main/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java similarity index 91% rename from src/unported/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java rename to src/main/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java index 33d2046e2..2ee0e144e 100644 --- a/src/unported/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java +++ b/src/main/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java @@ -20,8 +20,7 @@ package appeng.fluids.tile; import java.util.EnumSet; -import javax.annotation.Nullable; - +import alexiil.mc.lib.attributes.AttributeList; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.block.BlockState; import net.minecraft.screen.ScreenHandlerType; @@ -29,9 +28,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; import appeng.api.AEApi; import appeng.api.config.Upgrades; @@ -51,6 +49,7 @@ import appeng.fluids.helper.DualityFluidInterface; import appeng.fluids.helper.IFluidInterfaceHost; import appeng.helpers.IPriorityHost; import appeng.tile.grid.AENetworkBlockEntity; +import net.minecraft.world.World; public class FluidInterfaceBlockEntity extends AENetworkBlockEntity implements IGridTickable, IFluidInterfaceHost, IPriorityHost { @@ -134,12 +133,9 @@ public class FluidInterfaceBlockEntity extends AENetworkBlockEntity } @Override - public LazyOptional getCapability(Capability capability, @Nullable Direction facing) { - LazyOptional result = this.duality.getCapability(capability, facing); - if (result.isPresent()) { - return result; - } - return super.getCapability(capability, facing); + public void addAllAttributes(World world, BlockPos pos, BlockState state, AttributeList to) { + super.addAllAttributes(world, pos, state, to); + duality.addAllAttributes(to); } @Override diff --git a/src/unported/java/appeng/fluids/util/AEFluidInventory.java b/src/main/java/appeng/fluids/util/AEFluidInventory.java similarity index 57% rename from src/unported/java/appeng/fluids/util/AEFluidInventory.java rename to src/main/java/appeng/fluids/util/AEFluidInventory.java index 04d0d9e24..e39098270 100644 --- a/src/unported/java/appeng/fluids/util/AEFluidInventory.java +++ b/src/main/java/appeng/fluids/util/AEFluidInventory.java @@ -1,10 +1,16 @@ package appeng.fluids.util; +import java.math.RoundingMode; import java.util.Objects; -import javax.annotation.Nonnull; - +import alexiil.mc.lib.attributes.ListenerRemovalToken; +import alexiil.mc.lib.attributes.ListenerToken; +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.fluid.FluidInvTankChangeListener; +import alexiil.mc.lib.attributes.fluid.FluidVolumeUtil; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; +import alexiil.mc.lib.attributes.fluid.volume.FluidKey; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; import net.minecraft.nbt.CompoundTag; @@ -27,6 +33,17 @@ public class AEFluidInventory implements IAEFluidTank { this(handler, slots, Integer.MAX_VALUE); } + @Override + public boolean setInvFluid(int tank, FluidVolume to, Simulation simulation) { + if (tank >= 0 && tank < this.getSlots()) { + if (simulation == Simulation.ACTION) { + setFluidInSlot(tank, AEFluidStack.fromFluidVolume(to, RoundingMode.DOWN)); + } + return true; + } + return false; + } + @Override public void setFluidInSlot(final int slot, final IAEFluidStack fluid) { if (slot >= 0 && slot < this.getSlots()) { @@ -68,13 +85,17 @@ public class AEFluidInventory implements IAEFluidTank { } @Override - public int getTanks() { + public int getTankCount() { return this.fluids.length; } - @Nonnull @Override - public FluidVolume getFluidInTank(int tank) { + public FluidAmount getMaxAmount_F(int tank) { + return FluidAmount.of(Math.min(this.capacity, Integer.MAX_VALUE), 1000); + } + + @Override + public FluidVolume getInvFluid(int tank) { if (tank < 0 || tank >= fluids.length) { return FluidVolumeUtil.EMPTY; } @@ -82,13 +103,13 @@ public class AEFluidInventory implements IAEFluidTank { } @Override - public int getTankCapacity(int tank) { - return Math.min(this.capacity, Integer.MAX_VALUE); + public boolean isFluidValidForTank(int tank, FluidKey fluid) { + return !fluid.isEmpty(); } @Override - public boolean isFluidValid(int tank, @Nonnull FluidVolume stack) { - return stack != FluidVolumeUtil.EMPTY; + public ListenerToken addListener(FluidInvTankChangeListener listener, ListenerRemovalToken removalToken) { + return null; } public int fill(final int slot, final FluidVolume resource, final boolean doFill) { @@ -108,11 +129,11 @@ public class AEFluidInventory implements IAEFluidTank { amountToStore -= fluid.getStackSize(); } - amountToStore = Math.min(amountToStore, resource.getAmount()); + amountToStore = Math.min(amountToStore, (int) resource.getAmount_F().asLong(1000, RoundingMode.DOWN)); if (doFill) { if (fluid == null) { - this.setFluidInSlot(slot, AEFluidStack.fromFluidVolume(resource)); + this.setFluidInSlot(slot, AEFluidStack.fromFluidVolume(resource, RoundingMode.DOWN)); } else { fluid.setStackSize(fluid.getStackSize() + amountToStore); this.onContentChanged(slot); @@ -122,126 +143,13 @@ public class AEFluidInventory implements IAEFluidTank { return amountToStore; } - @Override - public int fill(FluidVolume resource, FluidAction action) { - if (resource.isEmpty() || resource.getAmount() <= 0) { - return 0; - } - - // Find a suitable slot - int slot = indexOfFluid(resource); - if (slot == -1) { - slot = indexOfEmptySlot(); - if (slot == -1) { - return 0; - } - } - - final IAEFluidStack fluid = this.fluids[slot]; - - int amountToStore = this.capacity; - - if (fluid != null) { - amountToStore -= fluid.getStackSize(); - } - - amountToStore = Math.min(amountToStore, resource.getAmount()); - - if (action == FluidAction.EXECUTE) { - if (fluid == null) { - this.setFluidInSlot(slot, AEFluidStack.fromFluidVolume(resource)); - } else { - fluid.setStackSize(fluid.getStackSize() + amountToStore); - this.onContentChanged(slot); - } - } - - return amountToStore; - } - - @Override - public FluidVolume drain(final FluidVolume fluid, final FluidAction action) { - if (fluid.isEmpty() || fluid.getAmount() <= 0) { - return FluidVolumeUtil.EMPTY; - } - - final FluidVolume resource = fluid.copy(); - - FluidVolume totalDrained = FluidVolumeUtil.EMPTY; - for (int slot = 0; slot < this.getSlots(); ++slot) { - FluidVolume drain = this.drain(slot, resource, action == FluidAction.EXECUTE); - if (drain != null) { - if (totalDrained.isEmpty()) { - totalDrained = drain; - } else { - totalDrained.setAmount(totalDrained.getAmount() + drain.getAmount()); - } - - resource.setAmount(resource.getAmount() - drain.getAmount()); - if (resource.getAmount() <= 0) { - break; - } - } - } - return totalDrained; - } - - @Override - public FluidVolume drain(final int maxDrain, final FluidAction action) { - if (maxDrain == 0) { - return FluidVolumeUtil.EMPTY; - } - - FluidVolume totalDrained = FluidVolumeUtil.EMPTY; - int toDrain = maxDrain; - - for (int slot = 0; slot < this.getSlots(); ++slot) { - if (totalDrained.isEmpty()) { - totalDrained = this.drain(slot, toDrain, action == FluidAction.EXECUTE); - if (totalDrained.isEmpty()) { - toDrain -= totalDrained.getAmount(); - } - } else { - FluidVolume copy = totalDrained.copy(); - copy.setAmount(toDrain); - FluidVolume drain = this.drain(slot, copy, action == FluidAction.EXECUTE); - if (drain != null) { - totalDrained.setAmount(totalDrained.getAmount() + drain.getAmount()); - toDrain -= drain.getAmount(); - } - } - - if (toDrain <= 0) { - break; - } - } - return totalDrained; - } - - private int indexOfFluid(FluidVolume resource) { - for (int slot = 0; slot < fluids.length; slot++) { - if (fluids[slot] != null && fluids[slot].getFluidStack().isFluidEqual(resource)) { - return slot; - } - } - return -1; - } - - private int indexOfEmptySlot() { - for (int slot = 0; slot < fluids.length; slot++) { - if (fluids[slot] == null) { - return slot; - } - } - return -1; - } - public FluidVolume drain(final int slot, final FluidVolume resource, final boolean doDrain) { final IAEFluidStack fluid = this.fluids[slot]; if (resource.isEmpty() || fluid == null || !fluid.getFluidStack().equals(resource)) { return null; } - return this.drain(slot, resource.getAmount(), doDrain); + int toDrain = (int) resource.getAmount_F().asLong(1000, RoundingMode.DOWN); + return this.drain(slot, toDrain, doDrain); } public FluidVolume drain(final int slot, final int maxDrain, boolean doDrain) { @@ -255,7 +163,7 @@ public class AEFluidInventory implements IAEFluidTank { drained = (int) fluid.getStackSize(); } - FluidVolume stack = new FluidVolume(fluid.getFluid(), drained); + FluidVolume stack = fluid.getFluidStack().withAmount(FluidAmount.of(drained, 1000)); if (doDrain) { fluid.setStackSize(fluid.getStackSize() - drained); if (fluid.getStackSize() <= 0) { diff --git a/src/unported/java/appeng/fluids/util/FluidSorters.java b/src/main/java/appeng/fluids/util/FluidSorters.java similarity index 100% rename from src/unported/java/appeng/fluids/util/FluidSorters.java rename to src/main/java/appeng/fluids/util/FluidSorters.java diff --git a/src/unported/java/appeng/fluids/util/IAEFluidInventory.java b/src/main/java/appeng/fluids/util/IAEFluidInventory.java similarity index 100% rename from src/unported/java/appeng/fluids/util/IAEFluidInventory.java rename to src/main/java/appeng/fluids/util/IAEFluidInventory.java diff --git a/src/unported/java/appeng/fluids/util/IAEFluidTank.java b/src/main/java/appeng/fluids/util/IAEFluidTank.java similarity index 66% rename from src/unported/java/appeng/fluids/util/IAEFluidTank.java rename to src/main/java/appeng/fluids/util/IAEFluidTank.java index 3eddab5b5..ddb12ecc6 100644 --- a/src/unported/java/appeng/fluids/util/IAEFluidTank.java +++ b/src/main/java/appeng/fluids/util/IAEFluidTank.java @@ -1,11 +1,11 @@ package appeng.fluids.util; -import net.minecraftforge.fluids.capability.IFluidHandler; +import alexiil.mc.lib.attributes.fluid.FixedFluidInv; import appeng.api.storage.data.IAEFluidStack; -public interface IAEFluidTank extends IFluidHandler { +public interface IAEFluidTank extends FixedFluidInv { void setFluidInSlot(final int slot, final IAEFluidStack fluid); IAEFluidStack getFluidInSlot(final int slot); diff --git a/src/unported/java/appeng/helpers/DualityInterface.java b/src/main/java/appeng/helpers/DualityInterface.java similarity index 96% rename from src/unported/java/appeng/helpers/DualityInterface.java rename to src/main/java/appeng/helpers/DualityInterface.java index a3c97fec6..0a46ccc59 100644 --- a/src/unported/java/appeng/helpers/DualityInterface.java +++ b/src/main/java/appeng/helpers/DualityInterface.java @@ -28,9 +28,10 @@ import java.util.Optional; import javax.annotation.Nullable; +import alexiil.mc.lib.attributes.AttributeList; +import alexiil.mc.lib.attributes.AttributeProvider; +import alexiil.mc.lib.attributes.Simulation; import alexiil.mc.lib.attributes.item.FixedItemInv; -import appeng.block.networking.CableBusBlock; -import appeng.tile.networking.CableBusBlockEntity; import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; @@ -50,10 +51,6 @@ import net.minecraft.text.Text; import net.minecraft.text.LiteralText; import net.minecraft.text.TranslatableText; import net.minecraft.world.World; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.wrapper.RangedWrapper; import appeng.api.AEApi; import appeng.api.config.Actionable; @@ -92,7 +89,6 @@ import appeng.api.util.AECableType; import appeng.api.util.AEPartLocation; import appeng.api.util.DimensionalCoord; import appeng.api.util.IConfigManager; -import appeng.capabilities.Capabilities; import appeng.core.settings.TickRates; import appeng.me.GridAccessException; import appeng.me.helpers.AENetworkProxy; @@ -355,7 +351,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn private void updatePlan(final int slot) { IAEItemStack req = this.config.getAEStackInSlot(slot); if (req != null && req.getStackSize() <= 0) { - this.config.setInvStack(slot, ItemStack.EMPTY); + this.config.setInvStack(slot, ItemStack.EMPTY, Simulation.ACTION); req = null; } @@ -633,7 +629,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn } private InventoryAdaptor getAdaptor(final int slot) { - return new AdaptorFixedInv(new RangedWrapper(this.storage, slot, slot + 1)); + return new AdaptorFixedInv(this.storage.getSubInv(slot, slot + 1)); } private boolean handleCrafting(final int x, final InventoryAdaptor d, final IAEItemStack itemStack) { @@ -1035,19 +1031,9 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn } } - public boolean hasCapability(Capability capabilityClass, Direction facing) { - return capabilityClass == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY - || capabilityClass == Capabilities.STORAGE_MONITORABLE_ACCESSOR; - } - - @SuppressWarnings("unchecked") - public LazyOptional getCapability(Capability capabilityClass, Direction facing) { - if (capabilityClass == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (LazyOptional) LazyOptional.of(() -> this.storage); - } else if (capabilityClass == Capabilities.STORAGE_MONITORABLE_ACCESSOR) { - return (LazyOptional) LazyOptional.of(() -> this.accessor); - } - return LazyOptional.empty(); + public void addAllAttributes(AttributeList to) { + to.offer(this.storage); + to.offer(this.accessor); } private class InterfaceRequestSource extends MachineSource { diff --git a/src/unported/java/appeng/helpers/IContainerCraftingPacket.java b/src/main/java/appeng/helpers/IContainerCraftingPacket.java similarity index 100% rename from src/unported/java/appeng/helpers/IContainerCraftingPacket.java rename to src/main/java/appeng/helpers/IContainerCraftingPacket.java diff --git a/src/unported/java/appeng/helpers/IInterfaceHost.java b/src/main/java/appeng/helpers/IInterfaceHost.java similarity index 100% rename from src/unported/java/appeng/helpers/IInterfaceHost.java rename to src/main/java/appeng/helpers/IInterfaceHost.java diff --git a/src/unported/java/appeng/helpers/IMouseWheelItem.java b/src/main/java/appeng/helpers/IMouseWheelItem.java similarity index 100% rename from src/unported/java/appeng/helpers/IMouseWheelItem.java rename to src/main/java/appeng/helpers/IMouseWheelItem.java diff --git a/src/unported/java/appeng/helpers/InvalidPatternHelper.java b/src/main/java/appeng/helpers/InvalidPatternHelper.java similarity index 96% rename from src/unported/java/appeng/helpers/InvalidPatternHelper.java rename to src/main/java/appeng/helpers/InvalidPatternHelper.java index 71f18681a..d55ea1610 100644 --- a/src/unported/java/appeng/helpers/InvalidPatternHelper.java +++ b/src/main/java/appeng/helpers/InvalidPatternHelper.java @@ -25,6 +25,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.text.LiteralText; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -125,7 +126,7 @@ public class InvalidPatternHelper { } public Text getFormattedToolTip() { - Text result = new LiteralText(this.getCount() + " ").append(this.getName()); + MutableText result = new LiteralText(this.getCount() + " ").append(this.getName()); if (!this.isValid()) { result.formatted(Formatting.RED); diff --git a/src/unported/java/appeng/helpers/InventoryAction.java b/src/main/java/appeng/helpers/InventoryAction.java similarity index 100% rename from src/unported/java/appeng/helpers/InventoryAction.java rename to src/main/java/appeng/helpers/InventoryAction.java diff --git a/src/unported/java/appeng/helpers/MultiCraftingTracker.java b/src/main/java/appeng/helpers/MultiCraftingTracker.java similarity index 100% rename from src/unported/java/appeng/helpers/MultiCraftingTracker.java rename to src/main/java/appeng/helpers/MultiCraftingTracker.java diff --git a/src/unported/java/appeng/helpers/NonNullArrayIterator.java b/src/main/java/appeng/helpers/NonNullArrayIterator.java similarity index 100% rename from src/unported/java/appeng/helpers/NonNullArrayIterator.java rename to src/main/java/appeng/helpers/NonNullArrayIterator.java diff --git a/src/unported/java/appeng/helpers/PatternHelper.java b/src/main/java/appeng/helpers/PatternHelper.java similarity index 97% rename from src/unported/java/appeng/helpers/PatternHelper.java rename to src/main/java/appeng/helpers/PatternHelper.java index cb6323720..f36fad583 100644 --- a/src/unported/java/appeng/helpers/PatternHelper.java +++ b/src/main/java/appeng/helpers/PatternHelper.java @@ -28,7 +28,7 @@ import java.util.Set; import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.ICraftingRecipe; +import net.minecraft.recipe.CraftingRecipe; import net.minecraft.recipe.RecipeType; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -48,7 +48,7 @@ public class PatternHelper implements ICraftingPatternDetails, Comparable> (offset + 32)); } diff --git a/src/unported/java/appeng/helpers/PlayerSecurityWrapper.java b/src/main/java/appeng/helpers/PlayerSecurityWrapper.java similarity index 100% rename from src/unported/java/appeng/helpers/PlayerSecurityWrapper.java rename to src/main/java/appeng/helpers/PlayerSecurityWrapper.java diff --git a/src/unported/java/appeng/helpers/Splotch.java b/src/main/java/appeng/helpers/Splotch.java similarity index 100% rename from src/unported/java/appeng/helpers/Splotch.java rename to src/main/java/appeng/helpers/Splotch.java diff --git a/src/unported/java/appeng/helpers/WirelessTerminalGuiObject.java b/src/main/java/appeng/helpers/WirelessTerminalGuiObject.java similarity index 100% rename from src/unported/java/appeng/helpers/WirelessTerminalGuiObject.java rename to src/main/java/appeng/helpers/WirelessTerminalGuiObject.java diff --git a/src/unported/java/appeng/hooks/BlockToolDispenseItemBehavior.java b/src/main/java/appeng/hooks/BlockToolDispenseItemBehavior.java similarity index 100% rename from src/unported/java/appeng/hooks/BlockToolDispenseItemBehavior.java rename to src/main/java/appeng/hooks/BlockToolDispenseItemBehavior.java diff --git a/src/unported/java/appeng/hooks/IBlockTool.java b/src/main/java/appeng/hooks/IBlockTool.java similarity index 100% rename from src/unported/java/appeng/hooks/IBlockTool.java rename to src/main/java/appeng/hooks/IBlockTool.java diff --git a/src/unported/java/appeng/hooks/MatterCannonDispenseItemBehavior.java b/src/main/java/appeng/hooks/MatterCannonDispenseItemBehavior.java similarity index 96% rename from src/unported/java/appeng/hooks/MatterCannonDispenseItemBehavior.java rename to src/main/java/appeng/hooks/MatterCannonDispenseItemBehavior.java index b141a55d6..ac0dbff4c 100644 --- a/src/unported/java/appeng/hooks/MatterCannonDispenseItemBehavior.java +++ b/src/main/java/appeng/hooks/MatterCannonDispenseItemBehavior.java @@ -53,11 +53,11 @@ public final class MatterCannonDispenseItemBehavior extends ItemDispenserBehavio final World w = dispenser.getWorld(); if (w instanceof ServerWorld) { final PlayerEntity p = FakePlayer.getOrCreate((ServerWorld) w); - Platform.configurePlayer(p, dir, dispenser.getBlockTileEntity()); + Platform.configurePlayer(p, dir, dispenser.getBlockEntity()); p.updatePosition(p.getX() + dir.xOffset, p.getY() + dir.yOffset, p.getZ() + dir.zOffset); - dispensedItem = tm.use(w, p, null).getResult(); + dispensedItem = tm.use(w, p, null).getValue(); } } return dispensedItem; diff --git a/src/unported/java/appeng/integration/IIntegrationModule.java b/src/main/java/appeng/integration/IIntegrationModule.java similarity index 100% rename from src/unported/java/appeng/integration/IIntegrationModule.java rename to src/main/java/appeng/integration/IIntegrationModule.java diff --git a/src/unported/java/appeng/integration/abstraction/IJEI.java b/src/main/java/appeng/integration/abstraction/IJEI.java similarity index 100% rename from src/unported/java/appeng/integration/abstraction/IJEI.java rename to src/main/java/appeng/integration/abstraction/IJEI.java diff --git a/src/unported/java/appeng/integration/abstraction/JEIFacade.java b/src/main/java/appeng/integration/abstraction/JEIFacade.java similarity index 100% rename from src/unported/java/appeng/integration/abstraction/JEIFacade.java rename to src/main/java/appeng/integration/abstraction/JEIFacade.java diff --git a/src/unported/java/appeng/items/misc/CrystalSeedItem.java b/src/main/java/appeng/items/misc/CrystalSeedItem.java similarity index 82% rename from src/unported/java/appeng/items/misc/CrystalSeedItem.java rename to src/main/java/appeng/items/misc/CrystalSeedItem.java index 577c79046..e53ff6e16 100644 --- a/src/unported/java/appeng/items/misc/CrystalSeedItem.java +++ b/src/main/java/appeng/items/misc/CrystalSeedItem.java @@ -111,7 +111,7 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal { @Environment(EnvType.CLIENT) public void appendTooltip(final ItemStack stack, final World world, final List lines, final TooltipContext advancedTooltips) { - lines.add(ButtonToolTips.DoesntDespawn.getTranslationKey()); + lines.add(ButtonToolTips.DoesntDespawn.text()); lines.add(getGrowthTooltipItem(stack)); super.appendTooltip(stack, world, lines, advancedTooltips); @@ -122,24 +122,25 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal { return new LiteralText(Math.round(100 * progress / (float) GROWTH_TICKS_REQUIRED) + "%"); } - @Override - public boolean hasCustomEntity(final ItemStack stack) { - return true; - } - - @Override - public Entity createEntity(final World world, final Entity location, final ItemStack itemstack) { - final GrowingCrystalEntity egc = new GrowingCrystalEntity(world, location.getX(), location.getY(), - location.getZ(), itemstack); - - egc.setVelocity(location.getVelocity()); - - // Cannot read the pickup delay of the original item, so we - // use the pickup delay used for items dropped by a player instead - egc.setPickupDelay(40); - - return egc; - } +// FIXME FABRIC Needs custom mixin +// FIXME FABRIC @Override +// FIXME FABRIC public boolean hasCustomEntity(final ItemStack stack) { +// FIXME FABRIC return true; +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC @Override +// FIXME FABRIC public Entity createEntity(final World world, final Entity location, final ItemStack itemstack) { +// FIXME FABRIC final GrowingCrystalEntity egc = new GrowingCrystalEntity(world, location.getX(), location.getY(), +// FIXME FABRIC location.getZ(), itemstack); +// FIXME FABRIC +// FIXME FABRIC egc.setVelocity(location.getVelocity()); +// FIXME FABRIC +// FIXME FABRIC // Cannot read the pickup delay of the original item, so we +// FIXME FABRIC // use the pickup delay used for items dropped by a player instead +// FIXME FABRIC egc.setPickupDelay(40); +// FIXME FABRIC +// FIXME FABRIC return egc; +// FIXME FABRIC } @Override public void appendStacks(ItemGroup group, DefaultedList items) { diff --git a/src/unported/java/appeng/items/misc/EncodedPatternItem.java b/src/main/java/appeng/items/misc/EncodedPatternItem.java similarity index 85% rename from src/unported/java/appeng/items/misc/EncodedPatternItem.java rename to src/main/java/appeng/items/misc/EncodedPatternItem.java index 83d69b62e..9d8f98cc2 100644 --- a/src/unported/java/appeng/items/misc/EncodedPatternItem.java +++ b/src/main/java/appeng/items/misc/EncodedPatternItem.java @@ -22,12 +22,14 @@ import java.util.List; import java.util.Map; import java.util.WeakHashMap; +import appeng.hooks.AEToolItem; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; import net.minecraft.text.LiteralText; +import net.minecraft.text.MutableText; import net.minecraft.util.TypedActionResult; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; @@ -48,7 +50,7 @@ import appeng.helpers.PatternHelper; import appeng.items.AEBaseItem; import appeng.util.Platform; -public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternItem { +public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternItem, AEToolItem { // rather simple client side caching. private static final Map SIMPLE_CACHE = new WeakHashMap<>(); @@ -102,30 +104,30 @@ public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternIt return; } - stack.setDisplayName(GuiText.InvalidPattern.textComponent().formatted(Formatting.RED)); + stack.setCustomName(GuiText.InvalidPattern.textComponent().copy().formatted(Formatting.RED)); InvalidPatternHelper invalid = new InvalidPatternHelper(stack); final Text label = (invalid.isCraftable() ? GuiText.Crafts.textComponent() - : GuiText.Creates.textComponent()).append(": "); + : GuiText.Creates.textComponent()).copy().append(": "); final Text and = new LiteralText(" ").append(GuiText.And.textComponent()) .append(" "); - final Text with = GuiText.With.textComponent().append(": "); + final Text with = GuiText.With.textComponent().copy().append(": "); boolean first = true; for (final InvalidPatternHelper.PatternIngredient output : invalid.getOutputs()) { - lines.add((first ? label : and).deepCopy().append(output.getFormattedToolTip())); + lines.add((first ? label : and).copy().append(output.getFormattedToolTip())); first = false; } first = true; for (final InvalidPatternHelper.PatternIngredient input : invalid.getInputs()) { - lines.add((first ? with : and).deepCopy().append(input.getFormattedToolTip())); + lines.add((first ? with : and).copy().append(input.getFormattedToolTip())); first = false; } if (invalid.isCraftable()) { - final Text substitutionLabel = GuiText.Substitute.textComponent().append(" "); + final MutableText substitutionLabel = GuiText.Substitute.textComponent().copy().append(" "); final Text canSubstitute = invalid.canSubstitute() ? GuiText.Yes.textComponent() : GuiText.No.textComponent(); @@ -136,7 +138,7 @@ public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternIt } if (stack.hasCustomName()) { - stack.removeChildTag("display"); + stack.removeSubTag("display"); } final boolean isCrafting = details.isCraftable(); @@ -146,10 +148,10 @@ public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternIt final IAEItemStack[] out = details.getCondensedOutputs(); final Text label = (isCrafting ? GuiText.Crafts.textComponent() : GuiText.Creates.textComponent()) - .append(": "); + .copy().append(": "); final Text and = new LiteralText(" ").append(GuiText.And.textComponent()) .append(" "); - final Text with = GuiText.With.textComponent().append(": "); + final Text with = GuiText.With.textComponent().copy().append(": "); boolean first = true; for (final IAEItemStack anOut : out) { @@ -157,7 +159,7 @@ public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternIt continue; } - lines.add((first ? label : and).deepCopy().append(anOut.getStackSize() + "x ") + lines.add((first ? label : and).copy().append(anOut.getStackSize() + "x ") .append(Platform.getItemDisplayName(anOut))); first = false; } @@ -168,13 +170,13 @@ public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternIt continue; } - lines.add((first ? with : and).deepCopy().append(anIn.getStackSize() + "x ") + lines.add((first ? with : and).copy().append(anIn.getStackSize() + "x ") .append(Platform.getItemDisplayName(anIn))); first = false; } if (isCrafting) { - final Text substitutionLabel = GuiText.Substitute.textComponent().append(" "); + final MutableText substitutionLabel = GuiText.Substitute.textComponent().copy().append(" "); final Text canSubstitute = substitute ? GuiText.Yes.textComponent() : GuiText.No.textComponent(); lines.add(substitutionLabel.append(canSubstitute)); diff --git a/src/unported/java/appeng/items/misc/PaintBallItem.java b/src/main/java/appeng/items/misc/PaintBallItem.java similarity index 100% rename from src/unported/java/appeng/items/misc/PaintBallItem.java rename to src/main/java/appeng/items/misc/PaintBallItem.java diff --git a/src/unported/java/appeng/items/misc/PaintBallItemRendering.java b/src/main/java/appeng/items/misc/PaintBallItemRendering.java similarity index 100% rename from src/unported/java/appeng/items/misc/PaintBallItemRendering.java rename to src/main/java/appeng/items/misc/PaintBallItemRendering.java diff --git a/src/unported/java/appeng/items/storage/AbstractStorageCell.java b/src/main/java/appeng/items/storage/AbstractStorageCell.java similarity index 86% rename from src/unported/java/appeng/items/storage/AbstractStorageCell.java rename to src/main/java/appeng/items/storage/AbstractStorageCell.java index 9d5c22f51..8dfcbc22a 100644 --- a/src/unported/java/appeng/items/storage/AbstractStorageCell.java +++ b/src/main/java/appeng/items/storage/AbstractStorageCell.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Set; import alexiil.mc.lib.attributes.item.FixedItemInv; +import appeng.hooks.AEToolItem; import net.fabricmc.api.EnvType; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.player.PlayerEntity; @@ -59,7 +60,7 @@ import appeng.util.Platform; * @version rv6 - 2018-01-17 * @since rv6 2018-01-17 */ -public abstract class AbstractStorageCell> extends AEBaseItem implements IStorageCell { +public abstract class AbstractStorageCell> extends AEBaseItem implements IStorageCell, AEToolItem { protected final MaterialType component; protected final int totalBytes; @@ -151,7 +152,7 @@ public abstract class AbstractStorageCell> extends AEBaseI final InventoryAdaptor ia = InventoryAdaptor.getAdaptor(player); final IItemList list = inv.getAvailableItems(this.getChannel().createList()); if (list.isEmpty() && ia != null) { - playerInventory.setStack(playerInventory.currentItem, ItemStack.EMPTY); + playerInventory.setStack(playerInventory.selectedSlot, ItemStack.EMPTY); // drop core final ItemStack extraB = ia.addItems(this.component.stack(1)); @@ -172,8 +173,8 @@ public abstract class AbstractStorageCell> extends AEBaseI // drop empty storage cell case this.dropEmptyStorageCellCase(ia, player); - if (player.container != null) { - player.container.detectAndSendChanges(); + if (player.currentScreenHandler != null) { + player.currentScreenHandler.sendContentUpdates(); } return true; @@ -191,16 +192,17 @@ public abstract class AbstractStorageCell> extends AEBaseI : ActionResult.PASS; } - @Override - public ItemStack getRecipeRemainder(final ItemStack itemStack) { - return AEApi.instance().definitions().materials().emptyStorageCell().maybeStack(1) - .orElseThrow(() -> new MissingDefinitionException( - "Tried to use empty storage cells while basic storage cells are defined.")); - } - - @Override - public boolean hasRecipeRemainder(final ItemStack stack) { - return AEConfig.instance().isFeatureEnabled(AEFeature.ENABLE_DISASSEMBLY_CRAFTING); - } +// FIXME FABRIC: Handle this in the disassemble recipe +// FIXME FABRIC @Override +// FIXME FABRIC public ItemStack getRecipeRemainder(final ItemStack itemStack) { +// FIXME FABRIC return AEApi.instance().definitions().materials().emptyStorageCell().maybeStack(1) +// FIXME FABRIC .orElseThrow(() -> new MissingDefinitionException( +// FIXME FABRIC "Tried to use empty storage cells while basic storage cells are defined.")); +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC @Override +// FIXME FABRIC public boolean hasRecipeRemainder(final ItemStack stack) { +// FIXME FABRIC return AEConfig.instance().isFeatureEnabled(AEFeature.ENABLE_DISASSEMBLY_CRAFTING); +// FIXME FABRIC } } diff --git a/src/unported/java/appeng/items/storage/BasicStorageCellItem.java b/src/main/java/appeng/items/storage/BasicStorageCellItem.java similarity index 100% rename from src/unported/java/appeng/items/storage/BasicStorageCellItem.java rename to src/main/java/appeng/items/storage/BasicStorageCellItem.java diff --git a/src/unported/java/appeng/items/storage/ViewCellItem.java b/src/main/java/appeng/items/storage/ViewCellItem.java similarity index 100% rename from src/unported/java/appeng/items/storage/ViewCellItem.java rename to src/main/java/appeng/items/storage/ViewCellItem.java diff --git a/src/unported/java/appeng/items/tools/BiometricCardItem.java b/src/main/java/appeng/items/tools/BiometricCardItem.java similarity index 84% rename from src/unported/java/appeng/items/tools/BiometricCardItem.java rename to src/main/java/appeng/items/tools/BiometricCardItem.java index 098b91fca..ae27d2916 100644 --- a/src/unported/java/appeng/items/tools/BiometricCardItem.java +++ b/src/main/java/appeng/items/tools/BiometricCardItem.java @@ -28,8 +28,10 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NBTUtil; +import net.minecraft.nbt.NbtHelper; +import net.minecraft.text.MutableText; import net.minecraft.text.TranslatableText; +import net.minecraft.util.ActionResult; import net.minecraft.util.TypedActionResult; import net.minecraft.util.Hand; import net.minecraft.text.Text; @@ -54,30 +56,30 @@ public class BiometricCardItem extends AEBaseItem implements IBiometricCard { if (p.isInSneakingPose()) { this.encode(p.getStackInHand(hand), p); p.swingHand(hand); - return TypedActionResult.resultSuccess(p.getStackInHand(hand)); + return TypedActionResult.success(p.getStackInHand(hand)); } - return TypedActionResult.resultPass(p.getStackInHand(hand)); + return TypedActionResult.pass(p.getStackInHand(hand)); } + // FIXME FABRIC: Validate that this actually works about as well as the forge hook does @Override - public boolean itemInteractionForEntity(ItemStack is, final PlayerEntity player, final LivingEntity target, - final Hand hand) { - if (target instanceof PlayerEntity && !player.isInSneakingPose()) { - if (player.isCreative()) { - is = player.getStackInHand(hand); + public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity target, Hand hand) { + if (target instanceof PlayerEntity && !user.isInSneakingPose()) { + if (user.isCreative()) { + stack = user.getStackInHand(hand); } - this.encode(is, (PlayerEntity) target); - player.swingHand(hand); - return true; + this.encode(stack, (PlayerEntity) target); + user.swingHand(hand); + return ActionResult.SUCCESS; } - return false; + return ActionResult.PASS; } @Override public Text getName(final ItemStack is) { final GameProfile username = this.getProfile(is); - return username != null ? super.getName(is).append(" - " + username.getName()) + return username != null ? super.getName(is).copy().append(" - " + username.getName()) : super.getName(is); } @@ -97,7 +99,7 @@ public class BiometricCardItem extends AEBaseItem implements IBiometricCard { if (profile != null) { final CompoundTag pNBT = new CompoundTag(); - NBTUtil.writeGameProfile(pNBT, profile); + NbtHelper.fromGameProfile(pNBT, profile); tag.put("profile", pNBT); } else { tag.remove("profile"); @@ -108,7 +110,7 @@ public class BiometricCardItem extends AEBaseItem implements IBiometricCard { public GameProfile getProfile(final ItemStack is) { final CompoundTag tag = is.getOrCreateTag(); if (tag.contains("profile")) { - return NBTUtil.readGameProfile(tag.getCompound("profile")); + return NbtHelper.toGameProfile(tag.getCompound("profile")); } return null; } @@ -160,7 +162,7 @@ public class BiometricCardItem extends AEBaseItem implements IBiometricCard { if (perms.isEmpty()) { lines.add(new TranslatableText(GuiText.NoPermissions.getLocal())); } else { - Text msg = null; + MutableText msg = null; for (final SecurityPermissions sp : perms) { if (msg == null) { diff --git a/src/unported/java/appeng/items/tools/MemoryCardItem.java b/src/main/java/appeng/items/tools/MemoryCardItem.java similarity index 93% rename from src/unported/java/appeng/items/tools/MemoryCardItem.java rename to src/main/java/appeng/items/tools/MemoryCardItem.java index 3bea90d3b..5ff21e915 100644 --- a/src/unported/java/appeng/items/tools/MemoryCardItem.java +++ b/src/main/java/appeng/items/tools/MemoryCardItem.java @@ -21,7 +21,6 @@ package appeng.items.tools; import java.util.List; import net.fabricmc.api.EnvType; -import net.minecraft.client.resources.I18n; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -29,9 +28,7 @@ import net.minecraft.item.ItemUsageContext; import net.minecraft.nbt.CompoundTag; import net.minecraft.text.TranslatableText; import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; import net.minecraft.text.Text; -import net.minecraft.world.WorldView; import net.minecraft.world.World; import net.fabricmc.api.Environment; @@ -85,7 +82,7 @@ public class MemoryCardItem extends AEBaseItem implements IMemoryCard { */ private String getFirstValidTranslationKey(final String... name) { for (final String n : name) { - if (I18n.hasKey(n)) { + if (Language.getInstance().hasTranslation(n)) { return n; } } @@ -161,14 +158,14 @@ public class MemoryCardItem extends AEBaseItem implements IMemoryCard { } @Override - public ActionResult onItemUse(ItemUsageContext context) { + public ActionResult useOnBlock(ItemUsageContext context) { if (context.getPlayer().isInSneakingPose()) { if (!context.getPlayer().world.isClient) { this.clearCard(context.getPlayer(), context.getWorld(), context.getHand()); } return ActionResult.SUCCESS; } else { - return super.onItemUse(context); + return super.useOnBlock(context); } } @@ -183,10 +180,11 @@ public class MemoryCardItem extends AEBaseItem implements IMemoryCard { return super.use(w, player, hand); } - @Override - public boolean doesSneakBypassUse(ItemStack stack, WorldView world, BlockPos pos, PlayerEntity player) { - return true; - } +// FIXME FABRIC probably needs a custom mixin +// FIXME FABRIC @Override +// FIXME FABRIC public boolean doesSneakBypassUse(ItemStack stack, WorldView world, BlockPos pos, PlayerEntity player) { +// FIXME FABRIC return true; +// FIXME FABRIC } private void clearCard(final PlayerEntity player, final World w, final Hand hand) { final IMemoryCard mem = (IMemoryCard) player.getStackInHand(hand).getItem(); diff --git a/src/unported/java/appeng/items/tools/NetworkToolItem.java b/src/main/java/appeng/items/tools/NetworkToolItem.java similarity index 89% rename from src/unported/java/appeng/items/tools/NetworkToolItem.java rename to src/main/java/appeng/items/tools/NetworkToolItem.java index a6e9d8fc1..75bd5abb5 100644 --- a/src/unported/java/appeng/items/tools/NetworkToolItem.java +++ b/src/main/java/appeng/items/tools/NetworkToolItem.java @@ -18,21 +18,18 @@ package appeng.items.tools; +import appeng.hooks.AEToolItem; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.ActionResult; +import net.minecraft.util.*; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.Direction; -import net.minecraft.util.Hand; -import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.hit.HitResult; -import net.minecraft.world.WorldView; import net.minecraft.world.World; import appeng.api.implementations.guiobjects.IGuiItem; @@ -55,7 +52,7 @@ import appeng.items.AEBaseItem; import appeng.items.contents.NetworkToolViewer; import appeng.util.Platform; -public class NetworkToolItem extends AEBaseItem implements IGuiItem, IAEWrench { +public class NetworkToolItem extends AEBaseItem implements IGuiItem, IAEWrench, AEToolItem { public NetworkToolItem(Settings properties) { super(properties); @@ -87,7 +84,7 @@ public class NetworkToolItem extends AEBaseItem implements IGuiItem, IAEWrench { @Override public ActionResult onItemUseFirst(ItemStack stack, ItemUsageContext context) { final BlockHitResult mop = new BlockHitResult(context.getHitPos(), context.getSide(), - context.getBlockPos(), context.isInside()); + context.getBlockPos(), context.hitsInsideBlock()); final BlockEntity te = context.getWorld().getBlockEntity(context.getBlockPos()); if (te instanceof IPartHost) { @@ -111,13 +108,14 @@ public class NetworkToolItem extends AEBaseItem implements IGuiItem, IAEWrench { return ActionResult.SUCCESS; } - @Override - public boolean doesSneakBypassUse(ItemStack stack, WorldView world, BlockPos pos, PlayerEntity player) { - return true; - } +// FIXME FABRIC: No direct equivalent +// FIXME FABRIC @Override +// FIXME FABRIC public boolean doesSneakBypassUse(ItemStack stack, WorldView world, BlockPos pos, PlayerEntity player) { +// FIXME FABRIC return true; +// FIXME FABRIC } public boolean serverSideToolLogic(ItemUsageContext useContext) { - BlockPos pos = useContext.getPos(); + BlockPos pos = useContext.getBlockPos(); PlayerEntity p = useContext.getPlayer(); World w = p.world; Hand hand = useContext.getHand(); @@ -131,7 +129,9 @@ public class NetworkToolItem extends AEBaseItem implements IGuiItem, IAEWrench { if (!p.isInSneakingPose()) { final BlockEntity te = w.getBlockEntity(pos); if (!(te instanceof IGridHost)) { - if (bs.rotate(w, pos, Rotation.CLOCKWISE_90) != bs) { + BlockState rotatedState = bs.rotate(BlockRotation.CLOCKWISE_90); + if (rotatedState != bs) { + w.setBlockState(pos, rotatedState, 3); bs.neighborUpdate(w, pos, Blocks.AIR, pos, false); p.swingHand(hand); return !w.isClient; @@ -140,7 +140,7 @@ public class NetworkToolItem extends AEBaseItem implements IGuiItem, IAEWrench { } if (!p.isInSneakingPose()) { - if (p.openContainer instanceof AEBaseContainer) { + if (p.currentScreenHandler instanceof AEBaseContainer) { return true; } diff --git a/src/unported/java/appeng/items/tools/powered/BlockRecolorer.java b/src/main/java/appeng/items/tools/powered/BlockRecolorer.java similarity index 100% rename from src/unported/java/appeng/items/tools/powered/BlockRecolorer.java rename to src/main/java/appeng/items/tools/powered/BlockRecolorer.java diff --git a/src/unported/java/appeng/items/tools/powered/ChargedStaffItem.java b/src/main/java/appeng/items/tools/powered/ChargedStaffItem.java similarity index 95% rename from src/unported/java/appeng/items/tools/powered/ChargedStaffItem.java rename to src/main/java/appeng/items/tools/powered/ChargedStaffItem.java index 7d22a7188..2b571193a 100644 --- a/src/unported/java/appeng/items/tools/powered/ChargedStaffItem.java +++ b/src/main/java/appeng/items/tools/powered/ChargedStaffItem.java @@ -38,7 +38,7 @@ public class ChargedStaffItem extends AEBasePoweredItem { } @Override - public boolean hitEntity(final ItemStack item, final LivingEntity target, final LivingEntity hitter) { + public boolean postHit(final ItemStack item, final LivingEntity target, final LivingEntity hitter) { if (this.getAECurrentPower(item) > 300) { this.extractAEPower(item, 300, Actionable.MODULATE); if (Platform.isServer()) { diff --git a/src/unported/java/appeng/items/tools/powered/ColorApplicatorItem.java b/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java similarity index 98% rename from src/unported/java/appeng/items/tools/powered/ColorApplicatorItem.java rename to src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java index cd9829a1d..d6d8ec6e1 100644 --- a/src/unported/java/appeng/items/tools/powered/ColorApplicatorItem.java +++ b/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java @@ -205,7 +205,7 @@ public class ColorApplicatorItem extends AEBasePoweredItem extra = new TranslatableText(selected.translationKey); } - return super.getName(is).append(" - ").append(extra); + return super.getName(is).copy().append(" - ").append(extra); } public AEColor getActiveColor(final ItemStack tol) { @@ -226,7 +226,7 @@ public class ColorApplicatorItem extends AEBasePoweredItem return ipb.getColor(); } else { for (Map.Entry entry : TAG_TO_COLOR.entrySet()) { - Tag tag = ItemTags.getCollection().get(entry.getKey()); + Tag tag = ItemTags.getContainer().get(entry.getKey()); if (tag != null && paintBall.getItem().isIn(tag)) { return entry.getValue(); } @@ -457,4 +457,9 @@ public class ColorApplicatorItem extends AEBasePoweredItem this.cycleColors(is, this.getColor(is), up ? 1 : -1); } + @Override + public boolean canRepair(ItemStack stack, ItemStack ingredient) { + return false; + } + } diff --git a/src/unported/java/appeng/items/tools/powered/ColorApplicatorItemRendering.java b/src/main/java/appeng/items/tools/powered/ColorApplicatorItemRendering.java similarity index 100% rename from src/unported/java/appeng/items/tools/powered/ColorApplicatorItemRendering.java rename to src/main/java/appeng/items/tools/powered/ColorApplicatorItemRendering.java diff --git a/src/unported/java/appeng/items/tools/powered/EntropyManipulatorItem.java b/src/main/java/appeng/items/tools/powered/EntropyManipulatorItem.java similarity index 93% rename from src/unported/java/appeng/items/tools/powered/EntropyManipulatorItem.java rename to src/main/java/appeng/items/tools/powered/EntropyManipulatorItem.java index 0cd2fe442..376e60b8a 100644 --- a/src/unported/java/appeng/items/tools/powered/EntropyManipulatorItem.java +++ b/src/main/java/appeng/items/tools/powered/EntropyManipulatorItem.java @@ -20,26 +20,25 @@ package appeng.items.tools.powered; import java.util.*; +import appeng.mixins.TntAccessor; import appeng.util.FakePlayer; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.TNTBlock; -import net.minecraft.block.Material; +import net.minecraft.block.*; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluids; import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.*; -import net.minecraft.item.crafting.FurnaceRecipe; import net.minecraft.recipe.RecipeType; import net.minecraft.particle.ParticleTypes; +import net.minecraft.recipe.SmeltingRecipe; +import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.state.property.Properties; import net.minecraft.util.*; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import net.minecraft.world.RayTraceContext; import net.minecraft.util.hit.HitResult; import net.minecraft.world.World; @@ -90,7 +89,7 @@ public class EntropyManipulatorItem extends AEBasePoweredItem implements IBlockT this.heatUp.put(new InWorldToolOperationIngredient(Blocks.WATER, Fluids.FLOWING_WATER), new InWorldToolOperationResult()); this.heatUp.put(new InWorldToolOperationIngredient(Blocks.SNOW), new InWorldToolOperationResult( - Blocks.WATER.getDefaultState().with(Properties.LEVEL_0_15, 7), Fluids.FLOWING_WATER)); + Blocks.WATER.getDefaultState().with(Properties.LEVEL_15, 7), Fluids.FLOWING_WATER)); } private static class InWorldToolOperationIngredient { @@ -143,7 +142,7 @@ public class EntropyManipulatorItem extends AEBasePoweredItem implements IBlockT if (!w.isClient) { // Same effect as emptying a water bucket in the nether (see BucketItem) w.playSound(null, pos, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, - 2.6F + (w.rand.nextFloat() - w.rand.nextFloat()) * 0.8F); + 2.6F + (w.random.nextFloat() - w.random.nextFloat()) * 0.8F); for (int l = 0; l < 8; ++l) { w.addParticle(ParticleTypes.LARGE_SMOKE, (double) pos.getX() + Math.random(), (double) pos.getY() + Math.random(), (double) pos.getZ() + Math.random(), 0.0D, 0.0D, 0.0D); @@ -192,10 +191,10 @@ public class EntropyManipulatorItem extends AEBasePoweredItem implements IBlockT } @Override - public boolean hitEntity(final ItemStack item, final LivingEntity target, final LivingEntity hitter) { + public boolean postHit(final ItemStack item, final LivingEntity target, final LivingEntity hitter) { if (this.getAECurrentPower(item) > 1600) { this.extractAEPower(item, 1600, Actionable.MODULATE); - target.setFire(8); + target.setFireTicks(8); } return false; @@ -240,7 +239,7 @@ public class EntropyManipulatorItem extends AEBasePoweredItem implements IBlockT } if (this.getAECurrentPower(item) > 1600) { - if (!p.canPlayerEdit(pos, side, item)) { + if (!p.canPlaceOn(pos, side, item)) { return ActionResult.FAIL; } @@ -255,9 +254,9 @@ public class EntropyManipulatorItem extends AEBasePoweredItem implements IBlockT } } if (tryBoth || !p.isInSneakingPose()) { - if (block instanceof TNTBlock) { + if (block instanceof TntBlock) { + TntAccessor.callPrimeTnt(w, pos, p); w.removeBlock(pos, false); - block.catchFire(w.getBlockState(pos), w, pos, context.getSide(), p); return ActionResult.SUCCESS; } @@ -281,7 +280,7 @@ public class EntropyManipulatorItem extends AEBasePoweredItem implements IBlockT for (final ItemStack i : stack) { CraftingInventory tempInv = new CraftingInventory(new ContainerNull(), 1, 1); tempInv.setStack(0, i); - Optional recipe = w.getRecipeManager().getRecipe(RecipeType.SMELTING, tempInv, w); + Optional recipe = w.getRecipeManager().getFirstMatch(RecipeType.SMELTING, tempInv, w); if (recipe.isPresent()) { ItemStack result = recipe.get().craft(tempInv); @@ -305,7 +304,7 @@ public class EntropyManipulatorItem extends AEBasePoweredItem implements IBlockT .getBlockOperationResult(out.toArray(new ItemStack[0])); w.playSound(p, pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.PLAYERS, 1.0F, - random.nextFloat() * 0.4F + 0.8F); + RANDOM.nextFloat() * 0.4F + 0.8F); if (or.getBlockState() == null) { w.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); @@ -321,7 +320,7 @@ public class EntropyManipulatorItem extends AEBasePoweredItem implements IBlockT } else { final BlockPos offsetPos = pos.offset(side); - if (!p.canPlayerEdit(offsetPos, side, item)) { + if (!p.canPlaceOn(offsetPos, side, item)) { return ActionResult.FAIL; } @@ -329,7 +328,7 @@ public class EntropyManipulatorItem extends AEBasePoweredItem implements IBlockT this.extractAEPower(item, 1600, Actionable.MODULATE); w.playSound(p, offsetPos.getX() + 0.5D, offsetPos.getY() + 0.5D, offsetPos.getZ() + 0.5D, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.PLAYERS, 1.0F, - random.nextFloat() * 0.4F + 0.8F); + RANDOM.nextFloat() * 0.4F + 0.8F); w.setBlockState(offsetPos, Blocks.FIRE.getDefaultState()); } diff --git a/src/unported/java/appeng/items/tools/powered/MatterCannonItem.java b/src/main/java/appeng/items/tools/powered/MatterCannonItem.java similarity index 97% rename from src/unported/java/appeng/items/tools/powered/MatterCannonItem.java rename to src/main/java/appeng/items/tools/powered/MatterCannonItem.java index 86488790c..903e75c00 100644 --- a/src/unported/java/appeng/items/tools/powered/MatterCannonItem.java +++ b/src/main/java/appeng/items/tools/powered/MatterCannonItem.java @@ -31,16 +31,17 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.damage.EntityDamageSource; import net.minecraft.entity.passive.SheepEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.TypedActionResult; import net.minecraft.util.ActionResult; +import net.minecraft.util.Util; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.math.Box; import net.minecraft.util.math.Direction; -import net.minecraft.util.EntityDamageSource; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.hit.BlockHitResult; @@ -250,15 +251,15 @@ public class MatterCannonItem extends AEBasePoweredItem implements IStorageCell< if (entityHit instanceof SheepEntity) { final SheepEntity sh = (SheepEntity) entityHit; - sh.setFleeceColor(col.dye); + sh.setColor(col.dye); } - entityHit.damage(DamageSource.causePlayerDamage(p), 0); + entityHit.damage(DamageSource.player(p), 0); NetworkHandler.instance().sendToAll(marker.getPacket()); } else if (pos instanceof BlockHitResult) { BlockHitResult blockResult = (BlockHitResult) pos; final Direction side = blockResult.getSide(); - final BlockPos hitPos = blockResult.getPos().offset(side); + final BlockPos hitPos = blockResult.getBlockPos().offset(side); if (!Platform.hasPermissions(new DimensionalCoord(w, hitPos), p)) { return; @@ -354,9 +355,7 @@ public class MatterCannonItem extends AEBasePoweredItem implements IStorageCell< if (entityHit instanceof LivingEntity) { final LivingEntity el = (LivingEntity) entityHit; penetration -= dmg; - el.knockBack(p, 0, -direction.x, -direction.z); - // el.knockBack( p, 0, Vec3d.x, - // Vec3d.z ); + el.takeKnockback(0, -direction.x, -direction.z); el.damage(dmgSrc, dmg); if (!el.isAlive()) { hasDestroyed = true; @@ -373,10 +372,10 @@ public class MatterCannonItem extends AEBasePoweredItem implements IStorageCell< if (!AEConfig.instance().isFeatureEnabled(AEFeature.MASS_CANNON_BLOCK_DAMAGE)) { penetration = 0; } else { - BlockPos blockPos = blockResult.getPos(); + BlockPos blockPos = blockResult.getBlockPos(); final BlockState bs = w.getBlockState(blockPos); - final float hardness = bs.getBlockHardness(w, blockPos) * 9.0f; + final float hardness = bs.getHardness(w, blockPos) * 9.0f; if (hardness >= 0.0) { if (penetration > hardness && Platform.hasPermissions(new DimensionalCoord(w, blockPos), p)) { diff --git a/src/unported/java/appeng/items/tools/powered/PortableCellItem.java b/src/main/java/appeng/items/tools/powered/PortableCellItem.java similarity index 95% rename from src/unported/java/appeng/items/tools/powered/PortableCellItem.java rename to src/main/java/appeng/items/tools/powered/PortableCellItem.java index 0f5dd23b4..e4f06e212 100644 --- a/src/unported/java/appeng/items/tools/powered/PortableCellItem.java +++ b/src/main/java/appeng/items/tools/powered/PortableCellItem.java @@ -152,8 +152,9 @@ public class PortableCellItem extends AEBasePoweredItem implements IStorageCell< return new PortableCellViewer(is, playerInventorySlot); } - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return slotChanged; - } +// FIXME FABRIC Needs a custom mixin +// FIXME FABRIC @Override +// FIXME FABRIC public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { +// FIXME FABRIC return slotChanged; +// FIXME FABRIC } } diff --git a/src/unported/java/appeng/items/tools/powered/WirelessTerminalItem.java b/src/main/java/appeng/items/tools/powered/WirelessTerminalItem.java similarity index 89% rename from src/unported/java/appeng/items/tools/powered/WirelessTerminalItem.java rename to src/main/java/appeng/items/tools/powered/WirelessTerminalItem.java index b1cdf8d18..17ad6d6c7 100644 --- a/src/unported/java/appeng/items/tools/powered/WirelessTerminalItem.java +++ b/src/main/java/appeng/items/tools/powered/WirelessTerminalItem.java @@ -20,6 +20,7 @@ package appeng.items.tools.powered; import java.util.List; +import appeng.api.config.*; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.item.TooltipContext; @@ -35,10 +36,6 @@ import net.minecraft.text.Text; import net.minecraft.world.World; import appeng.api.AEApi; -import appeng.api.config.Actionable; -import appeng.api.config.SortDir; -import appeng.api.config.SortOrder; -import appeng.api.config.ViewItems; import appeng.api.features.IWirelessTermHandler; import appeng.api.util.IConfigManager; import appeng.core.AEConfig; @@ -102,9 +99,9 @@ public class WirelessTerminalItem extends AEBasePoweredItem implements IWireless manager.writeToNBT(data); }); - out.registerSetting(Settings.SORT_BY, SortOrder.NAME); - out.registerSetting(Settings.VIEW_MODE, ViewItems.ALL); - out.registerSetting(Settings.SORT_DIRECTION, SortDir.ASCENDING); + out.registerSetting(appeng.api.config.Settings.SORT_BY, SortOrder.NAME); + out.registerSetting(appeng.api.config.Settings.VIEW_MODE, ViewItems.ALL); + out.registerSetting(appeng.api.config.Settings.SORT_DIRECTION, SortDir.ASCENDING); out.readFromNBT(target.getOrCreateTag().copy()); return out; @@ -123,8 +120,9 @@ public class WirelessTerminalItem extends AEBasePoweredItem implements IWireless tag.putString("name", name); } - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return slotChanged; - } +// FIXME FABRIC Needs custom mixin +// FIXME FABRIC @Override +// FIXME FABRIC public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { +// FIXME FABRIC return slotChanged; +// FIXME FABRIC } } diff --git a/src/unported/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java b/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java similarity index 85% rename from src/unported/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java rename to src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java index baf4e4273..bb6059aea 100644 --- a/src/unported/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java +++ b/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java @@ -32,7 +32,6 @@ import net.minecraft.util.collection.DefaultedList; import net.minecraft.text.Text; import net.minecraft.world.World; import net.fabricmc.api.EnvType; -import net.minecraftforge.common.capabilities.ICapabilityProvider; import appeng.api.config.AccessRestriction; import appeng.api.config.Actionable; @@ -67,7 +66,7 @@ public abstract class AEBasePoweredItem extends AEBaseItem implements IAEItemPow final double percent = internalCurrentPower / internalMaxPower; - lines.add(GuiText.StoredEnergy.textComponent() + lines.add(GuiText.StoredEnergy.textComponent().copy() .append(':' + MessageFormat.format(" {0,number,#} ", internalCurrentPower)) .append(new TranslatableText(PowerUnits.AE.unlocalizedName)) .append(" - " + MessageFormat.format(" {0,number,#.##%} ", percent))); @@ -92,20 +91,21 @@ public abstract class AEBasePoweredItem extends AEBaseItem implements IAEItemPow } } - @Override - public double getDurabilityForDisplay(final ItemStack is) { - return 1 - this.getAECurrentPower(is) / this.getAEMaxPower(is); - } - - @Override - public boolean isDamaged(final ItemStack stack) { - return true; - } - - @Override - public void setDamage(final ItemStack stack, final int damage) { - - } +// FIXME FABRIC Currently no direct equivalent +// FIXME FABRIC @Override +// FIXME FABRIC public double getDurabilityForDisplay(final ItemStack is) { +// FIXME FABRIC return 1 - this.getAECurrentPower(is) / this.getAEMaxPower(is); +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC @Override +// FIXME FABRIC public boolean isDamaged(final ItemStack stack) { +// FIXME FABRIC return true; +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC @Override +// FIXME FABRIC public void setDamage(final ItemStack stack, final int damage) { +// FIXME FABRIC +// FIXME FABRIC } @Override public double injectAEPower(final ItemStack is, final double amount, Actionable mode) { @@ -155,8 +155,8 @@ public abstract class AEBasePoweredItem extends AEBaseItem implements IAEItemPow return AccessRestriction.WRITE; } - @Override - public ICapabilityProvider initCapabilities(ItemStack stack, CompoundTag nbt) { - return new PoweredItemCapabilities(stack, this); - } +// FIXME FABRIC @Override +// FIXME FABRIC public ICapabilityProvider initCapabilities(ItemStack stack, CompoundTag nbt) { +// FIXME FABRIC return new PoweredItemCapabilities(stack, this); +// FIXME FABRIC } } diff --git a/src/unported/java/appeng/me/cache/CraftingGridCache.java b/src/main/java/appeng/me/cache/CraftingGridCache.java similarity index 100% rename from src/unported/java/appeng/me/cache/CraftingGridCache.java rename to src/main/java/appeng/me/cache/CraftingGridCache.java diff --git a/src/main/java/appeng/me/cache/P2PCache.java b/src/main/java/appeng/me/cache/P2PCache.java index 14f7b7ab3..100270340 100644 --- a/src/main/java/appeng/me/cache/P2PCache.java +++ b/src/main/java/appeng/me/cache/P2PCache.java @@ -1,41 +1,214 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + package appeng.me.cache; +import java.util.HashMap; +import java.util.Random; + +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; + +import appeng.api.networking.GridFlags; +import appeng.api.networking.IGrid; import appeng.api.networking.IGridCache; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; import appeng.api.networking.IGridStorage; +import appeng.api.networking.events.MENetworkBootingStatusChange; +import appeng.api.networking.events.MENetworkEventSubscribe; +import appeng.api.networking.events.MENetworkPowerStatusChange; +import appeng.api.networking.ticking.ITickManager; +import appeng.core.AELog; +import appeng.me.cache.helpers.TunnelCollection; +import appeng.parts.p2p.MEP2PTunnelPart; +import appeng.parts.p2p.P2PTunnelPart; -import javax.annotation.Nonnull; - -// FIXME FABRIC DUMMY public class P2PCache implements IGridCache { + private static final TunnelCollection NULL_COLLECTION = new TunnelCollection(null, + null); + + private final IGrid myGrid; + private final HashMap inputs = new HashMap<>(); + private final Multimap outputs = LinkedHashMultimap.create(); + private final Random frequencyGenerator; + + public P2PCache(final IGrid g) { + this.myGrid = g; + this.frequencyGenerator = new Random(g.hashCode()); + } + + @MENetworkEventSubscribe + public void bootComplete(final MENetworkBootingStatusChange bootStatus) { + final ITickManager tm = this.myGrid.getCache(ITickManager.class); + for (final P2PTunnelPart me : this.inputs.values()) { + if (me instanceof MEP2PTunnelPart) { + tm.wakeDevice(me.getGridNode()); + } + } + } + + @MENetworkEventSubscribe + public void bootComplete(final MENetworkPowerStatusChange power) { + final ITickManager tm = this.myGrid.getCache(ITickManager.class); + for (final P2PTunnelPart me : this.inputs.values()) { + if (me instanceof MEP2PTunnelPart) { + tm.wakeDevice(me.getGridNode()); + } + } + } + @Override public void onUpdateTick() { } @Override - public void removeNode(@Nonnull IGridNode gridNode, @Nonnull IGridHost machine) { + public void removeNode(final IGridNode node, final IGridHost machine) { + if (machine instanceof P2PTunnelPart) { + if (machine instanceof MEP2PTunnelPart) { + if (!node.hasFlag(GridFlags.REQUIRE_CHANNEL)) { + return; + } + } + + final P2PTunnelPart t = (P2PTunnelPart) machine; + // AELog.info( "rmv-" + (t.output ? "output: " : "input: ") + t.freq ); + + if (t.isOutput()) { + this.outputs.remove(t.getFrequency(), t); + } else { + this.inputs.remove(t.getFrequency()); + } + + this.updateTunnel(t.getFrequency(), !t.isOutput(), false); + } + } + + @Override + public void addNode(final IGridNode node, final IGridHost machine) { + if (machine instanceof P2PTunnelPart) { + if (machine instanceof MEP2PTunnelPart) { + if (!node.hasFlag(GridFlags.REQUIRE_CHANNEL)) { + return; + } + } + + final P2PTunnelPart t = (P2PTunnelPart) machine; + // AELog.info( "add-" + (t.output ? "output: " : "input: ") + t.freq ); + + if (t.isOutput()) { + this.outputs.put(t.getFrequency(), t); + } else { + this.inputs.put(t.getFrequency(), t); + } + + this.updateTunnel(t.getFrequency(), !t.isOutput(), false); + } + } + + @Override + public void onSplit(final IGridStorage storageB) { } @Override - public void addNode(@Nonnull IGridNode gridNode, @Nonnull IGridHost machine) { + public void onJoin(final IGridStorage storageB) { } @Override - public void onSplit(@Nonnull IGridStorage destinationStorage) { + public void populateGridStorage(final IGridStorage storage) { } - @Override - public void onJoin(@Nonnull IGridStorage sourceStorage) { + private void updateTunnel(final short freq, final boolean updateOutputs, final boolean configChange) { + for (final P2PTunnelPart p : this.outputs.get(freq)) { + if (configChange) { + p.onTunnelConfigChange(); + } + p.onTunnelNetworkChange(); + } + final P2PTunnelPart in = this.inputs.get(freq); + if (in != null) { + if (configChange) { + in.onTunnelConfigChange(); + } + in.onTunnelNetworkChange(); + } } - @Override - public void populateGridStorage(@Nonnull IGridStorage destinationStorage) { + public void updateFreq(final P2PTunnelPart t, final short newFrequency) { + if (this.outputs.containsValue(t)) { + this.outputs.remove(t.getFrequency(), t); + } + if (this.inputs.containsValue(t)) { + this.inputs.remove(t.getFrequency()); + } + + t.setFrequency(newFrequency); + + if (t.isOutput()) { + this.outputs.put(t.getFrequency(), t); + } else { + this.inputs.put(t.getFrequency(), t); + } + + // AELog.info( "update-" + (t.output ? "output: " : "input: ") + t.freq ); + this.updateTunnel(t.getFrequency(), t.isOutput(), true); + this.updateTunnel(t.getFrequency(), !t.isOutput(), true); + } + + public short newFrequency() { + short newFrequency; + int cycles = 0; + + do { + newFrequency = (short) this.frequencyGenerator.nextInt(1 << 16); + cycles++; + } while (newFrequency == 0 || this.inputs.containsKey(newFrequency)); + + if (cycles > 25) { + AELog.debug("Generating a new P2P frequency '%1$d' took %2$d cycles", newFrequency, cycles); + } + + return newFrequency; + } + + public TunnelCollection getOutputs(final short freq, final Class c) { + final P2PTunnelPart in = this.inputs.get(freq); + + if (in == null) { + return NULL_COLLECTION; + } + + final TunnelCollection out = this.inputs.get(freq).getCollection(this.outputs.get(freq), c); + + if (out == null) { + return NULL_COLLECTION; + } + + return out; + } + + public P2PTunnelPart getInput(final short freq) { + return this.inputs.get(freq); } } diff --git a/src/main/java/appeng/me/cache/PathGridCache.java b/src/main/java/appeng/me/cache/PathGridCache.java index 0795d816d..fe5445654 100644 --- a/src/main/java/appeng/me/cache/PathGridCache.java +++ b/src/main/java/appeng/me/cache/PathGridCache.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; +import appeng.tile.networking.ControllerBlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.network.ServerPlayerEntity; @@ -56,7 +57,6 @@ import appeng.me.pathfinding.ControllerChannelUpdater; import appeng.me.pathfinding.ControllerValidator; import appeng.me.pathfinding.IPathItem; import appeng.me.pathfinding.PathSegment; -import appeng.tile.networking.ControllerBlockEntity; public class PathGridCache implements IPathingGrid { diff --git a/src/unported/java/appeng/me/cache/SpatialPylonCache.java b/src/main/java/appeng/me/cache/SpatialPylonCache.java similarity index 100% rename from src/unported/java/appeng/me/cache/SpatialPylonCache.java rename to src/main/java/appeng/me/cache/SpatialPylonCache.java diff --git a/src/unported/java/appeng/me/cache/helpers/ConnectionWrapper.java b/src/main/java/appeng/me/cache/helpers/ConnectionWrapper.java similarity index 100% rename from src/unported/java/appeng/me/cache/helpers/ConnectionWrapper.java rename to src/main/java/appeng/me/cache/helpers/ConnectionWrapper.java diff --git a/src/unported/java/appeng/me/cache/helpers/Connections.java b/src/main/java/appeng/me/cache/helpers/Connections.java similarity index 100% rename from src/unported/java/appeng/me/cache/helpers/Connections.java rename to src/main/java/appeng/me/cache/helpers/Connections.java diff --git a/src/unported/java/appeng/me/cache/helpers/TunnelCollection.java b/src/main/java/appeng/me/cache/helpers/TunnelCollection.java similarity index 100% rename from src/unported/java/appeng/me/cache/helpers/TunnelCollection.java rename to src/main/java/appeng/me/cache/helpers/TunnelCollection.java diff --git a/src/unported/java/appeng/me/cache/helpers/TunnelConnection.java b/src/main/java/appeng/me/cache/helpers/TunnelConnection.java similarity index 100% rename from src/unported/java/appeng/me/cache/helpers/TunnelConnection.java rename to src/main/java/appeng/me/cache/helpers/TunnelConnection.java diff --git a/src/unported/java/appeng/me/cache/helpers/TunnelIterator.java b/src/main/java/appeng/me/cache/helpers/TunnelIterator.java similarity index 100% rename from src/unported/java/appeng/me/cache/helpers/TunnelIterator.java rename to src/main/java/appeng/me/cache/helpers/TunnelIterator.java diff --git a/src/unported/java/appeng/me/cluster/MBCalculator.java b/src/main/java/appeng/me/cluster/MBCalculator.java similarity index 100% rename from src/unported/java/appeng/me/cluster/MBCalculator.java rename to src/main/java/appeng/me/cluster/MBCalculator.java diff --git a/src/unported/java/appeng/me/cluster/implementations/CraftingCPUCalculator.java b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCalculator.java similarity index 100% rename from src/unported/java/appeng/me/cluster/implementations/CraftingCPUCalculator.java rename to src/main/java/appeng/me/cluster/implementations/CraftingCPUCalculator.java diff --git a/src/unported/java/appeng/me/cluster/implementations/CraftingCPUCluster.java b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java similarity index 99% rename from src/unported/java/appeng/me/cluster/implementations/CraftingCPUCluster.java rename to src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java index 7e16782f7..36800eec0 100644 --- a/src/unported/java/appeng/me/cluster/implementations/CraftingCPUCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java @@ -26,18 +26,14 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import appeng.util.FakePlayer; import com.google.common.collect.ImmutableList; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.text.Text; import net.minecraft.world.World; -import net.minecraft.server.world.ServerWorld; -import net.minecraftforge.fml.hooks.BasicEventHooks; import appeng.api.AEApi; import appeng.api.config.Actionable; @@ -666,8 +662,8 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU { } if (details.isCraftable()) { - BasicEventHooks.firePlayerCraftingEvent((PlayerEntity) FakePlayer.getOrCreate((ServerWorld) getWorld()), - details.getOutput(ic, this.getWorld()), ic); + // FIXME FABRIC BasicEventHooks.firePlayerCraftingEvent((PlayerEntity) FakePlayer.getOrCreate((ServerWorld) getWorld()), + // FIXME FABRIC details.getOutput(ic, this.getWorld()), ic); for (int x = 0; x < ic.size(); x++) { final ItemStack output = Platform.getRecipeRemainder(ic.getStack(x)); diff --git a/src/unported/java/appeng/me/cluster/implementations/QuantumCalculator.java b/src/main/java/appeng/me/cluster/implementations/QuantumCalculator.java similarity index 100% rename from src/unported/java/appeng/me/cluster/implementations/QuantumCalculator.java rename to src/main/java/appeng/me/cluster/implementations/QuantumCalculator.java diff --git a/src/unported/java/appeng/me/cluster/implementations/QuantumCluster.java b/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java similarity index 88% rename from src/unported/java/appeng/me/cluster/implementations/QuantumCluster.java rename to src/main/java/appeng/me/cluster/implementations/QuantumCluster.java index 0e4fa858d..8d3781f6f 100644 --- a/src/unported/java/appeng/me/cluster/implementations/QuantumCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java @@ -23,10 +23,6 @@ import java.util.Iterator; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.World; -import net.minecraft.world.dimension.DimensionType; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; import appeng.api.AEApi; import appeng.api.events.LocatableEventAnnounce; @@ -62,13 +58,14 @@ public class QuantumCluster implements ILocatable, IAECluster { this.setRing(new QuantumBridgeBlockEntity[8]); } - @SubscribeEvent - public void onUnload(final WorldEvent.Unload e) { - if (this.center.getWorld() == e.getWorld()) { - this.setUpdateStatus(false); - this.destroy(); - } - } +// FIXME FABRIC No similar event available. Possibly chunk??? +// FIXME FABRIC @SubscribeEvent +// FIXME FABRIC public void onUnload(final WorldEvent.Unload e) { +// FIXME FABRIC if (this.center.getWorld() == e.getWorld()) { +// FIXME FABRIC this.setUpdateStatus(false); +// FIXME FABRIC this.destroy(); +// FIXME FABRIC } +// FIXME FABRIC } @Override public void updateStatus(final boolean updateGrid) { @@ -78,7 +75,7 @@ public class QuantumCluster implements ILocatable, IAECluster { if (this.thisSide != qe && this.thisSide != -qe) { if (qe != 0) { if (this.thisSide != 0) { - MinecraftForge.EVENT_BUS.post(new LocatableEventAnnounce(this, LocatableEvent.UNREGISTER)); + LocatableEventAnnounce.EVENT.invoker().onLocatableAnnounce(this, LocatableEvent.UNREGISTER); } if (this.canUseNode(-qe)) { @@ -89,9 +86,9 @@ public class QuantumCluster implements ILocatable, IAECluster { this.otherSide = -qe; } - MinecraftForge.EVENT_BUS.post(new LocatableEventAnnounce(this, LocatableEvent.REGISTER)); + LocatableEventAnnounce.EVENT.invoker().onLocatableAnnounce(this, LocatableEvent.REGISTER); } else { - MinecraftForge.EVENT_BUS.post(new LocatableEventAnnounce(this, LocatableEvent.UNREGISTER)); + LocatableEventAnnounce.EVENT.invoker().onLocatableAnnounce(this, LocatableEvent.UNREGISTER); this.otherSide = 0; this.thisSide = 0; @@ -161,9 +158,8 @@ public class QuantumCluster implements ILocatable, IAECluster { final World theWorld = qc.center.getWorld(); if (!qc.isDestroyed) { ChunkPos cPos = new ChunkPos(qc.center.getPos()); - if (theWorld.getChunkManager().isChunkLoaded(cPos)) { - final DimensionType id = theWorld.dimension.getType(); - final World cur = theWorld.getServer().getWorld(id); + if (theWorld.getChunkManager().isChunkLoaded(cPos.x, cPos.z)) { + final World cur = theWorld.getServer().getWorld(theWorld.getRegistryKey()); final BlockEntity te = theWorld.getBlockEntity(qc.center.getPos()); return te != qc.center || theWorld != cur; @@ -197,13 +193,14 @@ public class QuantumCluster implements ILocatable, IAECluster { this.isDestroyed = true; if (this.registered) { - MinecraftForge.EVENT_BUS.unregister(this); + // FIXME FABRIC -> onWorldUnload event + // FIXME FABRIC MinecraftForge.EVENT_BUS.unregister(this); this.registered = false; } if (this.thisSide != 0) { this.updateStatus(true); - MinecraftForge.EVENT_BUS.post(new LocatableEventAnnounce(this, LocatableEvent.UNREGISTER)); + LocatableEventAnnounce.EVENT.invoker().onLocatableAnnounce(this, LocatableEvent.UNREGISTER); } this.center.updateStatus(null, (byte) -1, this.isUpdateStatus()); @@ -238,7 +235,8 @@ public class QuantumCluster implements ILocatable, IAECluster { void setCenter(final QuantumBridgeBlockEntity c) { this.registered = true; - MinecraftForge.EVENT_BUS.register(this); + // FIXME FABRIC -> onWorldUnload event + // FIXME FABRI MinecraftForge.EVENT_BUS.register(this); this.center = c; } diff --git a/src/unported/java/appeng/me/cluster/implementations/SpatialPylonCalculator.java b/src/main/java/appeng/me/cluster/implementations/SpatialPylonCalculator.java similarity index 100% rename from src/unported/java/appeng/me/cluster/implementations/SpatialPylonCalculator.java rename to src/main/java/appeng/me/cluster/implementations/SpatialPylonCalculator.java diff --git a/src/unported/java/appeng/me/cluster/implementations/SpatialPylonCluster.java b/src/main/java/appeng/me/cluster/implementations/SpatialPylonCluster.java similarity index 100% rename from src/unported/java/appeng/me/cluster/implementations/SpatialPylonCluster.java rename to src/main/java/appeng/me/cluster/implementations/SpatialPylonCluster.java diff --git a/src/unported/java/appeng/me/helpers/AENetworkProxyMultiblock.java b/src/main/java/appeng/me/helpers/AENetworkProxyMultiblock.java similarity index 100% rename from src/unported/java/appeng/me/helpers/AENetworkProxyMultiblock.java rename to src/main/java/appeng/me/helpers/AENetworkProxyMultiblock.java diff --git a/src/main/java/appeng/me/pathfinding/ControllerValidator.java b/src/main/java/appeng/me/pathfinding/ControllerValidator.java index 0067e2ecb..03d416429 100644 --- a/src/main/java/appeng/me/pathfinding/ControllerValidator.java +++ b/src/main/java/appeng/me/pathfinding/ControllerValidator.java @@ -18,12 +18,12 @@ package appeng.me.pathfinding; +import appeng.tile.networking.ControllerBlockEntity; import net.minecraft.util.math.BlockPos; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; import appeng.api.networking.IGridVisitor; -import appeng.tile.networking.ControllerBlockEntity; public class ControllerValidator implements IGridVisitor { diff --git a/src/unported/java/appeng/me/storage/MEMonitorIFluidHandler.java b/src/main/java/appeng/me/storage/MEMonitorIFluidHandler.java similarity index 60% rename from src/unported/java/appeng/me/storage/MEMonitorIFluidHandler.java rename to src/main/java/appeng/me/storage/MEMonitorIFluidHandler.java index 1bad298ab..78d61a1db 100644 --- a/src/unported/java/appeng/me/storage/MEMonitorIFluidHandler.java +++ b/src/main/java/appeng/me/storage/MEMonitorIFluidHandler.java @@ -18,18 +18,13 @@ package appeng.me.storage; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; -import java.util.NavigableMap; -import java.util.concurrent.ConcurrentSkipListMap; - +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.fluid.FluidVolumeUtil; +import alexiil.mc.lib.attributes.fluid.GroupedFluidInv; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; +import alexiil.mc.lib.attributes.fluid.filter.ExactFluidFilter; +import alexiil.mc.lib.attributes.fluid.volume.FluidKey; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; -import net.minecraftforge.fluids.FluidAttributes; -import net.minecraftforge.fluids.capability.IFluidHandler; - import appeng.api.AEApi; import appeng.api.config.AccessRestriction; import appeng.api.config.Actionable; @@ -42,19 +37,24 @@ import appeng.api.storage.IStorageChannel; import appeng.api.storage.channels.IFluidStorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IItemList; +import appeng.fluids.util.AEFluidStack; + +import java.math.RoundingMode; +import java.util.*; +import java.util.Map.Entry; public class MEMonitorIFluidHandler implements IMEMonitor, ITickingMonitor { - private final IFluidHandler handler; + private final GroupedFluidInv handler; private final IItemList list = AEApi.instance().storage() .getStorageChannel(IFluidStorageChannel.class).createList(); private final HashMap, Object> listeners = new HashMap<>(); - private final NavigableMap memory; + private final Map memory; private IActionSource mySource; private StorageFilter mode = StorageFilter.EXTRACTABLE_ONLY; - public MEMonitorIFluidHandler(final IFluidHandler handler) { + public MEMonitorIFluidHandler(final GroupedFluidInv handler) { this.handler = handler; - this.memory = new ConcurrentSkipListMap<>(); + this.memory = new HashMap<>(); } @Override @@ -67,11 +67,16 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki this.listeners.remove(l); } + private Simulation getFluidAction(Actionable actionable){ + return actionable == Actionable.MODULATE ? Simulation.ACTION : Simulation.SIMULATE; + } + @Override public IAEFluidStack injectItems(final IAEFluidStack input, final Actionable type, final IActionSource src) { - final int filled = this.handler.fill(input.getFluidStack(), type.getFluidAction()); + FluidVolume toFill = input.getFluidStack(); + final FluidVolume excess = this.handler.attemptInsertion(toFill, getFluidAction(type)); - if (filled == 0) { + if (excess.equals(toFill)) { return input.copy(); } @@ -79,20 +84,20 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki this.onTick(); } - if (filled == input.getStackSize()) { + if (excess.isEmpty()) { return null; } - final IAEFluidStack o = input.copy(); - o.setStackSize(input.getStackSize() - filled); - return o; + return AEFluidStack.fromFluidVolume(excess, RoundingMode.DOWN); } @Override public IAEFluidStack extractItems(final IAEFluidStack request, final Actionable type, final IActionSource src) { - final FluidVolume removed = this.handler.drain(request.getFluidStack(), type.getFluidAction()); + FluidAmount amount = request.getAmount(); + ExactFluidFilter filter = new ExactFluidFilter(request.getFluid()); + final FluidVolume removed = this.handler.attemptExtraction(filter, amount, getFluidAction(type)); - if (removed.isEmpty() || removed.getAmount() == 0) { + if (removed.isEmpty()) { return null; } @@ -100,9 +105,7 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki this.onTick(); } - final IAEFluidStack o = request.copy(); - o.setStackSize(removed.getAmount()); - return o; + return AEFluidStack.fromFluidVolume(removed, RoundingMode.DOWN); } @Override @@ -110,35 +113,26 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki return AEApi.instance().storage().getStorageChannel(IFluidStorageChannel.class); } + private static final FluidAmount MIN_EXTRACTION_AMOUNT = FluidAmount.of(1, 1000); + @Override public TickRateModulation onTick() { final List changes = new ArrayList<>(); this.list.resetStatus(); - int high = 0; boolean changed = false; - int tankCount = this.handler.getTanks(); - for (int tank = 0; tank < tankCount; ++tank) { - final CachedFluidStack old = this.memory.get(tank); - high = Math.max(high, tank); + Set storedFluids = handler.getStoredFluids(); + for (FluidKey storedFluid : storedFluids) { + CachedFluidStack old = this.memory.get(storedFluid); - FluidVolume newIS = this.handler.getFluidInTank(tank); - if (!newIS.isEmpty() && this.getMode() == StorageFilter.EXTRACTABLE_ONLY) { - // We have to actually check if we could extract _anything_ - if (this.handler.drain(1, IFluidHandler.FluidAction.SIMULATE).isEmpty()) { - // Just to safeguard against tanks that prevent non-bucket-size extractions - if (this.handler.drain(FluidAttributes.BUCKET_VOLUME, IFluidHandler.FluidAction.SIMULATE) - .isEmpty()) { - newIS = FluidVolumeUtil.EMPTY; - } - } - } - final FluidVolume oldIS = old == null ? FluidVolumeUtil.EMPTY : old.fluidStack; + // FIXME FABRIC: This is doing a bunch of work that is likely unnecessary + FluidAmount newAmount = getCurrentAmount(storedFluid); + FluidAmount oldAmount = old == null ? FluidAmount.ZERO : old.volume.amount(); - if (isDifferent(newIS, oldIS)) { - final CachedFluidStack cis = new CachedFluidStack(newIS); - this.memory.put(tank, cis); + if (!newAmount.equals(oldAmount)) { + final CachedFluidStack cis = new CachedFluidStack(storedFluid.withAmount(newAmount)); + this.memory.put(storedFluid, cis); if (old != null && old.aeStack != null) { old.aeStack.setStackSize(-old.aeStack.getStackSize()); @@ -152,14 +146,13 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki changed = true; } else { - final int newSize = newIS.isEmpty() ? 0 : newIS.getAmount(); - final int diff = newSize - (oldIS.isEmpty() ? 0 : oldIS.getAmount()); + final long newSize = newAmount.isZero() ? 0 : newAmount.asLong(1000, RoundingMode.DOWN); + final long diff = newSize - (oldAmount.isZero() ? 0 : oldAmount.asLong(1000, RoundingMode.DOWN)); IAEFluidStack stack = null; - if (!newIS.isEmpty()) { - stack = (old == null || old.aeStack == null ? AEApi.instance().storage() - .getStorageChannel(IFluidStorageChannel.class).createStack(newIS) : old.aeStack.copy()); + if (!newAmount.isZero()) { + stack = (old == null || old.aeStack == null ? AEFluidStack.fromFluidVolume(storedFluid.withAmount(newAmount), RoundingMode.DOWN) : old.aeStack.copy()); } if (stack != null) { stack.setStackSize(newSize); @@ -167,8 +160,8 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki } if (diff != 0 && stack != null) { - final CachedFluidStack cis = new CachedFluidStack(newIS); - this.memory.put(tank, cis); + final CachedFluidStack cis = new CachedFluidStack(storedFluid.withAmount(newAmount)); + this.memory.put(storedFluid, cis); final IAEFluidStack a = stack.copy(); a.setStackSize(diff); @@ -179,17 +172,29 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki } // detect dropped items; should fix non IISided Inventory Changes. - final NavigableMap end = this.memory.tailMap(high, false); - if (!end.isEmpty()) { - for (final CachedFluidStack cis : end.values()) { - if (cis != null && cis.aeStack != null) { - final IAEFluidStack a = cis.aeStack.copy(); - a.setStackSize(-a.getStackSize()); - changes.add(a); - changed = true; - } + Set toRemove = null; + for (final Entry entry : memory.entrySet()) { + if (storedFluids.contains(entry.getKey())) { + continue; // Still stored + } + + if (toRemove == null) { + toRemove = new HashSet<>(); + } + toRemove.add(entry.getKey()); + + if (entry.getValue().aeStack != null) { + final IAEFluidStack a = entry.getValue().aeStack.copy(); + a.setStackSize(-a.getStackSize()); + changes.add(a); + changed = true; + } + } + // Now clean up if any removed entries were found + if (toRemove != null) { + for (FluidKey fluidKey : toRemove) { + memory.remove(fluidKey); } - end.clear(); } if (!changes.isEmpty()) { @@ -199,6 +204,21 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki return changed ? TickRateModulation.URGENT : TickRateModulation.SLOWER; } + private FluidAmount getCurrentAmount(FluidKey storedFluid) { + FluidAmount newAmount = this.handler.getAmount_F(storedFluid); + if (!newAmount.isZero() && this.getMode() == StorageFilter.EXTRACTABLE_ONLY) { + // We have to actually check if we could extract _anything_ + ExactFluidFilter filter = new ExactFluidFilter(storedFluid); + if (this.handler.attemptExtraction(filter, MIN_EXTRACTION_AMOUNT, Simulation.SIMULATE).isEmpty()) { + // Just to safeguard against tanks that prevent non-bucket-size extractions + if (this.handler.attemptExtraction(filter, FluidAmount.BUCKET, Simulation.SIMULATE).isEmpty()) { + newAmount = FluidAmount.ZERO; + } + } + } + return newAmount; + } + private static boolean isDifferent(FluidVolume a, FluidVolume b) { if (a == b) { return false; @@ -288,16 +308,16 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki private static class CachedFluidStack { - private final FluidVolume fluidStack; + private final FluidVolume volume; private final IAEFluidStack aeStack; - CachedFluidStack(final FluidVolume is) { - if (is.isEmpty()) { - this.fluidStack = FluidVolumeUtil.EMPTY; - this.aeStack = null; + CachedFluidStack(FluidVolume volume) { + this.aeStack = AEFluidStack.fromFluidVolume(volume, RoundingMode.DOWN); + if (aeStack != null) { + // This ensures that the amount is equal if it was rounded down + this.volume = aeStack.getFluidStack(); } else { - this.fluidStack = is.copy(); - this.aeStack = AEApi.instance().storage().getStorageChannel(IFluidStorageChannel.class).createStack(is); + this.volume = FluidVolumeUtil.EMPTY; } } } diff --git a/src/unported/java/appeng/me/storage/SecurityStationInventory.java b/src/main/java/appeng/me/storage/SecurityStationInventory.java similarity index 100% rename from src/unported/java/appeng/me/storage/SecurityStationInventory.java rename to src/main/java/appeng/me/storage/SecurityStationInventory.java diff --git a/src/main/java/appeng/mixins/RenderPhaseMixin.java b/src/main/java/appeng/mixins/RenderPhaseMixin.java new file mode 100644 index 000000000..f5468ca50 --- /dev/null +++ b/src/main/java/appeng/mixins/RenderPhaseMixin.java @@ -0,0 +1,15 @@ +package appeng.mixins; + +import net.minecraft.client.render.RenderPhase; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(RenderPhase.class) +public interface RenderPhaseMixin { + + @Accessor("TRANSLUCENT_TRANSPARENCY") + static RenderPhase.Transparency getTranslucentTransparency() { + throw new AssertionError("Mixin dummy"); + } + +} diff --git a/src/main/java/appeng/mixins/ScreenHandlerListeners.java b/src/main/java/appeng/mixins/ScreenHandlerListeners.java new file mode 100644 index 000000000..98f4b9f23 --- /dev/null +++ b/src/main/java/appeng/mixins/ScreenHandlerListeners.java @@ -0,0 +1,17 @@ +package appeng.mixins; + +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerListener; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; + +@Mixin(ScreenHandler.class) +public interface ScreenHandlerListeners { + + @Accessor("listeners") + List ae2_getListeners(); + +} diff --git a/src/main/java/appeng/mixins/SlotMixin.java b/src/main/java/appeng/mixins/SlotMixin.java new file mode 100644 index 000000000..4ceb51474 --- /dev/null +++ b/src/main/java/appeng/mixins/SlotMixin.java @@ -0,0 +1,19 @@ +package appeng.mixins; + +import net.minecraft.screen.slot.Slot; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(Slot.class) +public interface SlotMixin { + + @Accessor("x") + void setX(int value); + + @Accessor("y") + void setY(int value); + + @Accessor("index") + int getIndex(); + +} diff --git a/src/main/java/appeng/mixins/TntAccessor.java b/src/main/java/appeng/mixins/TntAccessor.java new file mode 100644 index 000000000..4aabd48f5 --- /dev/null +++ b/src/main/java/appeng/mixins/TntAccessor.java @@ -0,0 +1,20 @@ +package appeng.mixins; + +import net.minecraft.block.TntBlock; +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import javax.annotation.Nullable; + +@Mixin(TntBlock.class) +public interface TntAccessor { + + @Invoker + static void callPrimeTnt(World world, BlockPos pos, @Nullable LivingEntity igniter) { + throw new AssertionError("Mixin dummy"); + } + +} diff --git a/src/main/java/appeng/parts/AEBasePart.java b/src/main/java/appeng/parts/AEBasePart.java index 8352a171f..4d25a4ab0 100644 --- a/src/main/java/appeng/parts/AEBasePart.java +++ b/src/main/java/appeng/parts/AEBasePart.java @@ -455,4 +455,5 @@ public abstract class AEBasePart implements IPart, IGridProxyable, IActionHost, public ItemStack getItemStack() { return this.is; } + } diff --git a/src/unported/java/appeng/parts/automation/AbstractFormationPlanePart.java b/src/main/java/appeng/parts/automation/AbstractFormationPlanePart.java similarity index 100% rename from src/unported/java/appeng/parts/automation/AbstractFormationPlanePart.java rename to src/main/java/appeng/parts/automation/AbstractFormationPlanePart.java diff --git a/src/unported/java/appeng/parts/automation/AnnihilationPlanePart.java b/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java similarity index 94% rename from src/unported/java/appeng/parts/automation/AnnihilationPlanePart.java rename to src/main/java/appeng/parts/automation/AnnihilationPlanePart.java index 59cf9bbfe..ac323f11d 100644 --- a/src/unported/java/appeng/parts/automation/AnnihilationPlanePart.java +++ b/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java @@ -22,8 +22,10 @@ import java.util.Collections; import java.util.List; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import appeng.util.FakePlayer; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -35,6 +37,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.item.ToolMaterials; import net.minecraft.tag.Tag; import net.minecraft.tag.BlockTags; import net.minecraft.tag.ItemTags; @@ -46,8 +49,6 @@ import net.minecraft.world.BlockView; import net.minecraft.world.World; import net.minecraft.server.world.ServerWorld; -import net.minecraftforge.common.util.FakePlayerFactory; - import appeng.api.AEApi; import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; @@ -469,7 +470,7 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab * Checks if this plane can handle the block at the specific coordinates. */ private boolean canHandleBlock(final ServerWorld w, final BlockPos pos, final BlockState state) { - if (state.isAir(w, pos)) { + if (state.isAir()) { return false; } @@ -478,24 +479,24 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab } final Material material = state.getMaterial(); - final float hardness = state.getBlockHardness(w, pos); + final float hardness = state.getHardness(w, pos); final boolean ignoreMaterials = material == Material.AIR || material == Material.LAVA || material == Material.WATER || material.isLiquid(); return !ignoreMaterials && hardness >= 0f && w.isChunkLoaded(pos) - && w.canPlayerModifyAt((PlayerEntity) FakePlayer.getOrCreate(w), pos); + && w.canPlayerModifyAt(FakePlayer.getOrCreate(w), pos); } protected List obtainBlockDrops(final ServerWorld w, final BlockPos pos) { - Entity fakePlayer = FakePlayerFactory.getMinecraft(w); + Entity fakePlayer = FakePlayer.getOrCreate(w); final BlockState state = w.getBlockState(pos); ItemStack harvestTool = createHarvestTool(state); if (harvestTool == null) { - if (!state.getMaterial().isToolNotRequired()) { + if (!state.isToolRequired()) { harvestTool = ItemStack.EMPTY; } else { // In case the block does NOT allow us to harvest it without a tool, or the @@ -513,7 +514,7 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab */ protected float calculateEnergyUsage(final ServerWorld w, final BlockPos pos, final List items) { final BlockState state = w.getBlockState(pos); - final float hardness = state.getBlockHardness(w, pos); + final float hardness = state.getHardness(w, pos); float requiredEnergy = 1 + hardness; for (final ItemStack is : items) { @@ -566,8 +567,8 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab // This handles items that do not spawn via loot-tables but rather normal block // breaking // i.e. our cable-buses do this (bad practice, really) - final Box box = new Box(pos).grow(0.2); - for (final Object ei : w.getEntitiesWithinAABB(ItemEntity.class, box)) { + final Box box = new Box(pos).expand(0.2); + for (final Object ei : w.getEntities(ItemEntity.class, box, null)) { if (ei instanceof ItemEntity) { final ItemEntity entityItem = (ItemEntity) ei; this.storeEntityItem(entityItem); @@ -579,8 +580,6 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab private void refresh() { this.isAccepting = true; - getTile().requestModelDataUpdate(); - try { this.getProxy().getTick().alertDevice(this.getProxy().getNode()); } catch (final GridAccessException e) { @@ -593,12 +592,18 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab return MODELS.getModel(this.isPowered(), this.isActive()); } - @Nonnull + @Nullable @Override - public IModelData getModelData() { - return new PlaneModelData(getConnections()); + public Object getModelData() { + return getConnections(); } + private static final Item[] SUPPORTED_HARVEST_TOOLS = { + Items.DIAMOND_AXE, + Items.DIAMOND_PICKAXE, + Items.DIAMOND_SHOVEL, + }; + /** * Creates the fake (and temporary) tool that will be used to calculate the loot * tables of a block this plane wants to break. @@ -607,16 +612,12 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab */ protected ItemStack createHarvestTool(BlockState state) { // Try to use the right tool... - Tag harvestToolType = state.getBlock().getHarvestTool(state); - if (harvestToolType == FabricToolTags.AXES) { - return new ItemStack(Items.DIAMOND_AXE, 1); - } else if (harvestToolType == FabricToolTags.SHOVELS) { - return new ItemStack(Items.DIAMOND_SHOVEL, 1); - } else if (harvestToolType == FabricToolTags.PICKAXES) { - return new ItemStack(Items.DIAMOND_PICKAXE, 1); - } else { - return null; + for (Item toolItem : SUPPORTED_HARVEST_TOOLS) { + if (toolItem.isEffectiveOn(state)) { + return new ItemStack(toolItem); + } } + return null; } public static boolean isBlockBlacklisted(Block b) { @@ -625,7 +626,7 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab } public static boolean isItemBlacklisted(Item i) { - Tag tag = ItemTags.getCollection().getOrCreate(TAG_BLACKLIST); + Tag tag = ItemTags.getContainer().getOrCreate(TAG_BLACKLIST); return i.isIn(tag); } diff --git a/src/unported/java/appeng/parts/automation/DefinitionUpgradeInventory.java b/src/main/java/appeng/parts/automation/DefinitionUpgradeInventory.java similarity index 100% rename from src/unported/java/appeng/parts/automation/DefinitionUpgradeInventory.java rename to src/main/java/appeng/parts/automation/DefinitionUpgradeInventory.java diff --git a/src/unported/java/appeng/parts/automation/ExportBusPart.java b/src/main/java/appeng/parts/automation/ExportBusPart.java similarity index 99% rename from src/unported/java/appeng/parts/automation/ExportBusPart.java rename to src/main/java/appeng/parts/automation/ExportBusPart.java index 0c7ec8302..9191ce2ad 100644 --- a/src/unported/java/appeng/parts/automation/ExportBusPart.java +++ b/src/main/java/appeng/parts/automation/ExportBusPart.java @@ -59,7 +59,6 @@ import appeng.core.AELog; import appeng.core.AppEng; import appeng.core.settings.TickRates; import appeng.helpers.MultiCraftingTracker; -import appeng.helpers.Reflected; import appeng.items.parts.PartModels; import appeng.me.GridAccessException; import appeng.me.helpers.MachineSource; @@ -90,7 +89,6 @@ public class ExportBusPart extends SharedItemBusPart implements ICraftingRequest private boolean didSomething = false; private int nextSlot = 0; - @Reflected public ExportBusPart(final ItemStack is) { super(is); diff --git a/src/unported/java/appeng/parts/automation/FormationPlanePart.java b/src/main/java/appeng/parts/automation/FormationPlanePart.java similarity index 86% rename from src/unported/java/appeng/parts/automation/FormationPlanePart.java rename to src/main/java/appeng/parts/automation/FormationPlanePart.java index 92280bba5..c968cafd6 100644 --- a/src/unported/java/appeng/parts/automation/FormationPlanePart.java +++ b/src/main/java/appeng/parts/automation/FormationPlanePart.java @@ -18,49 +18,9 @@ package appeng.parts.automation; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import appeng.util.FakePlayer; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.entity.Entity; -import net.minecraft.entity.ItemEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.item.BlockItem; -import net.minecraft.item.AutomaticItemPlacementContext; -import net.minecraft.item.FireworkRocketItem; -import net.minecraft.item.FireworkStarItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.item.WallOrFloorItem; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.ActionResult; -import net.minecraft.util.math.Direction; -import net.minecraft.util.Hand; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraft.server.world.ServerWorld; - -import net.minecraftforge.common.IPlantable; import alexiil.mc.lib.attributes.item.FixedItemInv; - import appeng.api.AEApi; -import appeng.api.config.AccessRestriction; -import appeng.api.config.Actionable; -import appeng.api.config.FuzzyMode; -import appeng.api.config.IncludeExclude; -import appeng.api.config.Settings; -import appeng.api.config.Upgrades; -import appeng.api.config.YesNo; +import appeng.api.config.*; import appeng.api.networking.events.MENetworkCellArrayUpdate; import appeng.api.networking.events.MENetworkChannelsChanged; import appeng.api.networking.events.MENetworkEventSubscribe; @@ -82,10 +42,32 @@ import appeng.items.parts.PartModels; import appeng.me.GridAccessException; import appeng.me.storage.MEInventoryHandler; import appeng.tile.inventory.AppEngInternalAEInventory; +import appeng.util.FakePlayer; import appeng.util.Platform; import appeng.util.inv.InvOperation; import appeng.util.prioritylist.FuzzyPriorityList; import appeng.util.prioritylist.PrecisePriorityList; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.*; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class FormationPlanePart extends AbstractFormationPlanePart { @@ -223,8 +205,8 @@ public class FormationPlanePart extends AbstractFormationPlanePart final BlockPos placePos = te.getPos().offset(side.getFacing()); if (w.getBlockState(placePos).getMaterial().isReplaceable()) { - if (placeBlock == YesNo.YES && (i instanceof BlockItem || i instanceof IPlantable - || i instanceof FireworkStarItem || i instanceof FireworkRocketItem || i instanceof IPartItem)) { + if (placeBlock == YesNo.YES && (i instanceof BlockItem + || i instanceof FireworkChargeItem || i instanceof FireworkItem || i instanceof IPartItem)) { final PlayerEntity player = FakePlayer.getOrCreate((ServerWorld) w); Platform.configurePlayer(player, side, this.getTile()); Hand hand = player.getActiveHand(); @@ -238,36 +220,36 @@ public class FormationPlanePart extends AbstractFormationPlanePart Direction lookDirection = side.getFacing(); // FIXME No idea what any of this is _supposed_ to do, comment badly needed - if (i instanceof IPlantable || i instanceof WallOrFloorItem) { + if (i instanceof WallStandingBlockItem) { boolean Worked = false; // Up or Down, Attempt 1?? if (side.xOffset == 0 && side.zOffset == 0) { - Worked = i.onItemUse(new AutomaticItemPlacementContext(w, placePos.offset(side.getFacing()), + Worked = i.useOnBlock(new AutomaticItemPlacementContext(w, placePos.offset(side.getFacing()), lookDirection, is, side.getFacing())) == ActionResult.SUCCESS; } // Up or Down, Attempt 2?? if (!Worked && side.xOffset == 0 && side.zOffset == 0) { - Worked = i.onItemUse(new AutomaticItemPlacementContext(w, + Worked = i.useOnBlock(new AutomaticItemPlacementContext(w, placePos.offset(side.getFacing().getOpposite()), lookDirection, is, side.getFacing().getOpposite())) == ActionResult.SUCCESS; } // Horizontal, attempt 1?? if (!Worked && side.yOffset == 0) { - Worked = i.onItemUse(new AutomaticItemPlacementContext(w, placePos.offset(Direction.DOWN), + Worked = i.useOnBlock(new AutomaticItemPlacementContext(w, placePos.offset(Direction.DOWN), lookDirection, is, Direction.DOWN)) == ActionResult.SUCCESS; } if (!Worked) { - i.onItemUse(new AutomaticItemPlacementContext(w, placePos, lookDirection, is, + i.useOnBlock(new AutomaticItemPlacementContext(w, placePos, lookDirection, is, lookDirection.getOpposite())); } maxStorage -= is.getCount(); } else { - i.onItemUse(new AutomaticItemPlacementContext(w, placePos, lookDirection, is, + i.useOnBlock(new AutomaticItemPlacementContext(w, placePos, lookDirection, is, lookDirection.getOpposite())); maxStorage -= is.getCount(); } @@ -298,14 +280,15 @@ public class FormationPlanePart extends AbstractFormationPlanePart ei.setVelocity(side.xOffset * 0.2, side.yOffset * 0.2, side.zOffset * 0.2); - if (is.getItem().hasCustomEntity(is)) { - result = is.getItem().createEntity(w, ei, is); - if (result != null) { - ei.remove(); - } else { - result = ei; - } - } + // FIXME FABRIC No custom item entity support + // FIXME FABRIC if (is.getItem().hasCustomEntity(is)) { + // FIXME FABRIC result = is.getItem().createEntity(w, ei, is); + // FIXME FABRIC if (result != null) { + // FIXME FABRIC ei.remove(); + // FIXME FABRIC } else { + // FIXME FABRIC result = ei; + // FIXME FABRIC } + // FIXME FABRIC } if (!w.spawnEntity(result)) { result.remove(); @@ -342,10 +325,9 @@ public class FormationPlanePart extends AbstractFormationPlanePart return MODELS.getModel(this.isPowered(), this.isActive()); } - @Nonnull @Override - public IModelData getModelData() { - return new PlaneModelData(getConnections()); + public Object getModelData() { + return getConnections(); } @Override @@ -359,8 +341,8 @@ public class FormationPlanePart extends AbstractFormationPlanePart } private int countEntitesAround(World world, BlockPos pos) { - final Box t = new Box(pos).grow(8); - final List list = world.getEntitiesWithinAABB(Entity.class, t); + final Box t = new Box(pos).expand(8); + final List list = world.getEntities(Entity.class, t, null); return list.size(); } diff --git a/src/unported/java/appeng/parts/automation/IdentityAnnihilationPlanePart.java b/src/main/java/appeng/parts/automation/IdentityAnnihilationPlanePart.java similarity index 93% rename from src/unported/java/appeng/parts/automation/IdentityAnnihilationPlanePart.java rename to src/main/java/appeng/parts/automation/IdentityAnnihilationPlanePart.java index c285fb54c..c469f2a6a 100644 --- a/src/unported/java/appeng/parts/automation/IdentityAnnihilationPlanePart.java +++ b/src/main/java/appeng/parts/automation/IdentityAnnihilationPlanePart.java @@ -77,7 +77,7 @@ public class IdentityAnnihilationPlanePart extends AnnihilationPlanePart { // For silk touch purposes, enchant the fake tool if (harvestTool != null) { - EnchantmentHelper.setEnchantments(ImmutableMap.of(Enchantments.SILK_TOUCH, 1), harvestTool); + EnchantmentHelper.set(ImmutableMap.of(Enchantments.SILK_TOUCH, 1), harvestTool); } return harvestTool; @@ -90,8 +90,8 @@ public class IdentityAnnihilationPlanePart extends AnnihilationPlanePart { @Nonnull @Override - public IModelData getModelData() { - return new PlaneModelData(getConnections()); + public Object getModelData() { + return getConnections(); } } diff --git a/src/unported/java/appeng/parts/automation/ImportBusPart.java b/src/main/java/appeng/parts/automation/ImportBusPart.java similarity index 99% rename from src/unported/java/appeng/parts/automation/ImportBusPart.java rename to src/main/java/appeng/parts/automation/ImportBusPart.java index 21e3f8ea3..be3f0c899 100644 --- a/src/unported/java/appeng/parts/automation/ImportBusPart.java +++ b/src/main/java/appeng/parts/automation/ImportBusPart.java @@ -48,7 +48,7 @@ import appeng.container.ContainerOpener; import appeng.container.implementations.UpgradeableContainer; import appeng.core.AppEng; import appeng.core.settings.TickRates; -import appeng.helpers.Reflected; + import appeng.items.parts.PartModels; import appeng.me.GridAccessException; import appeng.me.helpers.MachineSource; @@ -75,7 +75,7 @@ public class ImportBusPart extends SharedItemBusPart implements IInventoryDestin private int itemsToSend; // used in tickingRequest private boolean worked; // used in tickingRequest - @Reflected + public ImportBusPart(final ItemStack is) { super(is); diff --git a/src/unported/java/appeng/parts/automation/LevelEmitterPart.java b/src/main/java/appeng/parts/automation/LevelEmitterPart.java similarity index 99% rename from src/unported/java/appeng/parts/automation/LevelEmitterPart.java rename to src/main/java/appeng/parts/automation/LevelEmitterPart.java index afa24ca71..611864e22 100644 --- a/src/unported/java/appeng/parts/automation/LevelEmitterPart.java +++ b/src/main/java/appeng/parts/automation/LevelEmitterPart.java @@ -74,7 +74,6 @@ import appeng.container.ContainerLocator; import appeng.container.ContainerOpener; import appeng.container.implementations.LevelEmitterContainer; import appeng.core.AppEng; -import appeng.helpers.Reflected; import appeng.items.parts.PartModels; import appeng.me.GridAccessException; import appeng.parts.PartModel; @@ -124,7 +123,6 @@ public class LevelEmitterPart extends UpgradeablePart implements IEnergyWatcherH private double centerY; private double centerZ; - @Reflected public LevelEmitterPart(final ItemStack is) { super(is); @@ -393,7 +391,7 @@ public class LevelEmitterPart extends UpgradeablePart implements IEnergyWatcherH final double d1 = d.yOffset * 0.45F + (r.nextFloat() - 0.5F) * 0.2D; final double d2 = d.zOffset * 0.45F + (r.nextFloat() - 0.5F) * 0.2D; - world.addParticle(DustParticleEffect.REDSTONE_DUST, 0.5 + pos.getX() + d0, 0.5 + pos.getY() + d1, + world.addParticle(DustParticleEffect.RED, 0.5 + pos.getX() + d0, 0.5 + pos.getY() + d1, 0.5 + pos.getZ() + d2, 0.0D, 0.0D, 0.0D); } } diff --git a/src/unported/java/appeng/parts/automation/PlaneConnections.java b/src/main/java/appeng/parts/automation/PlaneConnections.java similarity index 100% rename from src/unported/java/appeng/parts/automation/PlaneConnections.java rename to src/main/java/appeng/parts/automation/PlaneConnections.java diff --git a/src/unported/java/appeng/parts/automation/PlaneModels.java b/src/main/java/appeng/parts/automation/PlaneModels.java similarity index 100% rename from src/unported/java/appeng/parts/automation/PlaneModels.java rename to src/main/java/appeng/parts/automation/PlaneModels.java diff --git a/src/unported/java/appeng/parts/automation/SharedItemBusPart.java b/src/main/java/appeng/parts/automation/SharedItemBusPart.java similarity index 96% rename from src/unported/java/appeng/parts/automation/SharedItemBusPart.java rename to src/main/java/appeng/parts/automation/SharedItemBusPart.java index b5b54afdd..07adf4c3d 100644 --- a/src/unported/java/appeng/parts/automation/SharedItemBusPart.java +++ b/src/main/java/appeng/parts/automation/SharedItemBusPart.java @@ -90,7 +90,8 @@ public abstract class SharedItemBusPart extends UpgradeablePart implements IGrid private BlockEntity getBlockEntity(final BlockEntity self, final BlockPos pos) { final World w = self.getWorld(); - if (w.getChunkManager().isChunkLoaded(new ChunkPos(pos))) { + ChunkPos cp = new ChunkPos(pos); + if (w.getChunkManager().isChunkLoaded(cp.x, cp.z)) { return w.getBlockEntity(pos); } @@ -129,7 +130,8 @@ public abstract class SharedItemBusPart extends UpgradeablePart implements IGrid final BlockPos selfPos = self.getPos().offset(this.getSide().getFacing()); final World world = self.getWorld(); - return world != null && world.getChunkManager().isChunkLoaded(new ChunkPos(selfPos)); + ChunkPos cp = new ChunkPos(selfPos); + return world != null && world.getChunkManager().isChunkLoaded(cp.x, cp.z); } private void updateState() { diff --git a/src/unported/java/appeng/parts/automation/UpgradeablePart.java b/src/main/java/appeng/parts/automation/UpgradeablePart.java similarity index 100% rename from src/unported/java/appeng/parts/automation/UpgradeablePart.java rename to src/main/java/appeng/parts/automation/UpgradeablePart.java diff --git a/src/unported/java/appeng/parts/misc/InterfacePart.java b/src/main/java/appeng/parts/misc/InterfacePart.java similarity index 96% rename from src/unported/java/appeng/parts/misc/InterfacePart.java rename to src/main/java/appeng/parts/misc/InterfacePart.java index 18fdcc727..d3e7b9838 100644 --- a/src/unported/java/appeng/parts/misc/InterfacePart.java +++ b/src/main/java/appeng/parts/misc/InterfacePart.java @@ -21,6 +21,7 @@ package appeng.parts.misc; import java.util.EnumSet; import java.util.List; +import alexiil.mc.lib.attributes.AttributeList; import alexiil.mc.lib.attributes.item.FixedItemInv; import com.google.common.collect.ImmutableSet; @@ -34,8 +35,6 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.util.math.Vec3d; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; import appeng.api.AEApi; import appeng.api.config.Actionable; @@ -66,7 +65,6 @@ import appeng.core.AppEng; import appeng.helpers.DualityInterface; import appeng.helpers.IInterfaceHost; import appeng.helpers.IPriorityHost; -import appeng.helpers.Reflected; import appeng.items.parts.PartModels; import appeng.parts.BasicStatePart; import appeng.parts.PartModel; @@ -94,7 +92,6 @@ public class InterfacePart extends BasicStatePart implements IGridTickable, ISto private final DualityInterface duality = new DualityInterface(this.getProxy(), this); - @Reflected public InterfacePart(final ItemStack is) { super(is); } @@ -264,8 +261,8 @@ public class InterfacePart extends BasicStatePart implements IGridTickable, ISto } @Override - public LazyOptional getCapability(Capability capabilityClass) { - return this.duality.getCapability(capabilityClass, this.getSide().getFacing()); + public void addAllAttributes(AttributeList to) { + this.duality.addAllAttributes(to); } @Override diff --git a/src/unported/java/appeng/parts/misc/ItemHandlerAdapter.java b/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java similarity index 96% rename from src/unported/java/appeng/parts/misc/ItemHandlerAdapter.java rename to src/main/java/appeng/parts/misc/ItemHandlerAdapter.java index 84b7437a1..903b053c3 100644 --- a/src/unported/java/appeng/parts/misc/ItemHandlerAdapter.java +++ b/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import alexiil.mc.lib.attributes.Simulation; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.item.ItemStack; @@ -73,7 +74,7 @@ class ItemHandlerAdapter implements IMEInventory, IBaseMonitor, IBaseMonitor, IBaseMonitor remainingCurrentSlot) { // Something broke. It should never return more than we requested... diff --git a/src/unported/java/appeng/parts/misc/SharedStorageBusPart.java b/src/main/java/appeng/parts/misc/SharedStorageBusPart.java similarity index 100% rename from src/unported/java/appeng/parts/misc/SharedStorageBusPart.java rename to src/main/java/appeng/parts/misc/SharedStorageBusPart.java diff --git a/src/unported/java/appeng/parts/misc/StorageBusPart.java b/src/main/java/appeng/parts/misc/StorageBusPart.java similarity index 93% rename from src/unported/java/appeng/parts/misc/StorageBusPart.java rename to src/main/java/appeng/parts/misc/StorageBusPart.java index 22dc2d0f5..0efdaea15 100644 --- a/src/unported/java/appeng/parts/misc/StorageBusPart.java +++ b/src/main/java/appeng/parts/misc/StorageBusPart.java @@ -22,19 +22,21 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import alexiil.mc.lib.attributes.Attributes; +import alexiil.mc.lib.attributes.item.ItemAttributes; +import appeng.attributes.MEAttributes; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; import net.minecraft.util.math.Direction; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.BlockView; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.CapabilityItemHandler; import alexiil.mc.lib.attributes.item.FixedItemInv; import appeng.api.AEApi; @@ -72,7 +74,6 @@ import appeng.api.storage.data.IItemList; import appeng.api.util.AECableType; import appeng.api.util.AEPartLocation; import appeng.api.util.IConfigManager; -import appeng.capabilities.Capabilities; import appeng.container.ContainerLocator; import appeng.container.ContainerOpener; import appeng.container.implementations.StorageBusContainer; @@ -80,7 +81,6 @@ import appeng.core.AppEng; import appeng.core.settings.TickRates; import appeng.helpers.IInterfaceHost; import appeng.helpers.IPriorityHost; -import appeng.helpers.Reflected; import appeng.items.parts.PartModels; import appeng.me.GridAccessException; import appeng.me.helpers.MachineSource; @@ -122,7 +122,6 @@ public class StorageBusPart extends UpgradeablePart private boolean wasActive = false; private byte resetCacheLogic = 0; - @Reflected public StorageBusPart(final ItemStack is) { super(is); this.getConfigManager().registerSetting(Settings.ACCESS, AccessRestriction.READ_WRITE); @@ -334,11 +333,9 @@ public class StorageBusPart extends UpgradeablePart Direction targetSide = this.getSide().getFacing().getOpposite(); // Prioritize a handler to directly link to another ME network - final LazyOptional accessorOpt = target - .getCapability(Capabilities.STORAGE_MONITORABLE_ACCESSOR, targetSide); - if (accessorOpt.isPresent()) { - IStorageMonitorableAccessor accessor = accessorOpt.orElse(null); + IStorageMonitorableAccessor accessor = getMeAccessor(target, targetSide); + if (accessor != null) { IStorageMonitorable inventory = accessor.getInventory(this.mySrc); if (inventory != null) { return inventory.getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class)); @@ -355,10 +352,9 @@ public class StorageBusPart extends UpgradeablePart } // Check via cap for IItemHandler - final LazyOptional handlerExtOpt = target - .getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetSide); - if (handlerExtOpt.isPresent()) { - return new ItemHandlerAdapter(handlerExtOpt.orElse(null), this); + FixedItemInv handlerExt = getFixedItemInv(target, targetSide); + if (handlerExt != null) { + return new ItemHandlerAdapter(handlerExt, this); } return null; @@ -373,24 +369,27 @@ public class StorageBusPart extends UpgradeablePart final Direction targetSide = this.getSide().getFacing().getOpposite(); - final LazyOptional accessorOpt = target - .getCapability(Capabilities.STORAGE_MONITORABLE_ACCESSOR, targetSide); - - if (accessorOpt.isPresent()) { - return Objects.hash(target, accessorOpt.orElse(null)); + IStorageMonitorableAccessor accessor = getMeAccessor(target, targetSide); + if (accessor != null) { + return Objects.hash(target, accessor); } - final LazyOptional itemHandlerOpt = target - .getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetSide); - - if (itemHandlerOpt.isPresent()) { - FixedItemInv itemHandler = itemHandlerOpt.orElse(null); + FixedItemInv itemHandler = getFixedItemInv(target, targetSide); + if (itemHandler != null) { return Objects.hash(target, itemHandler, itemHandler.getSlotCount()); } return 0; } + private FixedItemInv getFixedItemInv(BlockEntity target, Direction targetSide) { + return MEAttributes.getFirstAttributeOnSide(ItemAttributes.FIXED_INV, target, targetSide); + } + + private IStorageMonitorableAccessor getMeAccessor(BlockEntity target, Direction targetSide) { + return MEAttributes.getFirstAttributeOnSide(MEAttributes.STORAGE_MONITORABLE_ACCESSOR, target, targetSide); + } + public MEInventoryHandler getInternalHandler() { if (this.cached) { return this.handler; diff --git a/src/unported/java/appeng/parts/p2p/MEP2PTunnelPart.java b/src/main/java/appeng/parts/p2p/MEP2PTunnelPart.java similarity index 100% rename from src/unported/java/appeng/parts/p2p/MEP2PTunnelPart.java rename to src/main/java/appeng/parts/p2p/MEP2PTunnelPart.java diff --git a/src/unported/java/appeng/parts/p2p/P2PModels.java b/src/main/java/appeng/parts/p2p/P2PModels.java similarity index 100% rename from src/unported/java/appeng/parts/p2p/P2PModels.java rename to src/main/java/appeng/parts/p2p/P2PModels.java diff --git a/src/unported/java/appeng/parts/p2p/P2PTunnelPart.java b/src/main/java/appeng/parts/p2p/P2PTunnelPart.java similarity index 98% rename from src/unported/java/appeng/parts/p2p/P2PTunnelPart.java rename to src/main/java/appeng/parts/p2p/P2PTunnelPart.java index 09c1cfa77..12640fd21 100644 --- a/src/unported/java/appeng/parts/p2p/P2PTunnelPart.java +++ b/src/main/java/appeng/parts/p2p/P2PTunnelPart.java @@ -46,7 +46,6 @@ import appeng.api.parts.PartItemStack; import appeng.api.util.AECableType; import appeng.api.util.AEColor; import appeng.api.util.AEPartLocation; -import appeng.client.render.cablebus.P2PTunnelFrequencyModelData; import appeng.core.AEConfig; import appeng.me.GridAccessException; import appeng.me.cache.P2PCache; @@ -371,13 +370,13 @@ public abstract class P2PTunnelPart extends BasicStateP } @Override - public IModelData getModelData() { + public Object getModelData() { long ret = Short.toUnsignedLong(this.getFrequency()); if (this.isActive() && this.isPowered()) { ret |= 0x10000L; } - return new P2PTunnelFrequencyModelData(ret); + return ret; } } diff --git a/src/unported/java/appeng/parts/reporting/AbstractDisplayPart.java b/src/main/java/appeng/parts/reporting/AbstractDisplayPart.java similarity index 100% rename from src/unported/java/appeng/parts/reporting/AbstractDisplayPart.java rename to src/main/java/appeng/parts/reporting/AbstractDisplayPart.java diff --git a/src/unported/java/appeng/parts/reporting/AbstractMonitorPart.java b/src/main/java/appeng/parts/reporting/AbstractMonitorPart.java similarity index 99% rename from src/unported/java/appeng/parts/reporting/AbstractMonitorPart.java rename to src/main/java/appeng/parts/reporting/AbstractMonitorPart.java index fbf8e716a..b5e16427b 100644 --- a/src/unported/java/appeng/parts/reporting/AbstractMonitorPart.java +++ b/src/main/java/appeng/parts/reporting/AbstractMonitorPart.java @@ -27,6 +27,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; +import net.minecraft.util.Util; import net.minecraft.util.math.Direction; import net.minecraft.util.Hand; import net.minecraft.util.hit.HitResult; @@ -48,7 +49,7 @@ import appeng.api.storage.data.IAEStack; import appeng.api.storage.data.IItemList; import appeng.client.render.TesrRenderHelper; import appeng.core.localization.PlayerMessages; -import appeng.helpers.Reflected; + import appeng.me.GridAccessException; import appeng.util.IWideReadableNumberConverter; import appeng.util.Platform; @@ -76,7 +77,7 @@ public abstract class AbstractMonitorPart extends AbstractDisplayPart private boolean isLocked; private IStackWatcher myWatcher; - @Reflected + public AbstractMonitorPart(final ItemStack is) { super(is); } diff --git a/src/unported/java/appeng/parts/reporting/AbstractTerminalPart.java b/src/main/java/appeng/parts/reporting/AbstractTerminalPart.java similarity index 100% rename from src/unported/java/appeng/parts/reporting/AbstractTerminalPart.java rename to src/main/java/appeng/parts/reporting/AbstractTerminalPart.java diff --git a/src/unported/java/appeng/parts/reporting/ConversionMonitorPart.java b/src/main/java/appeng/parts/reporting/ConversionMonitorPart.java similarity index 92% rename from src/unported/java/appeng/parts/reporting/ConversionMonitorPart.java rename to src/main/java/appeng/parts/reporting/ConversionMonitorPart.java index 3f8c1ec15..dabf23546 100644 --- a/src/unported/java/appeng/parts/reporting/ConversionMonitorPart.java +++ b/src/main/java/appeng/parts/reporting/ConversionMonitorPart.java @@ -21,6 +21,9 @@ package appeng.parts.reporting; import java.util.Collections; import java.util.List; +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.item.SingleItemSlot; +import alexiil.mc.lib.attributes.item.compat.FixedInventoryVanillaWrapper; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -28,7 +31,6 @@ import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.util.math.Vec3d; import alexiil.mc.lib.attributes.item.FixedItemInv; -import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; import appeng.api.AEApi; import appeng.api.networking.energy.IEnergySource; @@ -37,7 +39,6 @@ import appeng.api.storage.IMEMonitor; import appeng.api.storage.channels.IItemStorageChannel; import appeng.api.storage.data.IAEItemStack; import appeng.core.AppEng; -import appeng.helpers.Reflected; import appeng.items.parts.PartModels; import appeng.me.GridAccessException; import appeng.me.helpers.PlayerSource; @@ -67,7 +68,7 @@ public class ConversionMonitorPart extends AbstractMonitorPart { public static final IPartModel MODELS_LOCKED_HAS_CHANNEL = new PartModel(MODEL_BASE, MODEL_LOCKED_ON, MODEL_STATUS_HAS_CHANNEL); - @Reflected + public ConversionMonitorPart(final ItemStack is) { super(is); } @@ -157,18 +158,19 @@ public class ConversionMonitorPart extends AbstractMonitorPart { if (allItems) { if (this.getDisplayed() != null) { final IAEItemStack input = this.getDisplayed().copy(); - FixedItemInv inv = new PlayerMainInvWrapper(player.inventory); + FixedItemInv inv = new FixedInventoryVanillaWrapper(player.inventory); for (int x = 0; x < inv.getSlotCount(); x++) { final ItemStack targetStack = inv.getInvStack(x); if (input.equals(targetStack)) { - final ItemStack canExtract = inv.extractItem(x, targetStack.getCount(), true); + SingleItemSlot slot = inv.getSlot(x); + final ItemStack canExtract = slot.attemptAnyExtraction(targetStack.getCount(), Simulation.SIMULATE); if (!canExtract.isEmpty()) { input.setStackSize(canExtract.getCount()); final IAEItemStack failedToInsert = Platform.poweredInsert(energy, cell, input, new PlayerSource(player, this)); - inv.extractItem(x, failedToInsert == null ? canExtract.getCount() - : canExtract.getCount() - (int) failedToInsert.getStackSize(), false); + slot.extract(failedToInsert == null ? canExtract.getCount() + : canExtract.getCount() - (int) failedToInsert.getStackSize()); } } } @@ -210,8 +212,8 @@ public class ConversionMonitorPart extends AbstractMonitorPart { Platform.spawnDrops(player.world, te.getPos().offset(this.getSide().getFacing()), list); } - if (player.openContainer != null) { - player.openContainer.detectAndSendChanges(); + if (player.currentScreenHandler != null) { + player.currentScreenHandler.sendContentUpdates(); } } } catch (final GridAccessException e) { diff --git a/src/unported/java/appeng/parts/reporting/CraftingTerminalPart.java b/src/main/java/appeng/parts/reporting/CraftingTerminalPart.java similarity index 98% rename from src/unported/java/appeng/parts/reporting/CraftingTerminalPart.java rename to src/main/java/appeng/parts/reporting/CraftingTerminalPart.java index c86ae73d8..f86296b9c 100644 --- a/src/unported/java/appeng/parts/reporting/CraftingTerminalPart.java +++ b/src/main/java/appeng/parts/reporting/CraftingTerminalPart.java @@ -32,7 +32,6 @@ import appeng.api.parts.IPartModel; import appeng.container.implementations.CraftingTermContainer; import appeng.container.implementations.MEMonitorableContainer; import appeng.core.AppEng; -import appeng.helpers.Reflected; import appeng.items.parts.PartModels; import appeng.parts.PartModel; import appeng.tile.inventory.AppEngInternalInventory; @@ -51,7 +50,6 @@ public class CraftingTerminalPart extends AbstractTerminalPart { private final AppEngInternalInventory craftingGrid = new AppEngInternalInventory(this, 9); - @Reflected public CraftingTerminalPart(final ItemStack is) { super(is); } diff --git a/src/unported/java/appeng/parts/reporting/InterfaceTerminalPart.java b/src/main/java/appeng/parts/reporting/InterfaceTerminalPart.java similarity index 100% rename from src/unported/java/appeng/parts/reporting/InterfaceTerminalPart.java rename to src/main/java/appeng/parts/reporting/InterfaceTerminalPart.java diff --git a/src/unported/java/appeng/parts/reporting/PatternTerminalPart.java b/src/main/java/appeng/parts/reporting/PatternTerminalPart.java similarity index 96% rename from src/unported/java/appeng/parts/reporting/PatternTerminalPart.java rename to src/main/java/appeng/parts/reporting/PatternTerminalPart.java index 2fd63152f..5e656e409 100644 --- a/src/unported/java/appeng/parts/reporting/PatternTerminalPart.java +++ b/src/main/java/appeng/parts/reporting/PatternTerminalPart.java @@ -35,7 +35,6 @@ import appeng.api.storage.data.IAEItemStack; import appeng.container.implementations.MEMonitorableContainer; import appeng.container.implementations.PatternTermContainer; import appeng.core.AppEng; -import appeng.helpers.Reflected; import appeng.items.parts.PartModels; import appeng.parts.PartModel; import appeng.tile.inventory.AppEngInternalInventory; @@ -60,7 +59,6 @@ public class PatternTerminalPart extends AbstractTerminalPart { private boolean craftingMode = true; private boolean substitute = false; - @Reflected public PatternTerminalPart(final ItemStack is) { super(is); } @@ -117,12 +115,12 @@ public class PatternTerminalPart extends AbstractTerminalPart { for (int x = 0; x < this.crafting.getSlotCount() && x < details.getInputs().length; x++) { final IAEItemStack item = details.getInputs()[x]; - this.crafting.setInvStack(x, item == null ? ItemStack.EMPTY : item.createItemStack()); + this.crafting.forceSetInvStack(x, item == null ? ItemStack.EMPTY : item.createItemStack()); } for (int x = 0; x < this.output.getSlotCount() && x < details.getOutputs().length; x++) { final IAEItemStack item = details.getOutputs()[x]; - this.output.setInvStack(x, item == null ? ItemStack.EMPTY : item.createItemStack()); + this.output.forceSetInvStack(x, item == null ? ItemStack.EMPTY : item.createItemStack()); } } } diff --git a/src/unported/java/appeng/parts/reporting/StorageMonitorPart.java b/src/main/java/appeng/parts/reporting/StorageMonitorPart.java similarity index 98% rename from src/unported/java/appeng/parts/reporting/StorageMonitorPart.java rename to src/main/java/appeng/parts/reporting/StorageMonitorPart.java index c5d082b55..1fea37bd9 100644 --- a/src/unported/java/appeng/parts/reporting/StorageMonitorPart.java +++ b/src/main/java/appeng/parts/reporting/StorageMonitorPart.java @@ -23,7 +23,7 @@ import net.minecraft.util.Identifier; import appeng.api.parts.IPartModel; import appeng.core.AppEng; -import appeng.helpers.Reflected; + import appeng.items.parts.PartModels; import appeng.parts.PartModel; @@ -55,7 +55,7 @@ public class StorageMonitorPart extends AbstractMonitorPart { public static final IPartModel MODELS_LOCKED_HAS_CHANNEL = new PartModel(MODEL_BASE, MODEL_LOCKED_ON, MODEL_STATUS_HAS_CHANNEL); - @Reflected + public StorageMonitorPart(final ItemStack is) { super(is); } diff --git a/src/unported/java/appeng/parts/reporting/TerminalPart.java b/src/main/java/appeng/parts/reporting/TerminalPart.java similarity index 100% rename from src/unported/java/appeng/parts/reporting/TerminalPart.java rename to src/main/java/appeng/parts/reporting/TerminalPart.java diff --git a/src/main/java/appeng/server/AppEngServer.java b/src/main/java/appeng/server/AppEngServer.java index d7656707e..5d5910935 100644 --- a/src/main/java/appeng/server/AppEngServer.java +++ b/src/main/java/appeng/server/AppEngServer.java @@ -82,7 +82,7 @@ public final class AppEngServer extends AppEngBase { } @Override - public boolean isActionKey(@Nonnull ActionKey key, InputUtil.Key input) { + public boolean isActionKey(@Nonnull ActionKey key, int keyCode, int scanCode) { return false; } diff --git a/src/unported/java/appeng/tile/crafting/AssemblerAnimationStatus.java b/src/main/java/appeng/tile/crafting/AssemblerAnimationStatus.java similarity index 100% rename from src/unported/java/appeng/tile/crafting/AssemblerAnimationStatus.java rename to src/main/java/appeng/tile/crafting/AssemblerAnimationStatus.java diff --git a/src/unported/java/appeng/tile/crafting/CraftingBlockEntity.java b/src/main/java/appeng/tile/crafting/CraftingBlockEntity.java similarity index 96% rename from src/unported/java/appeng/tile/crafting/CraftingBlockEntity.java rename to src/main/java/appeng/tile/crafting/CraftingBlockEntity.java index 399b50d1b..6762dd2d9 100644 --- a/src/unported/java/appeng/tile/crafting/CraftingBlockEntity.java +++ b/src/main/java/appeng/tile/crafting/CraftingBlockEntity.java @@ -24,8 +24,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.Optional; -import javax.annotation.Nonnull; - +import appeng.util.BlockUpdateFlag; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.item.ItemStack; @@ -158,7 +157,7 @@ public class CraftingBlockEntity extends AENetworkBlockEntity implements IAEMult // Not using flag 2 here (only send to clients, prevent block update) will cause // infinite loops // In case there is an inconsistency in the crafting clusters. - this.world.setBlockState(this.pos, newState, Constants.BlockFlags.BLOCK_UPDATE); + this.world.setBlockState(this.pos, newState, BlockUpdateFlag.BLOCK_UPDATE); } } @@ -355,14 +354,4 @@ public class CraftingBlockEntity extends AENetworkBlockEntity implements IAEMult return world.getBlockState(adjacentPos).getBlock() instanceof AbstractCraftingUnitBlock; } - /** - * When the block state changes (i.e. becoming formed or unformed), we need to - * update the model data since it contains connections to neighboring tiles. - */ - @Override - public void updateContainingBlockInfo() { - super.updateContainingBlockInfo(); - requestModelDataUpdate(); - } - } diff --git a/src/unported/java/appeng/tile/crafting/CraftingCubeModelData.java b/src/main/java/appeng/tile/crafting/CraftingCubeModelData.java similarity index 100% rename from src/unported/java/appeng/tile/crafting/CraftingCubeModelData.java rename to src/main/java/appeng/tile/crafting/CraftingCubeModelData.java diff --git a/src/unported/java/appeng/tile/crafting/CraftingMonitorBlockEntity.java b/src/main/java/appeng/tile/crafting/CraftingMonitorBlockEntity.java similarity index 100% rename from src/unported/java/appeng/tile/crafting/CraftingMonitorBlockEntity.java rename to src/main/java/appeng/tile/crafting/CraftingMonitorBlockEntity.java diff --git a/src/unported/java/appeng/tile/crafting/CraftingMonitorModelData.java b/src/main/java/appeng/tile/crafting/CraftingMonitorModelData.java similarity index 100% rename from src/unported/java/appeng/tile/crafting/CraftingMonitorModelData.java rename to src/main/java/appeng/tile/crafting/CraftingMonitorModelData.java diff --git a/src/unported/java/appeng/tile/crafting/CraftingStorageBlockEntity.java b/src/main/java/appeng/tile/crafting/CraftingStorageBlockEntity.java similarity index 100% rename from src/unported/java/appeng/tile/crafting/CraftingStorageBlockEntity.java rename to src/main/java/appeng/tile/crafting/CraftingStorageBlockEntity.java diff --git a/src/unported/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java b/src/main/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java similarity index 96% rename from src/unported/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java rename to src/main/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java index 6c7fc2583..4c42babe0 100644 --- a/src/unported/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java +++ b/src/main/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java @@ -18,35 +18,10 @@ package appeng.tile.crafting; -import java.io.IOException; -import java.util.List; - -import javax.annotation.Nullable; - -import appeng.util.*; -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.server.world.ServerWorld; -import net.fabricmc.api.EnvType; -import net.minecraftforge.fml.hooks.BasicEventHooks; +import alexiil.mc.lib.attributes.Simulation; 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.RedstoneMode; -import appeng.api.config.Settings; -import appeng.api.config.Upgrades; +import appeng.api.config.*; import appeng.api.definitions.ITileDefinition; import appeng.api.implementations.IPowerChannelState; import appeng.api.implementations.IUpgradeableHost; @@ -73,12 +48,32 @@ import appeng.parts.automation.DefinitionUpgradeInventory; import appeng.parts.automation.UpgradeInventory; import appeng.tile.grid.AENetworkInvBlockEntity; import appeng.tile.inventory.AppEngInternalInventory; +import appeng.util.ConfigManager; +import appeng.util.IConfigManagerHost; +import appeng.util.InventoryAdaptor; +import appeng.util.Platform; import appeng.util.helpers.ItemHandlerUtil; import appeng.util.inv.InvOperation; import appeng.util.inv.WrapperChainedItemHandler; import appeng.util.inv.WrapperFilteredItemHandler; import appeng.util.inv.filter.IAEItemFilter; import appeng.util.item.AEItemStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.inventory.CraftingInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import java.io.IOException; +import java.util.List; public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity implements IUpgradeableHost, IConfigManagerHost, IGridTickable, ICraftingMachine, IPowerChannelState { @@ -132,7 +127,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity this.pushDirection = AEPartLocation.fromFacing(where); for (int x = 0; x < table.size(); x++) { - this.gridInv.setInvStack(x, table.getStack(x)); + this.gridInv.setInvStack(x, table.getStack(x), Simulation.ACTION); } this.updateSleepiness(); @@ -406,13 +401,13 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity this.progress = 0; final ItemStack output = this.myPlan.getOutput(this.craftingInv, this.getWorld()); if (!output.isEmpty()) { - BasicEventHooks.firePlayerCraftingEvent((PlayerEntity) FakePlayer.getOrCreate((ServerWorld) this.getWorld()), output, - this.craftingInv); + // FIXME FABRIC BasicEventHooks.firePlayerCraftingEvent((PlayerEntity) FakePlayer.getOrCreate((ServerWorld) this.getWorld()), output, + // FIXME FABRIC this.craftingInv); this.pushOut(output.copy()); for (int x = 0; x < this.craftingInv.size(); x++) { - this.gridInv.setInvStack(x, Platform.getRecipeRemainder(this.craftingInv.getStack(x))); + this.gridInv.setInvStack(x, Platform.getRecipeRemainder(this.craftingInv.getStack(x)), Simulation.ACTION); } if (ItemHandlerUtil.isEmpty(this.patternInv)) { @@ -426,7 +421,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity final IAEItemStack item = AEItemStack.fromItemStack(output); if (item != null) { final TargetPoint where = new TargetPoint(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 32, - this.world.getDimension().getType()); + this.world); NetworkHandler.instance() .sendToAllAround(new AssemblerAnimationPacket(this.pos, (byte) speed, item), where); } @@ -446,8 +441,8 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity final ItemStack is = this.gridInv.getInvStack(x); if (!is.isEmpty()) { if (this.myPlan == null || !this.myPlan.isValidItemForSlot(x, is, this.world)) { - this.gridInv.setInvStack(9, is); - this.gridInv.setInvStack(x, ItemStack.EMPTY); + this.gridInv.setInvStack(9, is, Simulation.ACTION); + this.gridInv.setInvStack(x, ItemStack.EMPTY, Simulation.ACTION); this.saveChanges(); return; } @@ -479,7 +474,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity this.recalculatePlan(); } - this.gridInv.setInvStack(9, output); + this.gridInv.setInvStack(9, output, Simulation.ACTION); } private ItemStack pushTo(ItemStack output, final Direction d) { diff --git a/src/unported/java/appeng/tile/crafting/MolecularAssemblerRenderer.java b/src/main/java/appeng/tile/crafting/MolecularAssemblerRenderer.java similarity index 80% rename from src/unported/java/appeng/tile/crafting/MolecularAssemblerRenderer.java rename to src/main/java/appeng/tile/crafting/MolecularAssemblerRenderer.java index 60c90c68f..2545ce34b 100644 --- a/src/unported/java/appeng/tile/crafting/MolecularAssemblerRenderer.java +++ b/src/main/java/appeng/tile/crafting/MolecularAssemblerRenderer.java @@ -20,30 +20,25 @@ package appeng.tile.crafting; import java.util.Random; +import appeng.mixins.RenderPhaseMixin; import net.fabricmc.api.EnvType; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.VertexFormats; +import net.minecraft.client.render.*; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.texture.SpriteAtlasTexture; +import net.minecraft.client.util.ModelIdentifier; import net.minecraft.client.util.math.MatrixStack; import org.lwjgl.opengl.GL11; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.RenderState; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import net.fabricmc.api.Environment; -import net.minecraftforge.client.model.data.EmptyModelData; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import appeng.client.render.effects.ParticleTypes; import appeng.core.AppEng; @@ -72,7 +67,7 @@ public class MolecularAssemblerRenderer extends BlockEntityRenderer !stack.isEmpty() + && AEApi.instance().registries().cell().isCellHandled(stack); + private final ICellInventoryHandler[] handlerForSlot; public AppEngCellInventory(final IAEAppEngInventory host, final int slots) { @@ -16,6 +21,11 @@ public class AppEngCellInventory extends DelegatingFixedItemInv { this.handlerForSlot = new ICellInventoryHandler[slots]; } + @Override + public ItemFilter getFilterForSlot(int slot) { + return CELL_FILTER; + } + public void setHandler(final int slot, final ICellInventoryHandler handler) { this.handlerForSlot[slot] = handler; } diff --git a/src/unported/java/appeng/tile/misc/CellWorkbenchBlockEntity.java b/src/main/java/appeng/tile/misc/CellWorkbenchBlockEntity.java similarity index 97% rename from src/unported/java/appeng/tile/misc/CellWorkbenchBlockEntity.java rename to src/main/java/appeng/tile/misc/CellWorkbenchBlockEntity.java index 21a0b95bc..c56c04017 100644 --- a/src/unported/java/appeng/tile/misc/CellWorkbenchBlockEntity.java +++ b/src/main/java/appeng/tile/misc/CellWorkbenchBlockEntity.java @@ -150,14 +150,14 @@ public class CellWorkbenchBlockEntity extends AEBaseBlockEntity if (cellHasConfig) { for (int x = 0; x < this.config.getSlotCount(); x++) { - this.config.setInvStack(x, configInventory.getInvStack(x)); + this.config.forceSetInvStack(x, configInventory.getInvStack(x)); } } else { ItemHandlerUtil.copy(this.config, configInventory, false); } } else if (this.manager.getSetting(Settings.COPY_MODE) == CopyMode.CLEAR_ON_REMOVE) { for (int x = 0; x < this.config.getSlotCount(); x++) { - this.config.setInvStack(x, ItemStack.EMPTY); + this.config.forceSetInvStack(x, ItemStack.EMPTY); } this.saveChanges(); diff --git a/src/unported/java/appeng/tile/misc/ChargerBlockEntity.java b/src/main/java/appeng/tile/misc/ChargerBlockEntity.java similarity index 95% rename from src/unported/java/appeng/tile/misc/ChargerBlockEntity.java rename to src/main/java/appeng/tile/misc/ChargerBlockEntity.java index 151907ae1..350da2163 100644 --- a/src/unported/java/appeng/tile/misc/ChargerBlockEntity.java +++ b/src/main/java/appeng/tile/misc/ChargerBlockEntity.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.List; +import alexiil.mc.lib.attributes.Simulation; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -81,9 +82,9 @@ public class ChargerBlockEntity extends AENetworkPowerBlockEntity implements ICr try { final IAEItemStack item = AEItemStack.fromPacket(data); final ItemStack is = item.createItemStack(); - this.inv.setInvStack(0, is); + this.inv.setInvStack(0, is, Simulation.ACTION); } catch (final Throwable t) { - this.inv.setInvStack(0, ItemStack.EMPTY); + this.inv.setInvStack(0, ItemStack.EMPTY, Simulation.ACTION); } return c; // TESR doesn't need updates! } @@ -121,7 +122,7 @@ public class ChargerBlockEntity extends AENetworkPowerBlockEntity implements ICr this.extractAEPower(this.getInternalMaxPower(), Actionable.MODULATE, PowerMultiplier.CONFIG); materials.certusQuartzCrystalCharged().maybeStack(myItem.getCount()) - .ifPresent(charged -> this.inv.setInvStack(0, charged)); + .ifPresent(charged -> this.inv.setInvStack(0, charged, Simulation.ACTION)); } } } @@ -159,13 +160,13 @@ public class ChargerBlockEntity extends AENetworkPowerBlockEntity implements ICr if (AEApi.instance().definitions().materials().certusQuartzCrystal().isSameAs(held) || Platform.isChargeable(held)) { - held = player.inventory.decrStackSize(player.inventory.currentItem, 1); - this.inv.setInvStack(0, held); + held = player.inventory.removeStack(player.inventory.selectedSlot, 1); + this.inv.setInvStack(0, held, Simulation.ACTION); } } else { final List drops = new ArrayList<>(); drops.add(myItem); - this.inv.setInvStack(0, ItemStack.EMPTY); + this.inv.setInvStack(0, ItemStack.EMPTY, Simulation.ACTION); Platform.spawnDrops(this.world, this.pos.offset(this.getForward()), drops); } } @@ -222,7 +223,7 @@ public class ChargerBlockEntity extends AENetworkPowerBlockEntity implements ICr this.extractAEPower(this.getInternalMaxPower(), Actionable.MODULATE, PowerMultiplier.CONFIG); materials.certusQuartzCrystalCharged().maybeStack(myItem.getCount()) - .ifPresent(charged -> this.inv.setInvStack(0, charged)); + .ifPresent(charged -> this.inv.setInvStack(0, charged, Simulation.ACTION)); changed = true; } diff --git a/src/unported/java/appeng/tile/misc/CondenserBlockEntity.java b/src/main/java/appeng/tile/misc/CondenserBlockEntity.java similarity index 65% rename from src/unported/java/appeng/tile/misc/CondenserBlockEntity.java rename to src/main/java/appeng/tile/misc/CondenserBlockEntity.java index 05e5ce3bd..252f371df 100644 --- a/src/unported/java/appeng/tile/misc/CondenserBlockEntity.java +++ b/src/main/java/appeng/tile/misc/CondenserBlockEntity.java @@ -18,23 +18,22 @@ package appeng.tile.misc; -import javax.annotation.Nonnull; import javax.annotation.Nullable; +import alexiil.mc.lib.attributes.AttributeList; +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.fluid.FluidInsertable; +import alexiil.mc.lib.attributes.fluid.FluidVolumeUtil; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; import alexiil.mc.lib.attributes.item.FixedItemInv; +import alexiil.mc.lib.attributes.item.ItemInsertable; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.util.math.Direction; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.FluidAttributes; -import net.minecraftforge.fluids.IFluidTank; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import appeng.api.AEApi; import appeng.api.config.CondenserOutput; @@ -52,15 +51,12 @@ import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEStack; import appeng.api.util.IConfigManager; import appeng.api.util.IConfigurableObject; -import appeng.capabilities.Capabilities; import appeng.tile.AEBaseInvBlockEntity; import appeng.tile.inventory.AppEngInternalInventory; import appeng.util.ConfigManager; import appeng.util.IConfigManagerHost; import appeng.util.inv.InvOperation; import appeng.util.inv.WrapperChainedItemHandler; -import appeng.util.inv.WrapperFilteredItemHandler; -import appeng.util.inv.filter.AEItemFilters; public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfigManagerHost, IConfigurableObject { @@ -70,13 +66,11 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi private final AppEngInternalInventory outputSlot = new AppEngInternalInventory(this, 1); private final AppEngInternalInventory storageSlot = new AppEngInternalInventory(this, 1); - private final FixedItemInv inputSlot = new CondenseItemHandler(); - private final IFluidHandler fluidHandler = new FluidHandler(); + private final ItemInsertable externalItemInput = new CondenseItemHandler(); + private final FluidInsertable externalFluidInput = new FluidHandler(); private final MEHandler meHandler = new MEHandler(); - private final FixedItemInv externalInv = new WrapperChainedItemHandler(this.inputSlot, - new WrapperFilteredItemHandler(this.outputSlot, AEItemFilters.EXTRACT_ONLY)); - private final FixedItemInv combinedInv = new WrapperChainedItemHandler(this.inputSlot, this.outputSlot, + private final FixedItemInv combinedInv = new WrapperChainedItemHandler(this.outputSlot, this.storageSlot); private double storedPower = 0; @@ -131,7 +125,7 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi } private boolean canAddOutput(final ItemStack output) { - return this.outputSlot.insertItem(0, output, true).isEmpty(); + return this.outputSlot.setInvStack(0, output, Simulation.SIMULATE); } /** @@ -140,7 +134,7 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi * @param output to be added output */ private void addOutput(final ItemStack output) { - this.outputSlot.insertItem(0, output, false); + this.outputSlot.setInvStack(0, output, Simulation.ACTION); } FixedItemInv getOutputSlot() { @@ -198,130 +192,50 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi this.storedPower = storedPower; } - @SuppressWarnings("unchecked") @Override - public LazyOptional getCapability(Capability capability, @Nullable Direction facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (LazyOptional) LazyOptional.of(() -> this.externalInv); - } else if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { - return (LazyOptional) LazyOptional.of(() -> this.fluidHandler); - } else if (capability == Capabilities.STORAGE_MONITORABLE_ACCESSOR) { - return (LazyOptional) LazyOptional.of(() -> this.meHandler); - } - return super.getCapability(capability, facing); + public void addAllAttributes(World world, BlockPos pos, BlockState state, AttributeList to) { + super.addAllAttributes(world, pos, state, to); + + to.offer(externalItemInput); + to.offer(externalFluidInput); + to.offer(outputSlot.getPureExtractable()); + to.offer(meHandler); } - private class CondenseItemHandler implements FixedItemInv { + private class CondenseItemHandler implements ItemInsertable { @Override - public int getSlots() { - // We only expose the void slot - return 1; - } - - @Override - public boolean isItemValid(int slot, @Nonnull ItemStack stack) { - return slot == 0; - } - - @Override - public ItemStack getStackInSlot(int slot) { - // The void slot never has any content - return ItemStack.EMPTY; - } - - @Override - public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - if (slot != 0) { - return stack; - } - if (!simulate && !stack.isEmpty()) { + public ItemStack attemptInsertion(ItemStack stack, Simulation simulation) { + if (simulation == Simulation.ACTION && !stack.isEmpty()) { CondenserBlockEntity.this.addPower(stack.getCount()); } return ItemStack.EMPTY; } - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - return ItemStack.EMPTY; - } - - @Override - public int getMaxAmount(int slot, ItemStack is) { - return 64; - } } /** * A fluid handler that exposes a 1 bucket tank that can only be filled, and - * when filled - will add power to this condenser. */ - private class FluidHandler implements IFluidTank, IFluidHandler { - - @Nonnull - @Override - public FluidVolume getFluid() { - return FluidVolumeUtil.EMPTY; - } + private class FluidHandler implements FluidInsertable { @Override - public int getFluidAmount() { - return 0; - } - - @Override - public int getCapacity() { - return FluidAttributes.BUCKET_VOLUME; - } - - @Override - public boolean isFluidValid(FluidVolume stack) { - return !stack.isEmpty(); - } - - @Override - public int fill(FluidVolume resource, FluidAction action) { - if (action == FluidAction.EXECUTE) { + public FluidVolume attemptInsertion(FluidVolume fluid, Simulation simulation) { + if (simulation == Simulation.ACTION) { final IStorageChannel chan = AEApi.instance().storage() .getStorageChannel(IFluidStorageChannel.class); CondenserBlockEntity.this - .addPower((resource.isEmpty() ? 0.0 : (double) resource.getAmount()) / chan.transferFactor()); + .addPower((fluid.isEmpty() ? 0.0 : fluid.getAmount_F().asInexactDouble() * 1000.0) / chan.transferFactor()); } - return resource.isEmpty() ? 0 : resource.getAmount(); - } - - @Nonnull - @Override - public FluidVolume drain(int maxDrain, FluidAction action) { return FluidVolumeUtil.EMPTY; } - @Nonnull + @Nullable @Override - public FluidVolume drain(FluidVolume resource, FluidAction action) { - return FluidVolumeUtil.EMPTY; - } - - @Override - public int getTanks() { - return 1; - } - - @Nonnull - @Override - public FluidVolume getFluidInTank(int tank) { - return FluidVolumeUtil.EMPTY; - } - - @Override - public int getTankCapacity(int tank) { - return tank == 0 ? getCapacity() : 0; - } - - @Override - public boolean isFluidValid(int tank, @Nonnull FluidVolume stack) { - return tank == 0 && isFluidValid(stack); + public FluidAmount getMinimumAcceptedAmount() { + return FluidAmount.of(1, 1000); // 1 millibucket } } diff --git a/src/unported/java/appeng/tile/misc/CondenserItemInventory.java b/src/main/java/appeng/tile/misc/CondenserItemInventory.java similarity index 94% rename from src/unported/java/appeng/tile/misc/CondenserItemInventory.java rename to src/main/java/appeng/tile/misc/CondenserItemInventory.java index 02040bd22..7663ad7df 100644 --- a/src/unported/java/appeng/tile/misc/CondenserItemInventory.java +++ b/src/main/java/appeng/tile/misc/CondenserItemInventory.java @@ -22,6 +22,8 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; +import alexiil.mc.lib.attributes.Simulation; +import alexiil.mc.lib.attributes.item.filter.ConstantItemFilter; import net.minecraft.item.ItemStack; import appeng.api.AEApi; @@ -67,7 +69,7 @@ class CondenserItemInventory implements IMEMonitor, ITickingMonito if (!slotItem.isEmpty() && request.isSameType(slotItem)) { int count = (int) Math.min(request.getStackSize(), Integer.MAX_VALUE); ret = AEItemStack - .fromItemStack(this.target.getOutputSlot().extractItem(0, count, mode == Actionable.SIMULATE)); + .fromItemStack(this.target.getOutputSlot().getSlot(0).attemptExtraction(ConstantItemFilter.ANYTHING, count, mode == Actionable.SIMULATE ? Simulation.SIMULATE : Simulation.ACTION)); } return ret; } diff --git a/src/unported/java/appeng/tile/misc/CondenserVoidInventory.java b/src/main/java/appeng/tile/misc/CondenserVoidInventory.java similarity index 100% rename from src/unported/java/appeng/tile/misc/CondenserVoidInventory.java rename to src/main/java/appeng/tile/misc/CondenserVoidInventory.java diff --git a/src/unported/java/appeng/tile/misc/InscriberBlockEntity.java b/src/main/java/appeng/tile/misc/InscriberBlockEntity.java similarity index 94% rename from src/unported/java/appeng/tile/misc/InscriberBlockEntity.java rename to src/main/java/appeng/tile/misc/InscriberBlockEntity.java index 435abce4c..be2e9ca4a 100644 --- a/src/unported/java/appeng/tile/misc/InscriberBlockEntity.java +++ b/src/main/java/appeng/tile/misc/InscriberBlockEntity.java @@ -25,6 +25,7 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import alexiil.mc.lib.attributes.Simulation; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; @@ -34,7 +35,6 @@ import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.math.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandlerModifiable; import appeng.api.AEApi; import appeng.api.config.Actionable; @@ -96,7 +96,7 @@ public class InscriberBlockEntity extends AENetworkPowerBlockEntity private InscriberRecipe cachedTask = null; - private final IItemHandlerModifiable inv = new WrapperChainedItemHandler(this.topItemHandler, + private final FixedItemInv inv = new WrapperChainedItemHandler(this.topItemHandler, this.bottomItemHandler, this.sideItemHandler); public InscriberBlockEntity(BlockEntityType tileEntityTypeIn) { @@ -155,11 +155,11 @@ public class InscriberBlockEntity extends AENetworkPowerBlockEntity this.setClientStart(System.currentTimeMillis()); } - for (int num = 0; num < this.inv.getSlots(); num++) { + for (int num = 0; num < this.inv.getSlotCount(); num++) { if ((slot & (1 << num)) > 0) { - this.inv.setStackInSlot(num, AEItemStack.fromPacket(data).createItemStack()); + this.inv.forceSetInvStack(num, AEItemStack.fromPacket(data).createItemStack()); } else { - this.inv.setStackInSlot(num, ItemStack.EMPTY); + this.inv.forceSetInvStack(num, ItemStack.EMPTY); } } this.cachedTask = null; @@ -172,16 +172,16 @@ public class InscriberBlockEntity extends AENetworkPowerBlockEntity super.writeToStream(data); int slot = this.isSmash() ? 64 : 0; - for (int num = 0; num < this.inv.getSlots(); num++) { - if (!this.inv.getStackInSlot(num).isEmpty()) { + for (int num = 0; num < this.inv.getSlotCount(); num++) { + if (!this.inv.getInvStack(num).isEmpty()) { slot |= (1 << num); } } data.writeByte(slot); - for (int num = 0; num < this.inv.getSlots(); num++) { + for (int num = 0; num < this.inv.getSlotCount(); num++) { if ((slot & (1 << num)) > 0) { - final AEItemStack st = AEItemStack.fromItemStack(this.inv.getStackInSlot(num)); + final AEItemStack st = AEItemStack.fromItemStack(this.inv.getInvStack(num)); st.writeToPacket(data); } } @@ -275,13 +275,13 @@ public class InscriberBlockEntity extends AENetworkPowerBlockEntity if (out != null) { final ItemStack outputCopy = out.getOutput().copy(); - if (this.sideItemHandler.insertItem(1, outputCopy, false).isEmpty()) { + if (this.sideItemHandler.setInvStack(1, outputCopy, Simulation.ACTION)) { this.setProcessingTime(0); if (out.getProcessType() == InscriberProcessType.PRESS) { - this.topItemHandler.setInvStack(0, ItemStack.EMPTY); - this.bottomItemHandler.setInvStack(0, ItemStack.EMPTY); + this.topItemHandler.setInvStack(0, ItemStack.EMPTY, Simulation.ACTION); + this.bottomItemHandler.setInvStack(0, ItemStack.EMPTY, Simulation.ACTION); } - this.sideItemHandler.setInvStack(0, ItemStack.EMPTY); + this.sideItemHandler.setInvStack(0, ItemStack.EMPTY, Simulation.ACTION); } } this.saveChanges(); @@ -324,7 +324,7 @@ public class InscriberBlockEntity extends AENetworkPowerBlockEntity final InscriberRecipe out = this.getTask(); if (out != null) { final ItemStack outputCopy = out.getOutput().copy(); - if (this.sideItemHandler.insertItem(1, outputCopy, true).isEmpty()) { + if (this.sideItemHandler.setInvStack(1, outputCopy, Simulation.SIMULATE)) { this.setSmash(true); this.finalStep = 0; this.markForUpdate(); diff --git a/src/unported/java/appeng/tile/misc/InscriberRecipes.java b/src/main/java/appeng/tile/misc/InscriberRecipes.java similarity index 87% rename from src/unported/java/appeng/tile/misc/InscriberRecipes.java rename to src/main/java/appeng/tile/misc/InscriberRecipes.java index b4776e754..02d5e1f6e 100644 --- a/src/unported/java/appeng/tile/misc/InscriberRecipes.java +++ b/src/main/java/appeng/tile/misc/InscriberRecipes.java @@ -1,26 +1,19 @@ package appeng.tile.misc; -import java.util.Collection; - -import javax.annotation.Nullable; - -import com.google.common.collect.Iterables; - -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.Recipe; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.text.LiteralText; -import net.minecraft.util.Identifier; -import net.minecraft.world.World; - import appeng.api.AEApi; import appeng.api.definitions.IComparableDefinition; import appeng.api.features.InscriberProcessType; import appeng.core.AppEng; import appeng.items.materials.MaterialItem; import appeng.recipes.handlers.InscriberRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.recipe.Ingredient; +import net.minecraft.text.LiteralText; +import net.minecraft.util.Identifier; +import net.minecraft.world.World; + +import javax.annotation.Nullable; /** * This class indexes all inscriber recipes to find valid inputs for the top and @@ -38,9 +31,7 @@ public final class InscriberRecipes { * Returns an unmodifiable view of all registered inscriber recipes. */ public static Iterable getRecipes(World world) { - Collection> unfilteredRecipes = world.getRecipeManager().getRecipes(InscriberRecipe.TYPE) - .values(); - return Iterables.filter(unfilteredRecipes, InscriberRecipe.class); + return world.getRecipeManager().method_30027(InscriberRecipe.TYPE); } @Nullable @@ -86,20 +77,20 @@ public final class InscriberRecipes { name += " " + tag.getString(MaterialItem.TAG_INSCRIBE_NAME); } - final Ingredient startingItem = Ingredient.fromStacks(input.copy()); + final Ingredient startingItem = Ingredient.ofStacks(input.copy()); final ItemStack renamedItem = input.copy(); if (!name.isEmpty()) { - renamedItem.setDisplayName(new LiteralText(name)); + renamedItem.setCustomName(new LiteralText(name)); } else { - renamedItem.setDisplayName(null); + renamedItem.setCustomName(null); } final InscriberProcessType type = InscriberProcessType.INSCRIBE; return new InscriberRecipe(NAMEPLATE_RECIPE_ID, "", startingItem, renamedItem, - plateA.isEmpty() ? Ingredient.EMPTY : Ingredient.fromStacks(plateA), - plateB.isEmpty() ? Ingredient.EMPTY : Ingredient.fromStacks(plateB), type); + plateA.isEmpty() ? Ingredient.EMPTY : Ingredient.ofStacks(plateA), + plateB.isEmpty() ? Ingredient.EMPTY : Ingredient.ofStacks(plateB), type); } /** diff --git a/src/unported/java/appeng/tile/misc/InterfaceBlockEntity.java b/src/main/java/appeng/tile/misc/InterfaceBlockEntity.java similarity index 95% rename from src/unported/java/appeng/tile/misc/InterfaceBlockEntity.java rename to src/main/java/appeng/tile/misc/InterfaceBlockEntity.java index 4e062f16e..910164142 100644 --- a/src/unported/java/appeng/tile/misc/InterfaceBlockEntity.java +++ b/src/main/java/appeng/tile/misc/InterfaceBlockEntity.java @@ -22,8 +22,7 @@ import java.io.IOException; import java.util.EnumSet; import java.util.List; -import javax.annotation.Nullable; - +import alexiil.mc.lib.attributes.AttributeList; import com.google.common.collect.ImmutableSet; import net.minecraft.block.BlockState; @@ -37,8 +36,6 @@ import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.math.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; import alexiil.mc.lib.attributes.item.FixedItemInv; import appeng.api.AEApi; @@ -297,12 +294,10 @@ public class InterfaceBlockEntity extends AENetworkInvBlockEntity } @Override - public LazyOptional getCapability(Capability capability, @Nullable Direction facing) { - LazyOptional result = this.duality.getCapability(capability, facing); - if (result.isPresent()) { - return result; - } - return super.getCapability(capability, facing); + public void addAllAttributes(World world, BlockPos pos, BlockState state, AttributeList to) { + super.addAllAttributes(world, pos, state, to); + + duality.addAllAttributes(to); } @Override diff --git a/src/unported/java/appeng/tile/misc/PaintSplotchesBlockEntity.java b/src/main/java/appeng/tile/misc/PaintSplotchesBlockEntity.java similarity index 95% rename from src/unported/java/appeng/tile/misc/PaintSplotchesBlockEntity.java rename to src/main/java/appeng/tile/misc/PaintSplotchesBlockEntity.java index 37363e667..c824ebbdb 100644 --- a/src/unported/java/appeng/tile/misc/PaintSplotchesBlockEntity.java +++ b/src/main/java/appeng/tile/misc/PaintSplotchesBlockEntity.java @@ -25,8 +25,6 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import javax.annotation.Nonnull; - import io.netty.buffer.Unpooled; import net.minecraft.block.BlockState; @@ -39,9 +37,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.LightType; -import net.minecraftforge.client.model.data.ModelDataMap; -import net.minecraftforge.client.model.data.ModelProperty; - import appeng.api.util.AEColor; import appeng.block.paint.PaintSplotches; import appeng.helpers.Splotch; @@ -50,8 +45,6 @@ import appeng.tile.AEBaseBlockEntity; public class PaintSplotchesBlockEntity extends AEBaseBlockEntity { - public static final ModelProperty SPLOTCHES = new ModelProperty<>(); - private static final int LIGHT_PER_DOT = 12; private int isLit = 0; @@ -128,7 +121,7 @@ public class PaintSplotchesBlockEntity extends AEBaseBlockEntity { } if (this.world != null) { - this.world.getLightFor(LightType.BLOCK, this.pos); + this.world.getLightLevel(LightType.BLOCK, this.pos); } } diff --git a/src/unported/java/appeng/tile/misc/QuartzGrowthAcceleratorBlockEntity.java b/src/main/java/appeng/tile/misc/QuartzGrowthAcceleratorBlockEntity.java similarity index 100% rename from src/unported/java/appeng/tile/misc/QuartzGrowthAcceleratorBlockEntity.java rename to src/main/java/appeng/tile/misc/QuartzGrowthAcceleratorBlockEntity.java diff --git a/src/unported/java/appeng/tile/misc/SecurityStationBlockEntity.java b/src/main/java/appeng/tile/misc/SecurityStationBlockEntity.java similarity index 95% rename from src/unported/java/appeng/tile/misc/SecurityStationBlockEntity.java rename to src/main/java/appeng/tile/misc/SecurityStationBlockEntity.java index fc055fe9b..4faadfb60 100644 --- a/src/unported/java/appeng/tile/misc/SecurityStationBlockEntity.java +++ b/src/main/java/appeng/tile/misc/SecurityStationBlockEntity.java @@ -30,12 +30,11 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.INBT; +import net.minecraft.nbt.Tag; import net.minecraft.network.PacketByteBuf; import net.minecraft.util.math.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; import appeng.api.AEApi; import appeng.api.config.SecurityPermissions; @@ -185,7 +184,7 @@ public class SecurityStationBlockEntity extends AENetworkBlockEntity implements final CompoundTag storedItems = data.getCompound("storedItems"); for (final Object key : storedItems.getKeys()) { - final INBT obj = storedItems.get((String) key); + final Tag obj = storedItems.get((String) key); if (obj instanceof CompoundTag) { this.inventory.getStoredItems().add(AEItemStack.fromItemStack(ItemStack.fromTag((CompoundTag) obj))); } @@ -219,7 +218,7 @@ public class SecurityStationBlockEntity extends AENetworkBlockEntity implements @Override public void onChunkUnloaded() { super.onChunkUnloaded(); - MinecraftForge.EVENT_BUS.post(new LocatableEventAnnounce(this, LocatableEvent.UNREGISTER)); + LocatableEventAnnounce.EVENT.invoker().onLocatableAnnounce(this, LocatableEvent.UNREGISTER); this.isActive = false; } @@ -228,14 +227,14 @@ public class SecurityStationBlockEntity extends AENetworkBlockEntity implements super.onReady(); if (Platform.isServer()) { this.isActive = true; - MinecraftForge.EVENT_BUS.post(new LocatableEventAnnounce(this, LocatableEvent.REGISTER)); + LocatableEventAnnounce.EVENT.invoker().onLocatableAnnounce(this, LocatableEvent.REGISTER); } } @Override - public void remove() { - super.remove(); - MinecraftForge.EVENT_BUS.post(new LocatableEventAnnounce(this, LocatableEvent.UNREGISTER)); + public void markRemoved() { + super.markRemoved(); + LocatableEventAnnounce.EVENT.invoker().onLocatableAnnounce(this, LocatableEvent.UNREGISTER); this.isActive = false; } diff --git a/src/unported/java/appeng/tile/misc/VibrationChamberBlockEntity.java b/src/main/java/appeng/tile/misc/VibrationChamberBlockEntity.java similarity index 93% rename from src/unported/java/appeng/tile/misc/VibrationChamberBlockEntity.java rename to src/main/java/appeng/tile/misc/VibrationChamberBlockEntity.java index f0d908c2f..59c454339 100644 --- a/src/unported/java/appeng/tile/misc/VibrationChamberBlockEntity.java +++ b/src/main/java/appeng/tile/misc/VibrationChamberBlockEntity.java @@ -22,7 +22,9 @@ import java.io.IOException; import javax.annotation.Nonnull; +import alexiil.mc.lib.attributes.Simulation; import alexiil.mc.lib.attributes.item.FixedItemInv; +import net.fabricmc.fabric.api.registry.FuelRegistry; import net.minecraft.block.BlockState; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -30,7 +32,6 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.math.Direction; -import net.minecraftforge.common.ForgeHooks; import appeng.api.config.Actionable; import appeng.api.networking.IGridNode; @@ -136,7 +137,7 @@ public class VibrationChamberBlockEntity extends AENetworkInvBlockEntity impleme private boolean canEatFuel() { final ItemStack is = this.inv.getInvStack(0); if (!is.isEmpty()) { - final int newBurnTime = ForgeHooks.getBurnTime(is); + final int newBurnTime = FuelRegistry.INSTANCE.get(is.getItem()); if (newBurnTime > 0 && is.getCount() > 0) { return true; } @@ -208,7 +209,7 @@ public class VibrationChamberBlockEntity extends AENetworkInvBlockEntity impleme private void eatFuel() { final ItemStack is = this.inv.getInvStack(0); if (!is.isEmpty()) { - final int newBurnTime = ForgeHooks.getBurnTime(is); + final int newBurnTime = FuelRegistry.INSTANCE.get(is.getItem()); if (newBurnTime > 0 && is.getCount() > 0) { this.setBurnTime(this.getBurnTime() + newBurnTime); this.setMaxBurnTime(this.getBurnTime()); @@ -217,9 +218,9 @@ public class VibrationChamberBlockEntity extends AENetworkInvBlockEntity impleme is.decrement(1); if (is.isEmpty()) { - this.inv.setInvStack(0, fuelItem.getRecipeRemainder(is)); + this.inv.setInvStack(0, new ItemStack(fuelItem.getRecipeRemainder()), Simulation.ACTION); } else { - this.inv.setInvStack(0, is); + this.inv.setInvStack(0, is, Simulation.ACTION); } this.saveChanges(); } @@ -268,15 +269,15 @@ public class VibrationChamberBlockEntity extends AENetworkInvBlockEntity impleme this.burnTime = burnTime; } - private class FuelSlotFilter implements IAEItemFilter { + private static class FuelSlotFilter implements IAEItemFilter { @Override public boolean allowExtract(FixedItemInv inv, int slot, int amount) { - return ForgeHooks.getBurnTime(inv.getInvStack(slot)) == 0; + return FuelRegistry.INSTANCE.get(inv.getInvStack(slot).getItem()) == 0; } @Override public boolean allowInsert(FixedItemInv inv, int slot, ItemStack stack) { - return ForgeHooks.getBurnTime(stack) != 0; + return FuelRegistry.INSTANCE.get(stack.getItem()) != 0; } } } diff --git a/src/main/java/appeng/tile/networking/CableBusBlockEntity.java b/src/main/java/appeng/tile/networking/CableBusBlockEntity.java index 39315f15d..cd3aaa78b 100644 --- a/src/main/java/appeng/tile/networking/CableBusBlockEntity.java +++ b/src/main/java/appeng/tile/networking/CableBusBlockEntity.java @@ -303,11 +303,14 @@ public class CableBusBlockEntity extends AEBaseBlockEntity implements AEMultiTil public void addAllAttributes(World world, BlockPos pos, BlockState state, AttributeList to) { super.addAllAttributes(world, pos, state, to); - for (AEPartLocation location : AEPartLocation.values()) { - IPart part = this.cb.getPart(location); - if (part != null) { - part.addAllAttributes(to); - } + Direction direction = to.getSearchDirection(); + if (direction == null) { + return; + } + AEPartLocation partLocation = AEPartLocation.fromFacing(direction.getOpposite()); + IPart part = this.cb.getPart(partLocation); + if (part != null) { + part.addAllAttributes(to); } } diff --git a/src/main/java/appeng/tile/networking/ControllerBlockEntity.java b/src/main/java/appeng/tile/networking/ControllerBlockEntity.java index 72ed2cff1..ce52cf551 100644 --- a/src/main/java/appeng/tile/networking/ControllerBlockEntity.java +++ b/src/main/java/appeng/tile/networking/ControllerBlockEntity.java @@ -1,34 +1,192 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + package appeng.tile.networking; -import appeng.api.networking.IGridHost; -import appeng.api.networking.IGridNode; +import java.util.EnumSet; + +import net.minecraft.item.ItemStack; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import alexiil.mc.lib.attributes.item.FixedItemInv; +import alexiil.mc.lib.attributes.item.impl.EmptyFixedItemInv; + +import appeng.api.config.Actionable; +import appeng.api.networking.GridFlags; +import appeng.api.networking.energy.IEnergyGrid; +import appeng.api.networking.events.MENetworkControllerChange; +import appeng.api.networking.events.MENetworkEventSubscribe; +import appeng.api.networking.events.MENetworkPowerStatusChange; +import appeng.api.networking.events.MENetworkPowerStorage; +import appeng.api.networking.events.MENetworkPowerStorage.PowerEventType; +import appeng.api.networking.pathing.ControllerState; import appeng.api.util.AECableType; import appeng.api.util.AEPartLocation; -import net.minecraft.util.math.BlockPos; +import appeng.block.networking.ControllerBlock; +import appeng.block.networking.ControllerBlock.ControllerBlockState; +import appeng.me.GridAccessException; +import appeng.tile.grid.AENetworkPowerBlockEntity; +import appeng.util.inv.InvOperation; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +public class ControllerBlockEntity extends AENetworkPowerBlockEntity { + private boolean isValid = false; -// FIXME FABRIC DUMMY -public class ControllerBlockEntity implements IGridHost { - @Nullable - @Override - public IGridNode getGridNode(@Nonnull AEPartLocation dir) { - return null; - } - - @Nonnull - @Override - public AECableType getCableConnectionType(@Nonnull AEPartLocation dir) { - return null; + public ControllerBlockEntity(BlockEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + this.setInternalMaxPower(8000); + this.setInternalPublicPowerStorage(true); + this.getProxy().setIdlePowerUsage(3); + this.getProxy().setFlags(GridFlags.CANNOT_CARRY, GridFlags.DENSE_CAPACITY); } @Override - public void securityBreak() { + public AECableType getCableConnectionType(final AEPartLocation dir) { + return AECableType.DENSE_SMART; + } + + @Override + public void onReady() { + this.onNeighborChange(true); + super.onReady(); + } + + public void onNeighborChange(final boolean force) { + final boolean xx = this.checkController(this.pos.offset(Direction.EAST)) + && this.checkController(this.pos.offset(Direction.WEST)); + final boolean yy = this.checkController(this.pos.offset(Direction.UP)) + && this.checkController(this.pos.offset(Direction.DOWN)); + final boolean zz = this.checkController(this.pos.offset(Direction.NORTH)) + && this.checkController(this.pos.offset(Direction.SOUTH)); + + // int meta = world.getBlockMetadata( xCoord, yCoord, zCoord ); + // boolean hasPower = meta > 0; + // boolean isConflict = meta == 2; + + final boolean oldValid = this.isValid; + + this.isValid = (xx && !yy && !zz) || (!xx && yy && !zz) || (!xx && !yy && zz) + || ((xx ? 1 : 0) + (yy ? 1 : 0) + (zz ? 1 : 0) <= 1); + + if (oldValid != this.isValid || force) { + if (this.isValid) { + this.getProxy().setValidSides(EnumSet.allOf(Direction.class)); + } else { + this.getProxy().setValidSides(EnumSet.noneOf(Direction.class)); + } + + this.updateMeta(); + } } - public BlockPos getPos() { - return null; + private void updateMeta() { + if (!this.getProxy().isReady()) { + return; + } + + ControllerBlockState metaState = ControllerBlockState.offline; + + try { + if (this.getProxy().getEnergy().isNetworkPowered()) { + metaState = ControllerBlockState.online; + + if (this.getProxy().getPath().getControllerState() == ControllerState.CONTROLLER_CONFLICT) { + metaState = ControllerBlockState.conflicted; + } + } + } catch (final GridAccessException e) { + metaState = ControllerBlockState.offline; + } + + if (this.checkController(this.pos) + && this.world.getBlockState(this.pos).get(ControllerBlock.CONTROLLER_STATE) != metaState) { + this.world.setBlockState(this.pos, + this.world.getBlockState(this.pos).with(ControllerBlock.CONTROLLER_STATE, metaState)); + } + + } + + @Override + protected double getFunnelPowerDemand(final double maxReceived) { + try { + final IEnergyGrid grid = this.getProxy().getEnergy(); + + return grid.getEnergyDemand(maxReceived); + } catch (final GridAccessException e) { + // no grid? use local... + return super.getFunnelPowerDemand(maxReceived); + } + } + + @Override + protected double funnelPowerIntoStorage(final double power, final Actionable mode) { + try { + final IEnergyGrid grid = this.getProxy().getEnergy(); + final double leftOver = grid.injectPower(power, mode); + + return leftOver; + } catch (final GridAccessException e) { + // no grid? use local... + return super.funnelPowerIntoStorage(power, mode); + } + } + + @Override + protected void PowerEvent(final PowerEventType x) { + try { + this.getProxy().getGrid().postEvent(new MENetworkPowerStorage(this, x)); + } catch (final GridAccessException e) { + // not ready! + } + } + + @MENetworkEventSubscribe + public void onControllerChange(final MENetworkControllerChange status) { + this.updateMeta(); + } + + @MENetworkEventSubscribe + public void onPowerChange(final MENetworkPowerStatusChange status) { + this.updateMeta(); + } + + @Override + public FixedItemInv getInternalInventory() { + return EmptyFixedItemInv.INSTANCE; + } + + @Override + public void onChangeInventory(final FixedItemInv inv, final int slot, final InvOperation mc, + final ItemStack removed, final ItemStack added) { + } + + /** + * Check for a controller at this coordinates as well as is it loaded. + * + * @return true if there is a loaded controller + */ + private boolean checkController(final BlockPos pos) { + if (this.world.getChunkManager().isChunkLoaded(pos.getX() >> 4, pos.getZ() >> 4)) { + return this.world.getBlockEntity(pos) instanceof ControllerBlockEntity; + } + + return false; } } diff --git a/src/unported/java/appeng/tile/networking/CreativeEnergyCellBlockEntity.java b/src/main/java/appeng/tile/networking/CreativeEnergyCellBlockEntity.java similarity index 100% rename from src/unported/java/appeng/tile/networking/CreativeEnergyCellBlockEntity.java rename to src/main/java/appeng/tile/networking/CreativeEnergyCellBlockEntity.java diff --git a/src/unported/java/appeng/tile/networking/DenseEnergyCellBlockEntity.java b/src/main/java/appeng/tile/networking/DenseEnergyCellBlockEntity.java similarity index 100% rename from src/unported/java/appeng/tile/networking/DenseEnergyCellBlockEntity.java rename to src/main/java/appeng/tile/networking/DenseEnergyCellBlockEntity.java diff --git a/src/unported/java/appeng/tile/networking/EnergyAcceptorBlockEntity.java b/src/main/java/appeng/tile/networking/EnergyAcceptorBlockEntity.java similarity index 100% rename from src/unported/java/appeng/tile/networking/EnergyAcceptorBlockEntity.java rename to src/main/java/appeng/tile/networking/EnergyAcceptorBlockEntity.java diff --git a/src/unported/java/appeng/tile/networking/EnergyCellBlockEntity.java b/src/main/java/appeng/tile/networking/EnergyCellBlockEntity.java similarity index 100% rename from src/unported/java/appeng/tile/networking/EnergyCellBlockEntity.java rename to src/main/java/appeng/tile/networking/EnergyCellBlockEntity.java diff --git a/src/unported/java/appeng/tile/networking/WirelessBlockEntity.java b/src/main/java/appeng/tile/networking/WirelessBlockEntity.java similarity index 100% rename from src/unported/java/appeng/tile/networking/WirelessBlockEntity.java rename to src/main/java/appeng/tile/networking/WirelessBlockEntity.java diff --git a/src/unported/java/appeng/tile/qnb/QuantumBridgeBlockEntity.java b/src/main/java/appeng/tile/qnb/QuantumBridgeBlockEntity.java similarity index 97% rename from src/unported/java/appeng/tile/qnb/QuantumBridgeBlockEntity.java rename to src/main/java/appeng/tile/qnb/QuantumBridgeBlockEntity.java index 0ed5155fb..7808f0305 100644 --- a/src/unported/java/appeng/tile/qnb/QuantumBridgeBlockEntity.java +++ b/src/main/java/appeng/tile/qnb/QuantumBridgeBlockEntity.java @@ -32,8 +32,6 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.math.Direction; -import net.minecraftforge.client.model.data.ModelDataMap; -import net.minecraftforge.client.model.data.ModelProperty; import alexiil.mc.lib.attributes.item.impl.EmptyFixedItemInv; import appeng.api.AEApi; @@ -56,8 +54,6 @@ import appeng.util.inv.InvOperation; public class QuantumBridgeBlockEntity extends AENetworkInvBlockEntity implements IAEMultiBlock, Tickable { - public static final ModelProperty FORMED_STATE = new ModelProperty<>(); - private final byte corner = 16; private final AppEngInternalInventory internalInventory = new AppEngInternalInventory(this, 1, 1); private final byte hasSingularity = 32; @@ -165,9 +161,9 @@ public class QuantumBridgeBlockEntity extends AENetworkInvBlockEntity implements } @Override - public void remove() { + public void markRemoved() { this.disconnect(false); - super.remove(); + super.markRemoved(); } @Override diff --git a/src/unported/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java b/src/main/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java similarity index 98% rename from src/unported/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java rename to src/main/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java index 1ae713ace..0f234d9a6 100644 --- a/src/unported/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java +++ b/src/main/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java @@ -20,6 +20,7 @@ package appeng.tile.spatial; import javax.annotation.Nonnull; +import alexiil.mc.lib.attributes.Simulation; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; @@ -144,8 +145,8 @@ public class SpatialIOPortBlockEntity extends AENetworkInvBlockEntity implements playerId); if (tr.success) { energy.extractAEPower(req, Actionable.MODULATE, PowerMultiplier.CONFIG); - this.inv.setInvStack(0, ItemStack.EMPTY); - this.inv.setInvStack(1, cell); + this.inv.setInvStack(0, ItemStack.EMPTY, Simulation.ACTION); + this.inv.setInvStack(1, cell, Simulation.ACTION); } } } diff --git a/src/unported/java/appeng/tile/spatial/SpatialPylonBlockEntity.java b/src/main/java/appeng/tile/spatial/SpatialPylonBlockEntity.java similarity index 94% rename from src/unported/java/appeng/tile/spatial/SpatialPylonBlockEntity.java rename to src/main/java/appeng/tile/spatial/SpatialPylonBlockEntity.java index 4153569a1..eae0b443f 100644 --- a/src/unported/java/appeng/tile/spatial/SpatialPylonBlockEntity.java +++ b/src/main/java/appeng/tile/spatial/SpatialPylonBlockEntity.java @@ -21,15 +21,10 @@ package appeng.tile.spatial; import java.io.IOException; import java.util.EnumSet; -import javax.annotation.Nonnull; - import net.minecraft.block.entity.BlockEntityType; import net.minecraft.network.PacketByteBuf; import net.minecraft.util.math.Direction; -import net.minecraftforge.client.model.data.ModelDataMap; -import net.minecraftforge.client.model.data.ModelProperty; - import appeng.api.networking.GridFlags; import appeng.api.networking.events.MENetworkChannelsChanged; import appeng.api.networking.events.MENetworkEventSubscribe; @@ -44,11 +39,6 @@ import appeng.tile.grid.AENetworkBlockEntity; public class SpatialPylonBlockEntity extends AENetworkBlockEntity implements IAEMultiBlock { - public static final ModelProperty STATE = new ModelProperty<>(value -> { - // The lower 6 bits are used - return (value & ~0x3F) == 0; - }); - public static final int DISPLAY_END_MIN = 0x01; public static final int DISPLAY_END_MAX = 0x02; public static final int DISPLAY_MIDDLE = 0x01 + 0x02; @@ -91,9 +81,9 @@ public class SpatialPylonBlockEntity extends AENetworkBlockEntity implements IAE } @Override - public void remove() { + public void markRemoved() { this.disconnect(false); - super.remove(); + super.markRemoved(); } public void neighborUpdate() { diff --git a/src/main/java/appeng/tile/storage/ChestBlockEntity.java b/src/main/java/appeng/tile/storage/ChestBlockEntity.java index 35ac85a18..283fc7dc1 100644 --- a/src/main/java/appeng/tile/storage/ChestBlockEntity.java +++ b/src/main/java/appeng/tile/storage/ChestBlockEntity.java @@ -21,6 +21,7 @@ package appeng.tile.storage; import alexiil.mc.lib.attributes.AttributeList; import alexiil.mc.lib.attributes.Simulation; import alexiil.mc.lib.attributes.fluid.FluidInsertable; +import alexiil.mc.lib.attributes.fluid.FluidVolumeUtil; import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; import alexiil.mc.lib.attributes.fluid.filter.ConstantFluidFilter; import alexiil.mc.lib.attributes.fluid.filter.FluidFilter; @@ -50,6 +51,7 @@ import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEStack; import appeng.api.util.AEColor; import appeng.api.util.IConfigManager; +import appeng.container.implementations.MEMonitorableContainer; import appeng.fluids.util.AEFluidStack; import appeng.helpers.IPriorityHost; import appeng.me.GridAccessException; @@ -703,6 +705,9 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity FluidAmount filledAmt = remaining != null ? remaining.getAmount() : toInsert.getAmount(); FluidAmount remainingAmt = fluidVolume.amount().roundedSub(filledAmt, RoundingMode.DOWN); + if (remainingAmt.isZero()) { + return FluidVolumeUtil.EMPTY; + } return fluidVolume.withAmount(remainingAmt); } @@ -756,8 +761,7 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity if (this.cellHandler != null) { if (this.cellHandler.getChannel() == AEApi.instance().storage() .getStorageChannel(IItemStorageChannel.class)) { - throw new IllegalStateException(); - // FIXME FABRIC return MEMonitorableContainer.TYPE; + return MEMonitorableContainer.TYPE; } if (this.cellHandler.getChannel() == AEApi.instance().storage() .getStorageChannel(IFluidStorageChannel.class)) { diff --git a/src/unported/java/appeng/tile/storage/DriveBlockEntity.java b/src/main/java/appeng/tile/storage/DriveBlockEntity.java similarity index 92% rename from src/unported/java/appeng/tile/storage/DriveBlockEntity.java rename to src/main/java/appeng/tile/storage/DriveBlockEntity.java index b13db2fb3..ca27ecea6 100644 --- a/src/unported/java/appeng/tile/storage/DriveBlockEntity.java +++ b/src/main/java/appeng/tile/storage/DriveBlockEntity.java @@ -37,9 +37,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.Direction; import net.minecraft.util.Identifier; -import net.minecraftforge.registries.ForgeRegistries; import appeng.api.AEApi; import appeng.api.implementations.tiles.IChestOrDrive; @@ -73,6 +71,8 @@ import appeng.tile.inventory.AppEngCellInventory; import appeng.util.Platform; import appeng.util.inv.InvOperation; import appeng.util.inv.filter.IAEItemFilter; +import net.minecraft.util.math.Direction; +import net.minecraft.util.registry.Registry; public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestOrDrive, IPriorityHost { @@ -115,7 +115,6 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO super(tileEntityTypeIn); this.mySrc = new MachineSource(this); this.getProxy().setFlags(GridFlags.REQUIRE_CHANNEL); - this.inv.setFilter(new CellValidInventoryFilter()); this.inventoryHandlers = new IdentityHashMap<>(); } @@ -145,12 +144,12 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO } private void writeCellItemIds(PacketByteBuf data) { - List cellItemIds = new ArrayList<>(getCellCount()); + List cellItemIds = new ArrayList<>(getCellCount()); byte[] bm = new byte[getCellCount()]; for (int x = 0; x < this.getCellCount(); x++) { Item item = getCellItem(x); - if (item != null && item.getRegistryName() != null) { - Identifier itemId = item.getRegistryName(); + if (item != null) { + int itemId = Item.getRawId(item); int idx = cellItemIds.indexOf(itemId); if (idx == -1) { cellItemIds.add(itemId); @@ -163,8 +162,8 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO // Write out the list of unique cell item ids data.writeByte(cellItemIds.size()); - for (Identifier itemId : cellItemIds) { - data.writeResourceLocation(itemId); + for (int itemId : cellItemIds) { + data.writeVarInt(itemId); } // Then the lookup table for each slot for (int i = 0; i < getCellCount(); i++) { @@ -184,10 +183,10 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO } private boolean readCellItemIDs(final PacketByteBuf data) { - int uniqueStrCount = data.readByte(); - String[] uniqueStrs = new String[uniqueStrCount]; - for (int i = 0; i < uniqueStrCount; i++) { - uniqueStrs[i] = data.readString(); + int uniqueIdCount = data.readByte(); + int[] uniqueIds = new int[uniqueIdCount]; + for (int i = 0; i < uniqueIdCount; i++) { + uniqueIds[i] = data.readVarInt(); } boolean changed = false; @@ -198,8 +197,8 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO Item item = null; if (idx > 0) { --idx; - String itemId = uniqueStrs[idx]; - item = Registry.ITEM.get(new Identifier(itemId)); + int itemId = uniqueIds[idx]; + item = Item.byRawId(itemId); } if (cellItems[i] != item) { changed = true; @@ -434,20 +433,6 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO this.world.markDirty(this.pos, this); } - private class CellValidInventoryFilter implements IAEItemFilter { - - @Override - public boolean allowExtract(FixedItemInv inv, int slot, int amount) { - return true; - } - - @Override - public boolean allowInsert(FixedItemInv inv, int slot, ItemStack stack) { - return !stack.isEmpty() && AEApi.instance().registries().cell().isCellHandled(stack); - } - - } - @Override public ItemStack getItemStackRepresentation() { return AEApi.instance().definitions().blocks().drive().maybeStack(1).orElse(ItemStack.EMPTY); diff --git a/src/unported/java/appeng/tile/storage/IOPortBlockEntity.java b/src/main/java/appeng/tile/storage/IOPortBlockEntity.java similarity index 99% rename from src/unported/java/appeng/tile/storage/IOPortBlockEntity.java rename to src/main/java/appeng/tile/storage/IOPortBlockEntity.java index 6a6058445..b42992903 100644 --- a/src/unported/java/appeng/tile/storage/IOPortBlockEntity.java +++ b/src/main/java/appeng/tile/storage/IOPortBlockEntity.java @@ -22,6 +22,7 @@ import java.util.IdentityHashMap; import java.util.List; import java.util.Map; +import alexiil.mc.lib.attributes.Simulation; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -395,7 +396,7 @@ public class IOPortBlockEntity extends AENetworkInvBlockEntity private boolean moveSlot(final int x) { final InventoryAdaptor ad = new AdaptorFixedInv(this.outputCells); if (ad.addItems(this.inputCells.getInvStack(x)).isEmpty()) { - this.inputCells.setInvStack(x, ItemStack.EMPTY); + this.inputCells.setInvStack(x, ItemStack.EMPTY, Simulation.ACTION); return true; } return false; diff --git a/src/main/java/appeng/util/BlockUpdateFlag.java b/src/main/java/appeng/util/BlockUpdateFlag.java new file mode 100644 index 000000000..368a4e5e2 --- /dev/null +++ b/src/main/java/appeng/util/BlockUpdateFlag.java @@ -0,0 +1,7 @@ +package appeng.util; + +public interface BlockUpdateFlag { + + int BLOCK_UPDATE = 2; + +} diff --git a/src/main/java/appeng/util/FakePlayer.java b/src/main/java/appeng/util/FakePlayer.java index 48ace2645..21cf08db0 100644 --- a/src/main/java/appeng/util/FakePlayer.java +++ b/src/main/java/appeng/util/FakePlayer.java @@ -48,6 +48,11 @@ public class FakePlayer extends ServerPlayerEntity { return p; } + public static boolean isFakePlayer(PlayerEntity player) { + // FIXME FABRIC: Is there a reliable way of detecting fake players of other mods??? + return player instanceof FakePlayer; + } + @Override public void tick() { } diff --git a/src/main/resources/appliedenergistics2.accesswidener b/src/main/resources/appliedenergistics2.accesswidener index 262127ca9..733d028b9 100644 --- a/src/main/resources/appliedenergistics2.accesswidener +++ b/src/main/resources/appliedenergistics2.accesswidener @@ -3,3 +3,8 @@ accessible method net/minecraft/client/particle/RedDustParticle (Lnet/min # To disable water-bobbing of item entities (for growing crystals) extendable method net/minecraft/entity/ItemEntity applyBuoyancy ()V + +extendable method net/minecraft/client/gui/screen/ingame/HandledScreen drawSlot (Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/screen/slot/Slot;)V + +# Show selection highlight only on focus +extendable method net/minecraft/client/gui/widget/TextFieldWidget drawSelectionHighlight (IIII)V diff --git a/src/main/resources/appliedenergistics2.mixins.json b/src/main/resources/appliedenergistics2.mixins.json index c589f7772..322230c56 100644 --- a/src/main/resources/appliedenergistics2.mixins.json +++ b/src/main/resources/appliedenergistics2.mixins.json @@ -6,10 +6,14 @@ "mixins": [ "CriteriaRegisterMixin", "RemainderSetter", - "ShapelessRecipeMixin" + "ScreenHandlerListeners", + "ShapelessRecipeMixin", + "SlotMixin", + "TntAccessor" ], "client": [ - "ModelsReloadMixin" + "ModelsReloadMixin", + "RenderPhaseMixin" ], "server": [], "injectors": { diff --git a/src/unported/java/appeng/capabilities/NullSpatialDimension.java b/src/unported/java/appeng/attributes/NullSpatialDimension.java similarity index 98% rename from src/unported/java/appeng/capabilities/NullSpatialDimension.java rename to src/unported/java/appeng/attributes/NullSpatialDimension.java index 567048c1e..9432b4a69 100644 --- a/src/unported/java/appeng/capabilities/NullSpatialDimension.java +++ b/src/unported/java/appeng/attributes/NullSpatialDimension.java @@ -16,7 +16,7 @@ * along with Applied Energistics 2. If not, see . */ -package appeng.capabilities; +package appeng.attributes; import java.util.List; diff --git a/src/unported/java/appeng/block/paint/PaintSplotchesModel.java b/src/unported/java/appeng/block/paint/PaintSplotchesModel.java deleted file mode 100644 index 99f3710c1..000000000 --- a/src/unported/java/appeng/block/paint/PaintSplotchesModel.java +++ /dev/null @@ -1,36 +0,0 @@ - -package appeng.block.paint; - -import java.util.Collection; -import java.util.Set; -import java.util.function.Function; - -import com.mojang.datafixers.util.Pair; - -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.IModelTransform; -import net.minecraft.client.render.model.IUnbakedModel; -import net.minecraft.client.render.model.json.ModelOverrideList; -import net.minecraft.client.util.SpriteIdentifier; -import net.minecraft.client.render.model.ModelLoader; -import net.minecraft.client.texture.Sprite; -import net.minecraft.util.Identifier; -import net.minecraftforge.client.model.IModelConfiguration; -import net.minecraftforge.client.model.geometry.IModelGeometry; - -public class PaintSplotchesModel implements IModelGeometry { - - @Override - public BakedModel bake(IModelConfiguration owner, ModelLoader bakery, - Function spriteGetter, IModelTransform modelTransform, - ModelOverrideList overrides, Identifier modelLocation) { - return new PaintSplotchesBakedModel(spriteGetter); - } - - @Override - public Collection getTextures(IModelConfiguration owner, - Function modelGetter, Set> missingTextureErrors) { - return PaintSplotchesBakedModel.getRequiredTextures(); - } - -} diff --git a/src/unported/java/appeng/capabilities/Capabilities.java b/src/unported/java/appeng/capabilities/Capabilities.java deleted file mode 100644 index 894214568..000000000 --- a/src/unported/java/appeng/capabilities/Capabilities.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.capabilities; - -import net.minecraft.nbt.INBT; -import net.minecraft.util.math.Direction; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityInject; -import net.minecraftforge.common.capabilities.CapabilityManager; -import net.minecraftforge.energy.IEnergyStorage; - -import appeng.api.storage.ISpatialDimension; -import appeng.api.storage.IStorageMonitorableAccessor; - -/** - * Utility class that holds various capabilities, both by AE2 and other Mods. - */ -public final class Capabilities { - - private Capabilities() { - } - - public static Capability STORAGE_MONITORABLE_ACCESSOR; - - public static Capability SPATIAL_DIMENSION; - - public static Capability FORGE_ENERGY; - - /** - * Register AE2 provided capabilities. - */ - public static void register() { - CapabilityManager.INSTANCE.register(IStorageMonitorableAccessor.class, createNullStorage(), - NullMENetworkAccessor::new); - CapabilityManager.INSTANCE.register(ISpatialDimension.class, createNullStorage(), NullSpatialDimension::new); - } - - @CapabilityInject(IStorageMonitorableAccessor.class) - private static void capIStorageMonitorableAccessorRegistered(Capability cap) { - STORAGE_MONITORABLE_ACCESSOR = cap; - } - - @CapabilityInject(ISpatialDimension.class) - private static void capISpatialDimensionRegistered(Capability cap) { - SPATIAL_DIMENSION = cap; - } - - @CapabilityInject(IEnergyStorage.class) - private static void capIEnergyStorageRegistered(Capability cap) { - FORGE_ENERGY = cap; - } - - // Create a storage implementation that does not do anything - private static Capability.IStorage createNullStorage() { - return new Capability.IStorage() { - @Override - public INBT writeNBT(Capability capability, T instance, Direction side) { - return null; - } - - @Override - public void readNBT(Capability capability, T instance, Direction side, INBT nbt) { - - } - }; - } -} diff --git a/src/unported/java/appeng/client/ClientHelper.java b/src/unported/java/appeng/client/ClientHelper.java index 32f1d974b..a51ebe476 100644 --- a/src/unported/java/appeng/client/ClientHelper.java +++ b/src/unported/java/appeng/client/ClientHelper.java @@ -25,12 +25,10 @@ import java.util.Random; import net.minecraft.client.MinecraftClient; import net.minecraft.client.settings.KeyBinding; -import net.minecraft.client.util.InputMappings; import net.minecraft.client.util.InputUtil; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.Hand; -import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.client.event.InputEvent; @@ -38,7 +36,6 @@ import net.minecraftforge.client.event.RenderLivingEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.registry.ClientRegistry; -import appeng.api.parts.CableRenderMode; import appeng.block.AEBaseBlock; import appeng.client.render.effects.*; import appeng.core.AEConfig; @@ -52,7 +49,6 @@ import appeng.util.Platform; public class ClientHelper extends ServerHelper { private final static String KEY_CATEGORY = "key.appliedenergistics2.category"; - private final EnumMap bindings = new EnumMap<>(ActionKey.class); public void clientInit() { MinecraftForge.EVENT_BUS.addListener(this::postPlayerRender); @@ -177,8 +173,4 @@ public class ClientHelper extends ServerHelper { } } - @Override - public boolean isActionKey(ActionKey key, InputUtil.Key pressedKey) { - return this.bindings.get(key).isActiveAndMatches(pressedKey); - } } \ No newline at end of file diff --git a/src/unported/java/appeng/client/gui/Size1Slot.java b/src/unported/java/appeng/client/gui/Size1Slot.java deleted file mode 100644 index b73967a4f..000000000 --- a/src/unported/java/appeng/client/gui/Size1Slot.java +++ /dev/null @@ -1,75 +0,0 @@ - -package appeng.client.gui; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.Slot; -import net.minecraft.item.ItemStack; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraftforge.items.SlotItemHandler; - -/** - * A proxy for a slot that will always return an itemstack with size 1, if there - * is an item in the slot. Used to prevent the default item count from - * rendering. - */ -class Size1Slot extends SlotItemHandler { - - private final SlotItemHandler delegate; - - public Size1Slot(SlotItemHandler delegate) { - super(delegate.getItemHandler(), delegate.getSlotIndex(), delegate.xPos, delegate.yPos); - this.delegate = delegate; - } - - @Override - @Nonnull - public ItemStack getStack() { - ItemStack orgStack = this.delegate.getStack(); - if (!orgStack.isEmpty()) { - ItemStack modifiedStack = orgStack.copy(); - modifiedStack.setCount(1); - return modifiedStack; - } - - return ItemStack.EMPTY; - } - - @Override - public boolean getHasStack() { - return this.delegate.getHasStack(); - } - - @Override - public int getSlotStackLimit() { - return this.delegate.getSlotStackLimit(); - } - - @Override - public int getItemStackLimit(ItemStack stack) { - return this.delegate.getItemStackLimit(stack); - } - - @Override - public boolean canTakeStack(PlayerEntity playerIn) { - return this.delegate.canTakeStack(playerIn); - } - - @Override - @Environment(EnvType.CLIENT) - public boolean isEnabled() { - return this.delegate.isEnabled(); - } - - @Override - public int getSlotIndex() { - return this.delegate.getSlotIndex(); - } - - @Override - public boolean isSameInventory(Slot other) { - return this.delegate.isSameInventory(other); - } -} diff --git a/src/unported/java/appeng/client/gui/implementations/CellWorkbenchScreen.java b/src/unported/java/appeng/client/gui/implementations/CellWorkbenchScreen.java index 4d4d892cf..c5bdff621 100644 --- a/src/unported/java/appeng/client/gui/implementations/CellWorkbenchScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/CellWorkbenchScreen.java @@ -18,10 +18,11 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import alexiil.mc.lib.attributes.item.FixedItemInv; import appeng.api.config.ActionItems; @@ -45,80 +46,73 @@ public class CellWorkbenchScreen extends UpgradeableScreen(this.guiLeft - 18, this.guiTop + 68, + this.fuzzyMode = this.addButton(new SettingToggleButton<>(this.x - 18, this.y + 68, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, this::toggleFuzzyMode)); this.addButton( - new ActionButton(this.guiLeft - 18, this.guiTop + 28, ActionItems.WRENCH, act1 -> action("Partition"))); - this.addButton(new ActionButton(this.guiLeft - 18, this.guiTop + 8, ActionItems.CLOSE, act -> action("Clear"))); - this.copyMode = this.addButton(new ToggleButton(this.guiLeft - 18, this.guiTop + 48, 11 * 16 + 5, 12 * 16 + 5, + new ActionButton(this.x - 18, this.y + 28, ActionItems.WRENCH, act1 -> action("Partition"))); + this.addButton(new ActionButton(this.x - 18, this.y + 8, ActionItems.CLOSE, act -> action("Clear"))); + this.copyMode = this.addButton(new ToggleButton(this.x - 18, this.y + 48, 11 * 16 + 5, 12 * 16 + 5, GuiText.CopyMode.getLocal(), GuiText.CopyModeDesc.getLocal(), act -> action("CopyMode"))); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.handleButtonVisibility(); this.bindTexture(this.getBackground()); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, 211 - 34, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, 211 - 34, this.backgroundHeight); if (this.drawUpgrades()) { - if (this.container.availableUpgrades() <= 8) { - GuiUtils.drawTexturedModalRect(offsetX + 177, offsetY, 177, 0, 35, - 7 + this.container.availableUpgrades() * 18, getBlitOffset()); - GuiUtils.drawTexturedModalRect(offsetX + 177, offsetY + (7 + (this.container.availableUpgrades()) * 18), - 177, 151, 35, 7, getBlitOffset()); - } else if (this.container.availableUpgrades() <= 16) { - GuiUtils.drawTexturedModalRect(offsetX + 177, offsetY, 177, 0, 35, 7 + 8 * 18, getBlitOffset()); - GuiUtils.drawTexturedModalRect(offsetX + 177, offsetY + (7 + (8) * 18), 177, 151, 35, 7, - getBlitOffset()); + if (this.handler.availableUpgrades() <= 8) { + drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, + 7 + this.handler.availableUpgrades() * 18, getZOffset()); + drawTexture(matrices, offsetX + 177, offsetY + (7 + (this.handler.availableUpgrades()) * 18), + 177, 151, 35, 7, getZOffset()); + } else if (this.handler.availableUpgrades() <= 16) { + drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, 7 + 8 * 18); + drawTexture(matrices, offsetX + 177, offsetY + (7 + (8) * 18), 177, 151, 35, 7); - final int dx = this.container.availableUpgrades() - 8; - GuiUtils.drawTexturedModalRect(offsetX + 177 + 27, offsetY, 186, 0, 35 - 8, 7 + dx * 18, - getBlitOffset()); + final int dx = this.handler.availableUpgrades() - 8; + drawTexture(matrices, offsetX + 177 + 27, offsetY, 186, 0, 35 - 8, 7 + dx * 18); if (dx == 8) { - GuiUtils.drawTexturedModalRect(offsetX + 177 + 27, offsetY + (7 + (dx) * 18), 186, 151, 35 - 8, 7, - getBlitOffset()); + drawTexture(matrices, offsetX + 177 + 27, offsetY + (7 + (dx) * 18), 186, 151, 35 - 8, 7); } else { - GuiUtils.drawTexturedModalRect(offsetX + 177 + 27 + 4, offsetY + (7 + (dx) * 18), 186 + 4, 151, - 35 - 8, 7, getBlitOffset()); + drawTexture(matrices, offsetX + 177 + 27 + 4, offsetY + (7 + (dx) * 18), 186 + 4, 151, + 35 - 8, 7, getZOffset()); } } else { - GuiUtils.drawTexturedModalRect(offsetX + 177, offsetY, 177, 0, 35, 7 + 8 * 18, getBlitOffset()); - GuiUtils.drawTexturedModalRect(offsetX + 177, offsetY + (7 + (8) * 18), 177, 151, 35, 7, - getBlitOffset()); + drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, 7 + 8 * 18); + drawTexture(matrices, offsetX + 177, offsetY + (7 + (8) * 18), 177, 151, 35, 7); - GuiUtils.drawTexturedModalRect(offsetX + 177 + 27, offsetY, 186, 0, 35 - 8, 7 + 8 * 18, - getBlitOffset()); - GuiUtils.drawTexturedModalRect(offsetX + 177 + 27, offsetY + (7 + (8) * 18), 186, 151, 35 - 8, 7, - getBlitOffset()); + drawTexture(matrices, offsetX + 177 + 27, offsetY, 186, 0, 35 - 8, 7 + 8 * 18); + drawTexture(matrices, offsetX + 177 + 27, offsetY + (7 + (8) * 18), 186, 151, 35 - 8, 7); - final int dx = this.container.availableUpgrades() - 16; - GuiUtils.drawTexturedModalRect(offsetX + 177 + 27 + 18, offsetY, 186, 0, 35 - 8, 7 + dx * 18, - getBlitOffset()); + final int dx = this.handler.availableUpgrades() - 16; + drawTexture(matrices, offsetX + 177 + 27 + 18, offsetY, 186, 0, 35 - 8, 7 + dx * 18); if (dx == 8) { - GuiUtils.drawTexturedModalRect(offsetX + 177 + 27 + 18, offsetY + (7 + (dx) * 18), 186, 151, 35 - 8, - 7, getBlitOffset()); + drawTexture(matrices, offsetX + 177 + 27 + 18, offsetY + (7 + (dx) * 18), 186, 151, 35 - 8, + 7, getZOffset()); } else { - GuiUtils.drawTexturedModalRect(offsetX + 177 + 27 + 18 + 4, offsetY + (7 + (dx) * 18), 186 + 4, 151, - 35 - 8, 7, getBlitOffset()); + drawTexture(matrices, offsetX + 177 + 27 + 18 + 4, offsetY + (7 + (dx) * 18), 186 + 4, 151, + 35 - 8, 7, getZOffset()); } } } if (this.hasToolbox()) { - GuiUtils.drawTexturedModalRect(offsetX + 178, offsetY + this.ySize - 90, 178, 161, 68, 68, getBlitOffset()); + drawTexture(matrices, offsetX + 178, offsetY + this.backgroundHeight - 90, 178, 161, 68, 68); } } @Override protected void handleButtonVisibility() { - this.copyMode.setState(this.container.getCopyMode() == CopyMode.CLEAR_ON_REMOVE); + this.copyMode.setState(this.handler.getCopyMode() == CopyMode.CLEAR_ON_REMOVE); boolean hasFuzzy = false; - final FixedItemInv inv = this.container.getCellUpgradeInventory(); + final FixedItemInv inv = this.handler.getCellUpgradeInventory(); for (int x = 0; x < inv.getSlotCount(); x++) { final ItemStack is = inv.getInvStack(x); if (!is.isEmpty() && is.getItem() instanceof IUpgradeModule) { @@ -137,7 +131,7 @@ public class CellWorkbenchScreen extends UpgradeableScreen 0; + return this.handler.availableUpgrades() > 0; } @Override diff --git a/src/unported/java/appeng/client/gui/implementations/CondenserScreen.java b/src/unported/java/appeng/client/gui/implementations/CondenserScreen.java index 5e8beda10..026574c21 100644 --- a/src/unported/java/appeng/client/gui/implementations/CondenserScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/CondenserScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.api.config.CondenserOutput; import appeng.api.config.Settings; @@ -38,34 +39,34 @@ public class CondenserScreen extends AEBaseScreen { public CondenserScreen(CondenserContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 197; + this.backgroundHeight = 197; } @Override public void init() { super.init(); - this.mode = new ServerSettingToggleButton<>(128 + this.guiLeft, 52 + this.guiTop, Settings.CONDENSER_OUTPUT, - this.container.getOutput()); + this.mode = new ServerSettingToggleButton<>(128 + this.x, 52 + this.y, Settings.CONDENSER_OUTPUT, + this.handler.getOutput()); - this.addButton(new ProgressBar(this.container, "guis/condenser.png", 120 + this.guiLeft, 25 + this.guiTop, 178, + this.addButton(new ProgressBar(this.handler, "guis/condenser.png", 120 + this.x, 25 + this.y, 178, 25, 6, 18, Direction.VERTICAL, GuiText.StoredEnergy.getLocal())); this.addButton(this.mode); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.Condenser.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Condenser.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); - this.mode.set(this.container.getOutput()); - this.mode.setFillVar(String.valueOf(this.container.getOutput().requiredPower)); + this.mode.set(this.handler.getOutput()); + this.mode.setFillVar(String.valueOf(this.handler.getOutput().requiredPower)); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/condenser.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } } diff --git a/src/unported/java/appeng/client/gui/implementations/CraftAmountScreen.java b/src/unported/java/appeng/client/gui/implementations/CraftAmountScreen.java index 708d8ca91..2e16dcfc9 100644 --- a/src/unported/java/appeng/client/gui/implementations/CraftAmountScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/CraftAmountScreen.java @@ -18,11 +18,11 @@ package appeng.client.gui.implementations; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.client.util.InputMappings; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.client.gui.widgets.NumberBox; @@ -37,7 +37,7 @@ public class CraftAmountScreen extends AEBaseScreen { private NumberBox amountToCraft; - private Button next; + private ButtonWidget next; public CraftAmountScreen(CraftAmountContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); @@ -53,47 +53,47 @@ public class CraftAmountScreen extends AEBaseScreen { final int c = AEConfig.instance().craftItemsByStackAmounts(2); final int d = AEConfig.instance().craftItemsByStackAmounts(3); - this.addButton(new Button(this.guiLeft + 20, this.guiTop + 26, 22, 20, "+" + a, btn -> addQty(a))); - this.addButton(new Button(this.guiLeft + 48, this.guiTop + 26, 28, 20, "+" + b, btn -> addQty(b))); - this.addButton(new Button(this.guiLeft + 82, this.guiTop + 26, 32, 20, "+" + c, btn -> addQty(c))); - this.addButton(new Button(this.guiLeft + 120, this.guiTop + 26, 38, 20, "+" + d, btn -> addQty(d))); + this.addButton(new ButtonWidget(this.x + 20, this.y + 26, 22, 20, "+" + a, btn -> addQty(a))); + this.addButton(new ButtonWidget(this.x + 48, this.y + 26, 28, 20, "+" + b, btn -> addQty(b))); + this.addButton(new ButtonWidget(this.x + 82, this.y + 26, 32, 20, "+" + c, btn -> addQty(c))); + this.addButton(new ButtonWidget(this.x + 120, this.y + 26, 38, 20, "+" + d, btn -> addQty(d))); - this.addButton(new Button(this.guiLeft + 20, this.guiTop + 75, 22, 20, "-" + a, btn -> addQty(-a))); - this.addButton(new Button(this.guiLeft + 48, this.guiTop + 75, 28, 20, "-" + b, btn -> addQty(-b))); - this.addButton(new Button(this.guiLeft + 82, this.guiTop + 75, 32, 20, "-" + c, btn -> addQty(-c))); - this.addButton(new Button(this.guiLeft + 120, this.guiTop + 75, 38, 20, "-" + d, btn -> addQty(-d))); + this.addButton(new ButtonWidget(this.x + 20, this.y + 75, 22, 20, "-" + a, btn -> addQty(-a))); + this.addButton(new ButtonWidget(this.x + 48, this.y + 75, 28, 20, "-" + b, btn -> addQty(-b))); + this.addButton(new ButtonWidget(this.x + 82, this.y + 75, 32, 20, "-" + c, btn -> addQty(-c))); + this.addButton(new ButtonWidget(this.x + 120, this.y + 75, 38, 20, "-" + d, btn -> addQty(-d))); this.next = this.addButton( - new Button(this.guiLeft + 128, this.guiTop + 51, 38, 20, GuiText.Next.getLocal(), this::confirm)); + new ButtonWidget(this.x + 128, this.y + 51, 38, 20, GuiText.Next.getLocal(), this::confirm)); subGui.addBackButton(this::addButton, 154, 0); - this.amountToCraft = new NumberBox(this.font, this.guiLeft + 62, this.guiTop + 57, 59, this.font.FONT_HEIGHT, + this.amountToCraft = new NumberBox(this.textRenderer, this.x + 62, this.y + 57, 59, this.textRenderer.FONT_HEIGHT, Integer.class); - this.amountToCraft.setEnableBackgroundDrawing(false); - this.amountToCraft.setMaxStringLength(16); - this.amountToCraft.setTextColor(0xFFFFFF); + this.amountToCraft.setHasBorder(false); + this.amountToCraft.setMaxLength(16); + this.amountToCraft.setEditableColor(0xFFFFFF); this.amountToCraft.setVisible(true); - this.amountToCraft.setFocused2(true); + this.amountToCraft.setFocused(true); this.amountToCraft.setText("1"); } - private void confirm(Button button) { + private void confirm(ButtonWidget button) { NetworkHandler.instance() .sendToServer(new CraftRequestPacket(Integer.parseInt(this.amountToCraft.getText()), hasShiftDown())); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(GuiText.SelectAmount.getLocal(), 8, 6, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, GuiText.SelectAmount.getLocal(), 8, 6, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.next.setMessage(hasShiftDown() ? GuiText.Start.getLocal() : GuiText.Next.getLocal()); this.bindTexture("guis/craft_amt.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); try { Long.parseLong(this.amountToCraft.getText()); @@ -113,7 +113,7 @@ public class CraftAmountScreen extends AEBaseScreen { @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - if (!this.checkHotbarKeys(InputMappings.getInputByCode(keyCode, scanCode))) { + if (!this.checkHotbarKeys(keyCode, scanCode)) { if (keyCode == 28) { this.next.onPress(); } diff --git a/src/unported/java/appeng/client/gui/implementations/CraftConfirmScreen.java b/src/unported/java/appeng/client/gui/implementations/CraftConfirmScreen.java index 0dc4aa465..3c1db10b5 100644 --- a/src/unported/java/appeng/client/gui/implementations/CraftConfirmScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/CraftConfirmScreen.java @@ -26,12 +26,12 @@ import java.util.List; import com.google.common.base.Joiner; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.client.util.InputMappings; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.api.AEApi; import appeng.api.storage.channels.IItemStorageChannel; @@ -60,51 +60,51 @@ public class CraftConfirmScreen extends AEBaseScreen { private final List visual = new ArrayList<>(); - private Button start; - private Button selectCPU; + private ButtonWidget start; + private ButtonWidget selectCPU; private int tooltip = -1; public CraftConfirmScreen(CraftConfirmContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); this.subGui = new AESubScreen(this, container.getTarget()); - this.xSize = 238; - this.ySize = 206; + this.backgroundWidth = 238; + this.backgroundHeight = 206; final Scrollbar scrollbar = new Scrollbar(); this.setScrollBar(scrollbar); } boolean isAutoStart() { - return this.container.isAutoStart(); + return this.handler.isAutoStart(); } @Override public void init() { super.init(); - this.start = new Button(this.guiLeft + 162, this.guiTop + this.ySize - 25, 50, 20, GuiText.Start.getLocal(), + this.start = new ButtonWidget(this.x + 162, this.y + this.backgroundHeight - 25, 50, 20, GuiText.Start.getLocal(), btn -> start()); this.start.active = false; this.addButton(this.start); - this.selectCPU = new Button(this.guiLeft + (219 - 180) / 2, this.guiTop + this.ySize - 68, 180, 20, + this.selectCPU = new ButtonWidget(this.x + (219 - 180) / 2, this.y + this.backgroundHeight - 68, 180, 20, GuiText.CraftingCPU.getLocal() + ": " + GuiText.Automatic, btn -> selectNextCpu()); this.selectCPU.active = false; this.addButton(this.selectCPU); - addButton(new Button(this.guiLeft + 6, this.guiTop + this.ySize - 25, 50, 20, GuiText.Cancel.getLocal(), + addButton(new ButtonWidget(this.x + 6, this.y + this.backgroundHeight - 25, 50, 20, GuiText.Cancel.getLocal(), btn -> subGui.goBack())); } @Override - public void render(final int mouseX, final int mouseY, final float btn) { + public void render(MatrixStack matrices, final int mouseX, final int mouseY, final float btn) { this.updateCPUButtonText(); - this.start.active = !(this.container.hasNoCPU() || this.isSimulation()); + this.start.active = !(this.handler.hasNoCPU() || this.isSimulation()); this.selectCPU.active = !this.isSimulation(); - final int gx = (this.width - this.xSize) / 2; - final int gy = (this.height - this.ySize) / 2; + final int gx = (this.width - this.backgroundWidth) / 2; + final int gy = (this.height - this.backgroundHeight) / 2; this.tooltip = -1; @@ -130,22 +130,22 @@ public class CraftConfirmScreen extends AEBaseScreen { } } - super.render(mouseX, mouseY, btn); + super.render(matrices, mouseX, mouseY, btn); } private void updateCPUButtonText() { String btnTextText = GuiText.CraftingCPU.getLocal() + ": " + GuiText.Automatic.getLocal(); - if (this.container.getSelectedCpu() >= 0)// && status.selectedCpu < status.cpus.size() ) + if (this.handler.getSelectedCpu() >= 0)// && status.selectedCpu < status.cpus.size() ) { - if (this.container.getName() != null) { - final String name = this.container.getName().getStringTruncated(20); + if (this.handler.getName() != null) { + final String name = this.handler.getName().getStringTruncated(20); btnTextText = GuiText.CraftingCPU.getLocal() + ": " + name; } else { - btnTextText = GuiText.CraftingCPU.getLocal() + ": #" + this.container.getSelectedCpu(); + btnTextText = GuiText.CraftingCPU.getLocal() + ": #" + this.handler.getSelectedCpu(); } } - if (this.container.hasNoCPU()) { + if (this.handler.hasNoCPU()) { btnTextText = GuiText.NoCraftingCPUs.getLocal(); } @@ -153,30 +153,30 @@ public class CraftConfirmScreen extends AEBaseScreen { } private boolean isSimulation() { - return this.container.isSimulation(); + return this.handler.isSimulation(); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - final long BytesUsed = this.container.getUsedBytes(); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + final long BytesUsed = this.handler.getUsedBytes(); final String byteUsed = NumberFormat.getInstance().format(BytesUsed); final String Add = BytesUsed > 0 ? (byteUsed + ' ' + GuiText.BytesUsed.getLocal()) : GuiText.CalculatingWait.getLocal(); - this.font.drawString(GuiText.CraftingPlan.getLocal() + " - " + Add, 8, 7, 4210752); + this.textRenderer.draw(matrices, GuiText.CraftingPlan.getLocal() + " - " + Add, 8, 7, 4210752); String dsp = null; if (this.isSimulation()) { dsp = GuiText.Simulation.getLocal(); } else { - dsp = this.container.getCpuAvailableBytes() > 0 - ? (GuiText.Bytes.getLocal() + ": " + this.container.getCpuAvailableBytes() + " : " - + GuiText.CoProcessors.getLocal() + ": " + this.container.getCpuCoProcessors()) + dsp = this.handler.getCpuAvailableBytes() > 0 + ? (GuiText.Bytes.getLocal() + ": " + this.handler.getCpuAvailableBytes() + " : " + + GuiText.CoProcessors.getLocal() + ": " + this.handler.getCpuCoProcessors()) : GuiText.Bytes.getLocal() + ": N/A : " + GuiText.CoProcessors.getLocal() + ": N/A"; } - final int offset = (219 - this.font.getStringWidth(dsp)) / 2; - this.font.drawString(dsp, offset, 165, 4210752); + final int offset = (219 - this.textRenderer.getWidth(dsp)) / 2; + this.textRenderer.draw(matrices, dsp, offset, 165, 4210752); final int sectionLength = 67; @@ -229,8 +229,8 @@ public class CraftConfirmScreen extends AEBaseScreen { } str = GuiText.FromStorage.getLocal() + ": " + str; - final int w = 4 + this.font.getStringWidth(str); - this.font.drawString(str, + final int w = 4 + this.textRenderer.getWidth(str); + this.textRenderer.draw(matrices, str, (int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2), (y * offY + yo + 6 - negY + downY) * 2, 4210752); @@ -252,8 +252,8 @@ public class CraftConfirmScreen extends AEBaseScreen { } str = GuiText.Missing.getLocal() + ": " + str; - final int w = 4 + this.font.getStringWidth(str); - this.font.drawString(str, + final int w = 4 + this.textRenderer.getWidth(str); + this.textRenderer.draw(matrices, str, (int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2), (y * offY + yo + 6 - negY + downY) * 2, 4210752); @@ -275,8 +275,8 @@ public class CraftConfirmScreen extends AEBaseScreen { } str = GuiText.ToCraft.getLocal() + ": " + str; - final int w = 4 + this.font.getStringWidth(str); - this.font.drawString(str, + final int w = 4 + this.textRenderer.getWidth(str); + this.textRenderer.draw(matrices, str, (int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2), (y * offY + yo + 6 - negY + downY) * 2, 4210752); @@ -320,15 +320,15 @@ public class CraftConfirmScreen extends AEBaseScreen { } if (this.tooltip >= 0 && !dspToolTip.isEmpty()) { - this.drawTooltip(toolPosX, toolPosY + 10, dspToolTip); + this.drawTooltip(, toolPosX, toolPosY + 10, dspToolTip); } } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.setScrollBar(); this.bindTexture("guis/craftingreport.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } private void setScrollBar() { @@ -439,7 +439,7 @@ public class CraftConfirmScreen extends AEBaseScreen { @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - if (!this.checkHotbarKeys(InputMappings.getInputByCode(keyCode, scanCode))) { + if (!this.checkHotbarKeys(keyCode, scanCode)) { if (keyCode == 28) { this.start(); return true; @@ -449,7 +449,7 @@ public class CraftConfirmScreen extends AEBaseScreen { } private void selectNextCpu() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); + final boolean backwards = minecraft.mouse.wasRightButtonClicked(); NetworkHandler.instance().sendToServer(new ConfigValuePacket("Terminal.Cpu", backwards ? "Prev" : "Next")); } diff --git a/src/unported/java/appeng/client/gui/implementations/CraftingCPUScreen.java b/src/unported/java/appeng/client/gui/implementations/CraftingCPUScreen.java index ba660f51a..71055d1f5 100644 --- a/src/unported/java/appeng/client/gui/implementations/CraftingCPUScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/CraftingCPUScreen.java @@ -26,13 +26,14 @@ import java.util.concurrent.TimeUnit; import com.google.common.base.Joiner; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.util.math.MatrixStack; import org.apache.commons.lang3.time.DurationFormatUtils; -import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.api.AEApi; import appeng.api.config.SortDir; @@ -87,13 +88,13 @@ public class CraftingCPUScreen extends AEBaseScr .createList(); private List visual = new ArrayList<>(); - private Button cancel; + private ButtonWidget cancel; private int tooltip = -1; public CraftingCPUScreen(T container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = GUI_HEIGHT; - this.xSize = GUI_WIDTH; + this.backgroundHeight = GUI_HEIGHT; + this.backgroundWidth = GUI_WIDTH; final Scrollbar scrollbar = new Scrollbar(); this.setScrollBar(scrollbar); @@ -114,7 +115,7 @@ public class CraftingCPUScreen extends AEBaseScr public void init() { super.init(); this.setScrollBar(); - this.cancel = new Button(this.guiLeft + CANCEL_LEFT_OFFSET, this.guiTop + this.ySize - CANCEL_TOP_OFFSET, + this.cancel = new ButtonWidget(this.x + CANCEL_LEFT_OFFSET, this.y + this.backgroundHeight - CANCEL_TOP_OFFSET, CANCEL_WIDTH, CANCEL_HEIGHT, GuiText.Cancel.getLocal(), btn -> cancel()); this.addButton(this.cancel); } @@ -127,11 +128,11 @@ public class CraftingCPUScreen extends AEBaseScr } @Override - public void render(final int mouseX, final int mouseY, final float btn) { + public void render(MatrixStack matrices, final int mouseX, final int mouseY, final float btn) { this.cancel.active = !this.visual.isEmpty(); - final int gx = (this.width - this.xSize) / 2; - final int gy = (this.height - this.ySize) / 2; + final int gx = (this.width - this.backgroundWidth) / 2; + final int gy = (this.height - this.backgroundHeight) / 2; this.tooltip = -1; @@ -157,22 +158,22 @@ public class CraftingCPUScreen extends AEBaseScr } } - super.render(mouseX, mouseY, btn); + super.render(matrices, mouseX, mouseY, btn); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { String title = this.getGuiDisplayName(GuiText.CraftingStatus.getLocal()); - if (this.container.getEstimatedTime() > 0 && !this.visual.isEmpty()) { - final long etaInMilliseconds = TimeUnit.MILLISECONDS.convert(this.container.getEstimatedTime(), + if (this.handler.getEstimatedTime() > 0 && !this.visual.isEmpty()) { + final long etaInMilliseconds = TimeUnit.MILLISECONDS.convert(this.handler.getEstimatedTime(), TimeUnit.NANOSECONDS); final String etaTimeText = DurationFormatUtils.formatDuration(etaInMilliseconds, GuiText.ETAFormat.getLocal()); title += " - " + etaTimeText; } - this.font.drawString(title, TITLE_LEFT_OFFSET, TITLE_TOP_OFFSET, TEXT_COLOR); + this.textRenderer.draw(matrices, title, TITLE_LEFT_OFFSET, TITLE_TOP_OFFSET, TEXT_COLOR); int x = 0; int y = 0; @@ -227,8 +228,8 @@ public class CraftingCPUScreen extends AEBaseScr if (stored != null && stored.getStackSize() > 0) { final String str = GuiText.Stored.getLocal() + ": " + converter.toWideReadableForm(stored.getStackSize()); - final int w = 4 + this.font.getStringWidth(str); - this.font.drawString(str, + final int w = 4 + this.textRenderer.getWidth(str); + this.textRenderer.draw(matrices, str, (int) ((x * (1 + SECTION_LENGTH) + ITEMSTACK_LEFT_OFFSET + SECTION_LENGTH - 19 - (w * 0.5)) * 2), (y * offY + ITEMSTACK_TOP_OFFSET + 6 - negY + downY) * 2, TEXT_COLOR); @@ -243,9 +244,9 @@ public class CraftingCPUScreen extends AEBaseScr if (activeStack != null && activeStack.getStackSize() > 0) { final String str = GuiText.Crafting.getLocal() + ": " + converter.toWideReadableForm(activeStack.getStackSize()); - final int w = 4 + this.font.getStringWidth(str); + final int w = 4 + this.textRenderer.getWidth(str); - this.font.drawString(str, + this.textRenderer.draw(matrices, str, (int) ((x * (1 + SECTION_LENGTH) + ITEMSTACK_LEFT_OFFSET + SECTION_LENGTH - 19 - (w * 0.5)) * 2), (y * offY + ITEMSTACK_TOP_OFFSET + 6 - negY + downY) * 2, TEXT_COLOR); @@ -260,9 +261,9 @@ public class CraftingCPUScreen extends AEBaseScr if (pendingStack != null && pendingStack.getStackSize() > 0) { final String str = GuiText.Scheduled.getLocal() + ": " + converter.toWideReadableForm(pendingStack.getStackSize()); - final int w = 4 + this.font.getStringWidth(str); + final int w = 4 + this.textRenderer.getWidth(str); - this.font.drawString(str, + this.textRenderer.draw(matrices, str, (int) ((x * (1 + SECTION_LENGTH) + ITEMSTACK_LEFT_OFFSET + SECTION_LENGTH - 19 - (w * 0.5)) * 2), (y * offY + ITEMSTACK_TOP_OFFSET + 6 - negY + downY) * 2, TEXT_COLOR); @@ -301,14 +302,14 @@ public class CraftingCPUScreen extends AEBaseScr } if (this.tooltip >= 0 && !dspToolTip.isEmpty()) { - this.drawTooltip(toolPosX, toolPosY + 10, dspToolTip); + this.drawTooltip(, toolPosX, toolPosY + 10, dspToolTip); } } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/craftingcpu.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } public void postUpdate(final List list, final byte ref) { diff --git a/src/unported/java/appeng/client/gui/implementations/CraftingStatusScreen.java b/src/unported/java/appeng/client/gui/implementations/CraftingStatusScreen.java index 063923eea..6d9fc2537 100644 --- a/src/unported/java/appeng/client/gui/implementations/CraftingStatusScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/CraftingStatusScreen.java @@ -22,7 +22,8 @@ package appeng.client.gui.implementations; -import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; @@ -35,7 +36,7 @@ public class CraftingStatusScreen extends CraftingCPUScreen selectNextCpu()); this.addButton(this.selectCPU); @@ -58,25 +59,25 @@ public class CraftingStatusScreen extends CraftingCPUScreen= 0)// && status.selectedCpu < status.cpus.size() ) + if (this.handler.selectedCpu >= 0)// && status.selectedCpu < status.cpus.size() ) { - if (this.container.myName != null) { - final String name = this.container.myName.getStringTruncated(20); + if (this.handler.myName != null) { + final String name = this.handler.myName.getStringTruncated(20); btnTextText = GuiText.CPUs.getLocal() + ": " + name; } else { - btnTextText = GuiText.CPUs.getLocal() + ": #" + this.container.selectedCpu; + btnTextText = GuiText.CPUs.getLocal() + ": #" + this.handler.selectedCpu; } } - if (this.container.noCPU) { + if (this.handler.noCPU) { btnTextText = GuiText.NoCraftingJobs.getLocal(); } @@ -90,7 +91,7 @@ public class CraftingStatusScreen extends CraftingCPUScreen clear())); + new ActionButton(this.x + 92, this.y + this.backgroundHeight - 156, ActionItems.STASH, btn -> clear())); clearBtn.setHalfSize(true); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - super.drawFG(offsetX, offsetY, mouseX, mouseY); - this.font.drawString(GuiText.CraftingTerminal.getLocal(), 8, this.ySize - 96 + 1 - this.getReservedSpace(), + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY); + this.textRenderer.draw(matrices, GuiText.CraftingTerminal.getLocal(), 8, this.backgroundHeight - 96 + 1 - this.getReservedSpace(), 4210752); } diff --git a/src/unported/java/appeng/client/gui/implementations/DriveScreen.java b/src/unported/java/appeng/client/gui/implementations/DriveScreen.java index 76385f929..fab74499c 100644 --- a/src/unported/java/appeng/client/gui/implementations/DriveScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/DriveScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.client.gui.widgets.TabButton; @@ -34,14 +35,14 @@ public class DriveScreen extends AEBaseScreen { public DriveScreen(DriveContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 199; + this.backgroundHeight = 199; } @Override public void init() { super.init(); - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), + this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriorityGui())); } @@ -50,14 +51,14 @@ public class DriveScreen extends AEBaseScreen { } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.Drive.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Drive.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/drive.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } } diff --git a/src/unported/java/appeng/client/gui/implementations/FormationPlaneScreen.java b/src/unported/java/appeng/client/gui/implementations/FormationPlaneScreen.java index 9e296ee9e..306ad6e48 100644 --- a/src/unported/java/appeng/client/gui/implementations/FormationPlaneScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/FormationPlaneScreen.java @@ -18,6 +18,7 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; @@ -40,17 +41,17 @@ public class FormationPlaneScreen extends UpgradeableScreen(this.guiLeft - 18, this.guiTop + 28, Settings.PLACE_BLOCK, + this.placeMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 28, Settings.PLACE_BLOCK, YesNo.YES); - this.fuzzyMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 48, Settings.FUZZY_MODE, + this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 48, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL); - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), + this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriorityGui())); this.addButton(this.placeMode); @@ -58,9 +59,9 @@ public class FormationPlaneScreen extends UpgradeableScreen { public IOPortScreen(IOPortContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 166; + this.backgroundHeight = 166; } @Override protected void addButtons() { - this.fullMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 8, Settings.FULLNESS_MODE, + this.fullMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 8, Settings.FULLNESS_MODE, FullnessMode.EMPTY); - this.operationMode = new ServerSettingToggleButton<>(this.guiLeft + 80, this.guiTop + 17, + this.operationMode = new ServerSettingToggleButton<>(this.x + 80, this.y + 17, Settings.OPERATION_MODE, OperationMode.EMPTY); this.addButton(this.operationMode); this.addButton(this.fullMode); - this.redstoneMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 28, + this.redstoneMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 28, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE); addButton(this.redstoneMode); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.IOPort.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.IOPort.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); if (this.redstoneMode != null) { this.redstoneMode.set(this.cvb.getRedStoneMode()); @@ -75,8 +76,8 @@ public class IOPortScreen extends UpgradeableScreen { } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { - super.drawBG(offsetX, offsetY, mouseX, mouseY, partialTicks); + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + super.drawBG(matrices, offsetX, offsetY, mouseX, mouseY, partialTicks); final IDefinitions definitions = AEApi.instance().definitions(); diff --git a/src/unported/java/appeng/client/gui/implementations/InscriberScreen.java b/src/unported/java/appeng/client/gui/implementations/InscriberScreen.java index a4e9dbb6d..bc2dbc31b 100644 --- a/src/unported/java/appeng/client/gui/implementations/InscriberScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/InscriberScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.client.gui.widgets.ProgressBar; @@ -34,45 +35,44 @@ public class InscriberScreen extends AEBaseScreen { public InscriberScreen(InscriberContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 176; - this.xSize = this.hasToolbox() ? 246 : 211; + this.backgroundHeight = 176; + this.backgroundWidth = this.hasToolbox() ? 246 : 211; } private boolean hasToolbox() { - return this.container.hasToolbox(); + return this.handler.hasToolbox(); } @Override public void init() { super.init(); - this.pb = new ProgressBar(this.container, "guis/inscriber.png", 135, 39, 135, 177, 6, 18, Direction.VERTICAL); + this.pb = new ProgressBar(this.handler, "guis/inscriber.png", 135, 39, 135, 177, 6, 18, Direction.VERTICAL); this.addButton(this.pb); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.pb.setFullMsg(this.container.getCurrentProgress() * 100 / this.container.getMaxProgress() + "%"); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.pb.setFullMsg(this.handler.getCurrentProgress() * 100 / this.handler.getMaxProgress() + "%"); - this.font.drawString(this.getGuiDisplayName(GuiText.Inscriber.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Inscriber.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/inscriber.png"); - this.pb.x = 135 + this.guiLeft; - this.pb.y = 39 + this.guiTop; + this.pb.x = 135 + this.x; + this.pb.y = 39 + this.y; - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, 211 - 34, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, 211 - 34, this.backgroundHeight); if (this.drawUpgrades()) { - GuiUtils.drawTexturedModalRect(offsetX + 177, offsetY, 177, 0, 35, - 14 + this.container.availableUpgrades() * 18, getBlitOffset()); + drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, + 14 + this.handler.availableUpgrades() * 18, getZOffset()); } if (this.hasToolbox()) { - GuiUtils.drawTexturedModalRect(offsetX + 178, offsetY + this.ySize - 90, 178, this.ySize - 90, 68, 68, - getBlitOffset()); + drawTexture(matrices, offsetX + 178, offsetY + this.backgroundHeight - 90, 178, this.backgroundHeight - 90, 68, 68); } } diff --git a/src/unported/java/appeng/client/gui/implementations/InterfaceScreen.java b/src/unported/java/appeng/client/gui/implementations/InterfaceScreen.java index 73965d366..6860cac16 100644 --- a/src/unported/java/appeng/client/gui/implementations/InterfaceScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/InterfaceScreen.java @@ -18,6 +18,7 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; @@ -41,25 +42,25 @@ public class InterfaceScreen extends UpgradeableScreen { public InterfaceScreen(InterfaceContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 211; + this.backgroundHeight = 211; } @Override protected void addButtons() { - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), + this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriorityGui())); - this.blockMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 8, Settings.BLOCK, YesNo.NO); + this.blockMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 8, Settings.BLOCK, YesNo.NO); this.addButton(this.blockMode); - this.interfaceMode = new ToggleButton(this.guiLeft - 18, this.guiTop + 26, 84, 85, + this.interfaceMode = new ToggleButton(this.x - 18, this.y + 26, 84, 85, GuiText.InterfaceTerminal.getLocal(), GuiText.InterfaceTerminalHint.getLocal(), btn -> selectNextInterfaceMode()); this.addButton(this.interfaceMode); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { if (this.blockMode != null) { this.blockMode.set(((InterfaceContainer) this.cvb).getBlockingMode()); } @@ -68,13 +69,13 @@ public class InterfaceScreen extends UpgradeableScreen { this.interfaceMode.setState(((InterfaceContainer) this.cvb).getInterfaceTerminalMode() == YesNo.YES); } - this.font.drawString(this.getGuiDisplayName(GuiText.Interface.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Interface.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.Config.getLocal(), 8, 6 + 11 + 7, 4210752); - this.font.drawString(GuiText.StoredItems.getLocal(), 8, 6 + 60 + 7, 4210752); - this.font.drawString(GuiText.Patterns.getLocal(), 8, 6 + 73 + 7, 4210752); + this.textRenderer.draw(matrices, GuiText.Config.getLocal(), 8, 6 + 11 + 7, 4210752); + this.textRenderer.draw(matrices, GuiText.StoredItems.getLocal(), 8, 6 + 60 + 7, 4210752); + this.textRenderer.draw(matrices, GuiText.Patterns.getLocal(), 8, 6 + 73 + 7, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); } @Override @@ -87,7 +88,7 @@ public class InterfaceScreen extends UpgradeableScreen { } private void selectNextInterfaceMode() { - final boolean backwards = getMinecraft().mouseHelper.isRightDown(); + final boolean backwards = getClient().mouse.wasRightButtonClicked(); NetworkHandler.instance().sendToServer(new ConfigButtonPacket(Settings.INTERFACE_TERMINAL, backwards)); } diff --git a/src/unported/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java b/src/unported/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java index 02f12b130..6002539bb 100644 --- a/src/unported/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java @@ -31,15 +31,15 @@ import com.google.common.collect.HashMultimap; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.util.InputUtil; +import net.minecraft.client.util.math.MatrixStack; import org.lwjgl.glfw.GLFW; -import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.api.AEApi; import appeng.api.storage.channels.IItemStorageChannel; @@ -73,8 +73,8 @@ public class InterfaceTerminalScreen extends AEBaseScreen slot instanceof SlotDisconnected); + this.handler.slots.removeIf(slot -> slot instanceof SlotDisconnected); int offset = 17; for (int x = 0; x < LINES_ON_PAGE && ex + x < this.lines.size(); x++) { @@ -108,7 +108,7 @@ public class InterfaceTerminalScreen extends AEBaseScreen 2 && this.font.getStringWidth(name) > 155) { + while (name.length() > 2 && this.textRenderer.getWidth(name) > 155) { name = name.substring(0, name.length() - 1); } - this.font.drawString(name, 10, 6 + offset, 4210752); + this.textRenderer.draw(matrices, name, 10, 6 + offset, 4210752); } offset += 18; } @@ -141,9 +141,9 @@ public class InterfaceTerminalScreen extends AEBaseScreen private NumberBox level; - private Button plus1; - private Button plus10; - private Button plus100; - private Button plus1000; - private Button minus1; - private Button minus10; - private Button minus100; - private Button minus1000; + private ButtonWidget plus1; + private ButtonWidget plus10; + private ButtonWidget plus100; + private ButtonWidget plus1000; + private ButtonWidget minus1; + private ButtonWidget minus10; + private ButtonWidget minus100; + private ButtonWidget minus1000; private SettingToggleButton levelMode; private SettingToggleButton craftingMode; @@ -62,25 +62,25 @@ public class LevelEmitterScreen extends UpgradeableScreen public void init() { super.init(); - this.level = new NumberBox(this.font, this.guiLeft + 24, this.guiTop + 43, 79, this.font.FONT_HEIGHT, + this.level = new NumberBox(this.textRenderer, this.x + 24, this.y + 43, 79, this.textRenderer.FONT_HEIGHT, Long.class); - this.level.setEnableBackgroundDrawing(false); - this.level.setMaxStringLength(16); - this.level.setTextColor(0xFFFFFF); + this.level.setHasBorder(false); + this.level.setMaxLength(16); + this.level.setEditableColor(0xFFFFFF); this.level.setVisible(true); - this.level.setFocused2(true); + this.level.setFocused(true); container.setTextField(this.level); } @Override protected void addButtons() { - this.levelMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 8, Settings.LEVEL_TYPE, + this.levelMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 8, Settings.LEVEL_TYPE, LevelType.ITEM_LEVEL); - this.redstoneMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 28, + this.redstoneMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 28, Settings.REDSTONE_EMITTER, RedstoneMode.LOW_SIGNAL); - this.fuzzyMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 48, Settings.FUZZY_MODE, + this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 48, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL); - this.craftingMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 48, + this.craftingMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 48, Settings.CRAFT_VIA_REDSTONE, YesNo.NO); final int a = AEConfig.instance().levelByStackAmounts(0); @@ -88,22 +88,22 @@ public class LevelEmitterScreen extends UpgradeableScreen final int c = AEConfig.instance().levelByStackAmounts(2); final int d = AEConfig.instance().levelByStackAmounts(3); - this.addButton(this.plus1 = new Button(this.guiLeft + 20, this.guiTop + 17, 22, 20, "+" + a, btn -> addQty(a))); + this.addButton(this.plus1 = new ButtonWidget(this.x + 20, this.y + 17, 22, 20, "+" + a, btn -> addQty(a))); this.addButton( - this.plus10 = new Button(this.guiLeft + 48, this.guiTop + 17, 28, 20, "+" + b, btn -> addQty(b))); + this.plus10 = new ButtonWidget(this.x + 48, this.y + 17, 28, 20, "+" + b, btn -> addQty(b))); this.addButton( - this.plus100 = new Button(this.guiLeft + 82, this.guiTop + 17, 32, 20, "+" + c, btn -> addQty(c))); + this.plus100 = new ButtonWidget(this.x + 82, this.y + 17, 32, 20, "+" + c, btn -> addQty(c))); this.addButton( - this.plus1000 = new Button(this.guiLeft + 120, this.guiTop + 17, 38, 20, "+" + d, btn -> addQty(d))); + this.plus1000 = new ButtonWidget(this.x + 120, this.y + 17, 38, 20, "+" + d, btn -> addQty(d))); this.addButton( - this.minus1 = new Button(this.guiLeft + 20, this.guiTop + 59, 22, 20, "-" + a, btn -> addQty(-a))); + this.minus1 = new ButtonWidget(this.x + 20, this.y + 59, 22, 20, "-" + a, btn -> addQty(-a))); this.addButton( - this.minus10 = new Button(this.guiLeft + 48, this.guiTop + 59, 28, 20, "-" + b, btn -> addQty(-b))); + this.minus10 = new ButtonWidget(this.x + 48, this.y + 59, 28, 20, "-" + b, btn -> addQty(-b))); this.addButton( - this.minus100 = new Button(this.guiLeft + 82, this.guiTop + 59, 32, 20, "-" + c, btn -> addQty(-c))); + this.minus100 = new ButtonWidget(this.x + 82, this.y + 59, 32, 20, "-" + c, btn -> addQty(-c))); this.addButton( - this.minus1000 = new Button(this.guiLeft + 120, this.guiTop + 59, 38, 20, "-" + d, btn -> addQty(-d))); + this.minus1000 = new ButtonWidget(this.x + 120, this.y + 59, 38, 20, "-" + d, btn -> addQty(-d))); this.addButton(this.levelMode); this.addButton(this.redstoneMode); @@ -111,7 +111,7 @@ public class LevelEmitterScreen extends UpgradeableScreen } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { final boolean notCraftingMode = this.bc.getInstalledUpgrades(Upgrades.CRAFTING) == 0; // configure enabled status... @@ -127,7 +127,7 @@ public class LevelEmitterScreen extends UpgradeableScreen this.levelMode.active = notCraftingMode; this.redstoneMode.active = notCraftingMode; - super.drawFG(offsetX, offsetY, mouseX, mouseY); + super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY); if (this.craftingMode != null) { this.craftingMode.set(this.cvb.getCraftingMode()); @@ -139,8 +139,8 @@ public class LevelEmitterScreen extends UpgradeableScreen } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { - super.drawBG(offsetX, offsetY, mouseX, mouseY, partialTicks); + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + super.drawBG(matrices, offsetX, offsetY, mouseX, mouseY, partialTicks); this.level.render(mouseX, mouseY, partialTicks); } @@ -201,7 +201,7 @@ public class LevelEmitterScreen extends UpgradeableScreen @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - if (!this.checkHotbarKeys(InputMappings.getInputByCode(keyCode, scanCode))) { + if (!this.checkHotbarKeys(keyCode, scanCode)) { if (keyCode == 211 || keyCode == 205 || keyCode == 203 || keyCode == 14) { String Out = this.level.getText(); diff --git a/src/unported/java/appeng/client/gui/implementations/MEMonitorableScreen.java b/src/unported/java/appeng/client/gui/implementations/MEMonitorableScreen.java index 957583077..ad7393488 100644 --- a/src/unported/java/appeng/client/gui/implementations/MEMonitorableScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/MEMonitorableScreen.java @@ -21,11 +21,11 @@ package appeng.client.gui.implementations; import java.util.List; import net.minecraft.client.util.InputUtil; +import net.minecraft.client.util.math.MatrixStack; import org.lwjgl.glfw.GLFW; -import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.slot.Slot; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -96,18 +96,18 @@ public class MEMonitorableScreen extends AEBas this.repo = new ItemRepo(scrollbar, this); setScrollBar(); - this.xSize = 185; - this.ySize = 204; + this.backgroundWidth = 185; + this.backgroundHeight = 204; Object te = container.getTarget(); if (te instanceof IViewCellStorage) { - this.xSize += 33; + this.backgroundWidth += 33; } - this.standardSize = this.xSize; + this.standardSize = this.backgroundWidth; - this.configSrc = ((IConfigurableObject) this.container).getConfigManager(); - this.container.setGui(this); + this.configSrc = ((IConfigurableObject) this.handler).getConfigManager(); + this.handler.setGui(this); this.viewCell = te instanceof IViewCellStorage; @@ -147,7 +147,7 @@ public class MEMonitorableScreen extends AEBas @Override public void init() { - getMinecraft().keyboardListener.enableRepeatEvents(true); + getClient().keyboardListener.enableRepeatEvents(true); this.maxRows = this.getMaxRows(); TerminalStyle terminalStyle = AEConfig.instance().getTerminalStyle(); @@ -157,7 +157,7 @@ public class MEMonitorableScreen extends AEBas } else { this.perRow = 9 + ((this.width - this.standardSize) / 18); } - this.xSize = this.standardSize + ((this.perRow - 9) * 18); + this.backgroundWidth = this.standardSize + ((this.perRow - 9) * 18); final int magicNumber = 114 + 1; final int extraSpace = this.height - magicNumber - this.reservedSpace; @@ -172,7 +172,7 @@ public class MEMonitorableScreen extends AEBas } // Size the container according to the number of rows we decided to have - this.ySize = magicNumber + this.rows * 18 + this.reservedSpace; + this.backgroundHeight = magicNumber + this.rows * 18 + this.reservedSpace; this.getMeSlots().clear(); for (int y = 0; y < this.rows; y++) { @@ -187,45 +187,45 @@ public class MEMonitorableScreen extends AEBas // extra slots : 72 // slot 18 - int offset = this.guiTop + 8; + int offset = this.y + 8; if (this.customSortOrder) { - this.sortByToggle = this.addButton(new SettingToggleButton<>(this.guiLeft - 18, offset, Settings.SORT_BY, + this.sortByToggle = this.addButton(new SettingToggleButton<>(this.x - 18, offset, Settings.SORT_BY, getSortBy(), Platform::isSortOrderAvailable, this::toggleServerSetting)); offset += 20; } if (this.viewCell || this instanceof WirelessTermScreen) { - this.viewModeToggle = this.addButton(new SettingToggleButton<>(this.guiLeft - 18, offset, + this.viewModeToggle = this.addButton(new SettingToggleButton<>(this.x - 18, offset, Settings.VIEW_MODE, getSortDisplay(), this::toggleServerSetting)); offset += 20; } - this.addButton(this.sortDirToggle = new SettingToggleButton<>(this.guiLeft - 18, offset, + this.addButton(this.sortDirToggle = new SettingToggleButton<>(this.x - 18, offset, Settings.SORT_DIRECTION, getSortDir(), this::toggleServerSetting)); offset += 20; SearchBoxMode searchMode = AEConfig.instance().getTerminalSearchMode(); - this.addButton(new SettingToggleButton<>(this.guiLeft - 18, offset, Settings.SEARCH_MODE, searchMode, + this.addButton(new SettingToggleButton<>(this.x - 18, offset, Settings.SEARCH_MODE, searchMode, Platform::isSearchModeAvailable, this::toggleTerminalSearchMode)); offset += 20; if (!(this instanceof MEPortableCellScreen) || this instanceof WirelessTermScreen) { - this.addButton(new SettingToggleButton<>(this.guiLeft - 18, offset, Settings.TERMINAL_STYLE, terminalStyle, + this.addButton(new SettingToggleButton<>(this.x - 18, offset, Settings.TERMINAL_STYLE, terminalStyle, this::toggleTerminalStyle)); } - this.searchField = new AETextField(this.font, this.guiLeft + Math.max(80, this.offsetX), this.guiTop + 4, 90, + this.searchField = new AETextField(this.textRenderer, this.x + Math.max(80, this.offsetX), this.y + 4, 90, 12); - this.searchField.setEnableBackgroundDrawing(false); - this.searchField.setMaxStringLength(25); - this.searchField.setTextColor(0xFFFFFF); + this.searchField.setHasBorder(false); + this.searchField.setMaxLength(25); + this.searchField.setEditableColor(0xFFFFFF); this.searchField.setSelectionColor(0xFF008000); this.searchField.setVisible(true); if (this.viewCell || this instanceof WirelessTermScreen) { - this.craftingStatusBtn = this.addButton(new TabButton(this.guiLeft + 170, this.guiTop - 4, 2 + 11 * 16, + this.craftingStatusBtn = this.addButton(new TabButton(this.x + 170, this.y - 4, 2 + 11 * 16, GuiText.CraftingStatus.getLocal(), this.itemRenderer, btn -> showCraftingStatus())); this.craftingStatusBtn.setHideEdge(13); } @@ -238,7 +238,7 @@ public class MEMonitorableScreen extends AEBas final boolean isJEIEnabled = SearchBoxMode.JEI_AUTOSEARCH == searchMode || SearchBoxMode.JEI_MANUAL_SEARCH == searchMode; - this.searchField.setFocused2(this.isAutoFocus); + this.searchField.setFocused(this.isAutoFocus); if (isJEIEnabled) { memoryText = JEIFacade.instance().getSearchText(); @@ -255,17 +255,17 @@ public class MEMonitorableScreen extends AEBas craftingGridOffsetX = Integer.MAX_VALUE; craftingGridOffsetY = Integer.MAX_VALUE; - for (final Slot s : this.container.inventorySlots) { + for (final Slot s : this.handler.slots) { if (s instanceof AppEngSlot) { - if (s.xPos < 197) { + if (s.x < 197) { this.repositionSlot((AppEngSlot) s); } } if (s instanceof CraftingMatrixSlot || s instanceof FakeCraftingMatrixSlot) { - if (s.xPos > 0 && s.yPos > 0) { - craftingGridOffsetX = Math.min(craftingGridOffsetX, s.xPos); - craftingGridOffsetY = Math.min(craftingGridOffsetY, s.yPos); + if (s.x > 0 && s.y > 0) { + craftingGridOffsetX = Math.min(craftingGridOffsetX, s.x); + craftingGridOffsetY = Math.min(craftingGridOffsetY, s.y); } } } @@ -276,9 +276,9 @@ public class MEMonitorableScreen extends AEBas } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(this.myName.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(this.myName.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.currentMouseX = mouseX; this.currentMouseY = mouseY; @@ -302,35 +302,35 @@ public class MEMonitorableScreen extends AEBas @Override public void removed() { super.removed(); - getMinecraft().keyboardListener.enableRepeatEvents(false); + getClient().keyboardListener.enableRepeatEvents(false); memoryText = this.searchField.getText(); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture(this.getBackground()); final int x_width = 197; - blit(offsetX, offsetY, 0, 0, x_width, 18); + drawTexture(matrices, offsetX, offsetY, 0, 0, x_width, 18); if (this.viewCell || (this instanceof SecurityStationScreen)) { - blit(offsetX + x_width, offsetY, x_width, 0, 46, 128); + drawTexture(matrices, offsetX + x_width, offsetY, x_width, 0, 46, 128); } for (int x = 0; x < this.rows; x++) { - blit(offsetX, offsetY + 18 + x * 18, 0, 18, x_width, 18); + drawTexture(matrices, offsetX, offsetY + 18 + x * 18, 0, 18, x_width, 18); } - blit(offsetX, offsetY + 16 + this.rows * 18 + this.lowerTextureOffset, 0, 106 - 18 - 18, x_width, + drawTexture(matrices, offsetX, offsetY + 16 + this.rows * 18 + this.lowerTextureOffset, 0, 106 - 18 - 18, x_width, 99 + this.reservedSpace - this.lowerTextureOffset); if (this.viewCell) { boolean update = false; for (int i = 0; i < 5; i++) { - if (this.myCurrentViewCells[i] != this.container.getCellViewSlot(i).getStack()) { + if (this.myCurrentViewCells[i] != this.handler.getCellViewSlot(i).getStack()) { update = true; - this.myCurrentViewCells[i] = this.container.getCellViewSlot(i).getStack(); + this.myCurrentViewCells[i] = this.handler.getCellViewSlot(i).getStack(); } } @@ -340,7 +340,7 @@ public class MEMonitorableScreen extends AEBas } if (this.searchField != null) { - this.searchField.render(mouseX, mouseY, partialTicks); + this.searchField.render(matrices, mouseX, mouseY, partialTicks); } } @@ -358,7 +358,7 @@ public class MEMonitorableScreen extends AEBas } protected void repositionSlot(final AppEngSlot s) { - s.yPos = s.getY() + this.ySize - 78 - 5; + s.y = s.getY() + this.backgroundHeight - 78 - 5; } @Override @@ -368,7 +368,7 @@ public class MEMonitorableScreen extends AEBas } if (this.isAutoFocus && !this.searchField.isFocused() && isHovered()) { - this.searchField.setFocused2(true); + this.searchField.setFocused(true); } if (this.searchField.isFocused() && this.searchField.charTyped(character, p_charTyped_2_)) { @@ -384,20 +384,18 @@ public class MEMonitorableScreen extends AEBas @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - InputUtil.Key input = InputMappings.getInputByCode(keyCode, scanCode); - - if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(input)) { - if (AppEng.instance().isActionKey(ActionKey.TOGGLE_FOCUS, input)) { - this.searchField.setFocused2(!this.searchField.isFocused()); + if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(keyCode, scanCode)) { + if (AppEng.instance().isActionKey(ActionKey.TOGGLE_FOCUS, keyCode, scanCode)) { + this.searchField.setFocused(!this.searchField.isFocused()); return true; } if (!this.searchField.isFocused() && this.isAutoFocus && isHovered()) { - this.searchField.setFocused2(true); + this.searchField.setFocused(true); } if (this.searchField.isFocused()) { if (keyCode == GLFW.GLFW_KEY_ENTER) { - this.searchField.setFocused2(false); + this.searchField.setFocused(false); return true; } @@ -418,12 +416,12 @@ public class MEMonitorableScreen extends AEBas } private boolean isHovered() { - return isPointInRegion(0, 0, this.xSize, this.ySize, currentMouseX, currentMouseY); + return isPointWithinBounds(0, 0, this.backgroundWidth, this.backgroundHeight, currentMouseX, currentMouseY); } @Override public void tick() { - this.repo.setPower(this.container.isPowered()); + this.repo.setPower(this.handler.isPowered()); super.tick(); } diff --git a/src/unported/java/appeng/client/gui/implementations/MolecularAssemblerScreen.java b/src/unported/java/appeng/client/gui/implementations/MolecularAssemblerScreen.java index 2f909482e..437ed1762 100644 --- a/src/unported/java/appeng/client/gui/implementations/MolecularAssemblerScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/MolecularAssemblerScreen.java @@ -18,6 +18,7 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; @@ -36,36 +37,36 @@ public class MolecularAssemblerScreen extends UpgradeableScreen(this.guiLeft - 18, this.guiTop + 8, + this.redstoneMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 8, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE); addButton(this.redstoneMode); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.pb.setFullMsg(this.container.getCurrentProgress() + "%"); - super.drawFG(offsetX, offsetY, mouseX, mouseY); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.pb.setFullMsg(this.handler.getCurrentProgress() + "%"); + super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { - this.pb.x = 148 + this.guiLeft; - this.pb.y = 48 + this.guiTop; - super.drawBG(offsetX, offsetY, mouseX, mouseY, partialTicks); + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + this.pb.x = 148 + this.x; + this.pb.y = 48 + this.y; + super.drawBG(matrices, offsetX, offsetY, mouseX, mouseY, partialTicks); } @Override diff --git a/src/unported/java/appeng/client/gui/implementations/NetworkStatusScreen.java b/src/unported/java/appeng/client/gui/implementations/NetworkStatusScreen.java index bc55967e4..7bf8bf931 100644 --- a/src/unported/java/appeng/client/gui/implementations/NetworkStatusScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/NetworkStatusScreen.java @@ -22,11 +22,12 @@ import java.util.List; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.slot.Slot; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.api.config.SortDir; import appeng.api.config.SortOrder; @@ -55,8 +56,8 @@ public class NetworkStatusScreen extends AEBaseScreen im this.setScrollBar(scrollbar); this.repo = new ItemRepo(scrollbar, this); - this.ySize = 153; - this.xSize = 195; + this.backgroundHeight = 153; + this.backgroundWidth = 195; this.repo.setRowSize(5); } @@ -64,14 +65,14 @@ public class NetworkStatusScreen extends AEBaseScreen im public void init() { super.init(); - this.addButton(CommonButtons.togglePowerUnit(this.guiLeft - 18, this.guiTop + 8)); + this.addButton(CommonButtons.togglePowerUnit(this.x - 18, this.y + 8)); } @Override - public void render(final int mouseX, final int mouseY, final float btn) { + public void render(MatrixStack matrices, final int mouseX, final int mouseY, final float btn) { - final int gx = (this.width - this.xSize) / 2; - final int gy = (this.height - this.ySize) / 2; + final int gx = (this.width - this.backgroundWidth) / 2; + final int gy = (this.height - this.backgroundHeight) / 2; this.tooltip = -1; @@ -96,23 +97,23 @@ public class NetworkStatusScreen extends AEBaseScreen im } } - super.render(mouseX, mouseY, btn); + super.render(matrices, mouseX, mouseY, btn); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(GuiText.NetworkDetails.getLocal(), 8, 6, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, GuiText.NetworkDetails.getLocal(), 8, 6, 4210752); - this.font.drawString( + this.textRenderer.draw(matrices, GuiText.StoredPower.getLocal() + ": " + Platform.formatPowerLong(container.getCurrentPower(), false), 13, 16, 4210752); - this.font.drawString( + this.textRenderer.draw(matrices, GuiText.MaxPower.getLocal() + ": " + Platform.formatPowerLong(container.getMaxPower(), false), 13, 26, 4210752); - this.font.drawString(GuiText.PowerInputRate.getLocal() + ": " + this.textRenderer.draw(matrices, GuiText.PowerInputRate.getLocal() + ": " + Platform.formatPowerLong(container.getAverageAddition(), true), 13, 143 - 10, 4210752); - this.font.drawString( + this.textRenderer.draw(matrices, GuiText.PowerUsageRate.getLocal() + ": " + Platform.formatPowerLong(container.getPowerUsage(), true), 13, 143 - 20, 4210752); @@ -140,8 +141,8 @@ public class NetworkStatusScreen extends AEBaseScreen im str = Long.toString(refStack.getStackSize() / 1000) + 'k'; } - final int w = this.font.getStringWidth(str); - this.font.drawString(str, (int) ((x * sectionLength + xo + sectionLength - 19 - (w * 0.5)) * 2), + final int w = this.textRenderer.getWidth(str); + this.textRenderer.draw(matrices, str, (int) ((x * sectionLength + xo + sectionLength - 19 - (w * 0.5)) * 2), (y * 18 + yo + 6) * 2, 4210752); RenderSystem.popMatrix(); @@ -173,14 +174,14 @@ public class NetworkStatusScreen extends AEBaseScreen im } if (this.tooltip >= 0 && toolTip.length() > 0) { - this.drawTooltip(toolPosX, toolPosY + 10, toolTip); + this.drawTooltip(, toolPosX, toolPosY + 10, toolTip); } } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/networkstatus.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } public void postUpdate(final List list) { @@ -224,7 +225,7 @@ public class NetworkStatusScreen extends AEBaseScreen im currentToolTip.add(GuiText.EnergyDrain.getLocal() + ": " + Platform.formatPowerLong(myStack.getCountRequestable(), true)); - this.drawTooltip(x, y, currentToolTip); + this.drawTooltip(, x, y, currentToolTip); } } diff --git a/src/unported/java/appeng/client/gui/implementations/NetworkToolScreen.java b/src/unported/java/appeng/client/gui/implementations/NetworkToolScreen.java index 14d7603a6..e7853a038 100644 --- a/src/unported/java/appeng/client/gui/implementations/NetworkToolScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/NetworkToolScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.client.gui.widgets.ToggleButton; @@ -35,14 +36,14 @@ public class NetworkToolScreen extends AEBaseScreen { public NetworkToolScreen(NetworkToolContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 166; + this.backgroundHeight = 166; } @Override public void init() { super.init(); - this.tFacades = new ToggleButton(this.guiLeft - 18, this.guiTop + 8, 23, 22, + this.tFacades = new ToggleButton(this.x - 18, this.y + 8, 23, 22, GuiText.TransparentFacades.getLocal(), GuiText.TransparentFacadesHint.getLocal(), btn -> toggleFacades()); @@ -54,18 +55,18 @@ public class NetworkToolScreen extends AEBaseScreen { } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { if (this.tFacades != null) { this.tFacades.setState(container.isFacadeMode()); } - this.font.drawString(this.getGuiDisplayName(GuiText.NetworkTool.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.NetworkTool.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/toolbox.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } } diff --git a/src/unported/java/appeng/client/gui/implementations/PatternTermScreen.java b/src/unported/java/appeng/client/gui/implementations/PatternTermScreen.java index 5cabe9d4f..0847ad1c1 100644 --- a/src/unported/java/appeng/client/gui/implementations/PatternTermScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/PatternTermScreen.java @@ -19,6 +19,7 @@ package appeng.client.gui.implementations; import net.minecraft.block.Blocks; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -57,32 +58,32 @@ public class PatternTermScreen extends MEMonitorableScreen public void init() { super.init(); - this.tabCraftButton = new TabButton(this.guiLeft + 173, this.guiTop + this.ySize - 177, + this.tabCraftButton = new TabButton(this.x + 173, this.y + this.backgroundHeight - 177, new ItemStack(Blocks.CRAFTING_TABLE), GuiText.CraftingPattern.getLocal(), this.itemRenderer, btn -> toggleCraftMode(CRAFTMODE_PROCESSING)); this.addButton(this.tabCraftButton); - this.tabProcessButton = new TabButton(this.guiLeft + 173, this.guiTop + this.ySize - 177, + this.tabProcessButton = new TabButton(this.x + 173, this.y + this.backgroundHeight - 177, new ItemStack(Blocks.FURNACE), GuiText.ProcessingPattern.getLocal(), this.itemRenderer, btn -> toggleCraftMode(CRAFTMODE_CRFTING)); this.addButton(this.tabProcessButton); - this.substitutionsEnabledBtn = new ActionButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, + this.substitutionsEnabledBtn = new ActionButton(this.x + 84, this.y + this.backgroundHeight - 163, ActionItems.ENABLE_SUBSTITUTION, act -> toggleSubstitutions(SUBSITUTION_DISABLE)); this.substitutionsEnabledBtn.setHalfSize(true); this.addButton(this.substitutionsEnabledBtn); - this.substitutionsDisabledBtn = new ActionButton(this.guiLeft + 84, this.guiTop + this.ySize - 163, + this.substitutionsDisabledBtn = new ActionButton(this.x + 84, this.y + this.backgroundHeight - 163, ActionItems.DISABLE_SUBSTITUTION, act -> toggleSubstitutions(SUBSITUTION_ENABLE)); this.substitutionsDisabledBtn.setHalfSize(true); this.addButton(this.substitutionsDisabledBtn); - ActionButton clearBtn = new ActionButton(this.guiLeft + 74, this.guiTop + this.ySize - 163, ActionItems.CLOSE, + ActionButton clearBtn = new ActionButton(this.x + 74, this.y + this.backgroundHeight - 163, ActionItems.CLOSE, act -> clear()); clearBtn.setHalfSize(true); this.addButton(clearBtn); - ActionButton encodeBtn = new ActionButton(this.guiLeft + 147, this.guiTop + this.ySize - 142, + ActionButton encodeBtn = new ActionButton(this.x + 147, this.y + this.backgroundHeight - 142, ActionItems.ENCODE, act -> encode()); this.addButton(encodeBtn); } @@ -104,12 +105,12 @@ public class PatternTermScreen extends MEMonitorableScreen } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - if (this.container.isCraftingMode()) { + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + if (this.handler.isCraftingMode()) { this.tabCraftButton.visible = true; this.tabProcessButton.visible = false; - if (this.container.substitute) { + if (this.handler.substitute) { this.substitutionsEnabledBtn.visible = true; this.substitutionsDisabledBtn.visible = false; } else { @@ -123,14 +124,14 @@ public class PatternTermScreen extends MEMonitorableScreen this.substitutionsDisabledBtn.visible = false; } - super.drawFG(offsetX, offsetY, mouseX, mouseY); - this.font.drawString(GuiText.PatternTerminal.getLocal(), 8, this.ySize - 96 + 2 - this.getReservedSpace(), + super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY); + this.textRenderer.draw(matrices, GuiText.PatternTerminal.getLocal(), 8, this.backgroundHeight - 96 + 2 - this.getReservedSpace(), 4210752); } @Override protected String getBackground() { - if (this.container.isCraftingMode()) { + if (this.handler.isCraftingMode()) { return BACKGROUND_CRAFTING_MODE; } @@ -141,7 +142,7 @@ public class PatternTermScreen extends MEMonitorableScreen protected void repositionSlot(final AppEngSlot s) { final int offsetPlayerSide = s.isPlayerSide() ? 5 : 3; - s.yPos = s.getY() + this.ySize - 78 - offsetPlayerSide; + s.y = s.getY() + this.backgroundHeight - 78 - offsetPlayerSide; } } diff --git a/src/unported/java/appeng/client/gui/implementations/PriorityScreen.java b/src/unported/java/appeng/client/gui/implementations/PriorityScreen.java index 45c98e3f4..2125cf66f 100644 --- a/src/unported/java/appeng/client/gui/implementations/PriorityScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/PriorityScreen.java @@ -18,8 +18,8 @@ package appeng.client.gui.implementations; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.client.util.InputMappings; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; @@ -51,37 +51,37 @@ public class PriorityScreen extends AEBaseScreen { final int c = AEConfig.instance().priorityByStacksAmounts(2); final int d = AEConfig.instance().priorityByStacksAmounts(3); - this.addButton(new Button(this.guiLeft + 20, this.guiTop + 32, 22, 20, "+" + a, btn -> addQty(a))); - this.addButton(new Button(this.guiLeft + 48, this.guiTop + 32, 28, 20, "+" + b, btn -> addQty(b))); - this.addButton(new Button(this.guiLeft + 82, this.guiTop + 32, 32, 20, "+" + c, btn -> addQty(c))); - this.addButton(new Button(this.guiLeft + 120, this.guiTop + 32, 38, 20, "+" + d, btn -> addQty(d))); + this.addButton(new ButtonWidget(this.x + 20, this.y + 32, 22, 20, "+" + a, btn -> addQty(a))); + this.addButton(new ButtonWidget(this.x + 48, this.y + 32, 28, 20, "+" + b, btn -> addQty(b))); + this.addButton(new ButtonWidget(this.x + 82, this.y + 32, 32, 20, "+" + c, btn -> addQty(c))); + this.addButton(new ButtonWidget(this.x + 120, this.y + 32, 38, 20, "+" + d, btn -> addQty(d))); - this.addButton(new Button(this.guiLeft + 20, this.guiTop + 69, 22, 20, "-" + a, btn -> addQty(-a))); - this.addButton(new Button(this.guiLeft + 48, this.guiTop + 69, 28, 20, "-" + b, btn -> addQty(-b))); - this.addButton(new Button(this.guiLeft + 82, this.guiTop + 69, 32, 20, "-" + c, btn -> addQty(-c))); - this.addButton(new Button(this.guiLeft + 120, this.guiTop + 69, 38, 20, "-" + d, btn -> addQty(-d))); + this.addButton(new ButtonWidget(this.x + 20, this.y + 69, 22, 20, "-" + a, btn -> addQty(-a))); + this.addButton(new ButtonWidget(this.x + 48, this.y + 69, 28, 20, "-" + b, btn -> addQty(-b))); + this.addButton(new ButtonWidget(this.x + 82, this.y + 69, 32, 20, "-" + c, btn -> addQty(-c))); + this.addButton(new ButtonWidget(this.x + 120, this.y + 69, 38, 20, "-" + d, btn -> addQty(-d))); this.subGui.addBackButton(this::addButton, 154, 0); - this.priority = new NumberBox(this.font, this.guiLeft + 62, this.guiTop + 57, 59, this.font.FONT_HEIGHT, + this.priority = new NumberBox(this.textRenderer, this.x + 62, this.y + 57, 59, this.textRenderer.FONT_HEIGHT, Long.class); - this.priority.setEnableBackgroundDrawing(false); - this.priority.setMaxStringLength(16); - this.priority.setTextColor(0xFFFFFF); + this.priority.setHasBorder(false); + this.priority.setMaxLength(16); + this.priority.setEditableColor(0xFFFFFF); this.priority.setVisible(true); - this.priority.setFocused2(true); + this.priority.setFocused(true); container.setTextField(this.priority); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(GuiText.Priority.getLocal(), 8, 6, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, GuiText.Priority.getLocal(), 8, 6, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture(getBackground()); - blit(offsetX, offsetY, 0, 0, this.xSize, this.ySize); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); this.priority.render(mouseX, mouseY, partialTicks); } @@ -143,7 +143,7 @@ public class PriorityScreen extends AEBaseScreen { @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - if (!this.checkHotbarKeys(InputMappings.getInputByCode(keyCode, scanCode))) { + if (!this.checkHotbarKeys(keyCode, scanCode)) { if ((keyCode == 211 || keyCode == 205 || keyCode == 203 || keyCode == 14) && this.priority.keyPressed(keyCode, scanCode, p_keyPressed_3_)) { String out = this.priority.getText(); diff --git a/src/unported/java/appeng/client/gui/implementations/QuartzKnifeScreen.java b/src/unported/java/appeng/client/gui/implementations/QuartzKnifeScreen.java index 9397c6bcc..8f7dcfe60 100644 --- a/src/unported/java/appeng/client/gui/implementations/QuartzKnifeScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/QuartzKnifeScreen.java @@ -19,13 +19,13 @@ package appeng.client.gui.implementations; import net.minecraft.client.util.InputUtil; +import net.minecraft.client.util.math.MatrixStack; import org.lwjgl.glfw.GLFW; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.ActionKey; import appeng.client.gui.AEBaseScreen; @@ -41,31 +41,31 @@ public class QuartzKnifeScreen extends AEBaseScreen { public QuartzKnifeScreen(QuartzKnifeContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 184; + this.backgroundHeight = 184; } @Override public void init() { super.init(); - this.name = new TextFieldWidget(this.font, this.guiLeft + 24, this.guiTop + 32, 79, this.font.FONT_HEIGHT, ""); - this.name.setEnableBackgroundDrawing(false); - this.name.setMaxStringLength(32); - this.name.setTextColor(0xFFFFFF); + this.name = new TextFieldWidget(this.textRenderer, this.x + 24, this.y + 32, 79, this.textRenderer.FONT_HEIGHT, ""); + this.name.setHasBorder(false); + this.name.setMaxLength(32); + this.name.setEditableColor(0xFFFFFF); this.name.setVisible(true); - this.name.setFocused2(true); + this.name.setFocused(true); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.QuartzCuttingKnife.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.QuartzCuttingKnife.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/quartzknife.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); this.name.render(mouseX, mouseY, partialTicks); } @@ -84,17 +84,15 @@ public class QuartzKnifeScreen extends AEBaseScreen { @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - InputUtil.Key input = InputMappings.getInputByCode(keyCode, scanCode); - - if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(input)) { - if (AppEng.instance().isActionKey(ActionKey.TOGGLE_FOCUS, input)) { - this.name.setFocused2(!this.name.isFocused()); + if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(keyCode, scanCode)) { + if (AppEng.instance().isActionKey(ActionKey.TOGGLE_FOCUS, keyCode, scanCode)) { + this.name.setFocused(!this.name.isFocused()); return true; } if (this.name.isFocused()) { if (keyCode == GLFW.GLFW_KEY_ENTER) { - this.name.setFocused2(false); + this.name.setFocused(false); return true; } diff --git a/src/unported/java/appeng/client/gui/implementations/SecurityStationScreen.java b/src/unported/java/appeng/client/gui/implementations/SecurityStationScreen.java index 09f5985fe..a094f0dd6 100644 --- a/src/unported/java/appeng/client/gui/implementations/SecurityStationScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/SecurityStationScreen.java @@ -18,6 +18,7 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; @@ -44,8 +45,8 @@ public class SecurityStationScreen extends MEMonitorableScreen toggleOption(SecurityPermissions.INJECT))); - this.extract = this.addButton(new ToggleButton(this.guiLeft + 56 + 18, top, 11 * 16 + 1, 12 * 16 + 1, + this.extract = this.addButton(new ToggleButton(this.x + 56 + 18, top, 11 * 16 + 1, 12 * 16 + 1, SecurityPermissions.EXTRACT.getTranslatedName(), SecurityPermissions.EXTRACT.getTranslatedTip(), btn -> toggleOption(SecurityPermissions.EXTRACT))); - this.craft = this.addButton(new ToggleButton(this.guiLeft + 56 + 18 * 2, top, 11 * 16 + 2, 12 * 16 + 2, + this.craft = this.addButton(new ToggleButton(this.x + 56 + 18 * 2, top, 11 * 16 + 2, 12 * 16 + 2, SecurityPermissions.CRAFT.getTranslatedName(), SecurityPermissions.CRAFT.getTranslatedTip(), btn -> toggleOption(SecurityPermissions.CRAFT))); - this.build = this.addButton(new ToggleButton(this.guiLeft + 56 + 18 * 3, top, 11 * 16 + 3, 12 * 16 + 3, + this.build = this.addButton(new ToggleButton(this.x + 56 + 18 * 3, top, 11 * 16 + 3, 12 * 16 + 3, SecurityPermissions.BUILD.getTranslatedName(), SecurityPermissions.BUILD.getTranslatedTip(), btn -> toggleOption(SecurityPermissions.BUILD))); - this.security = this.addButton(new ToggleButton(this.guiLeft + 56 + 18 * 4, top, 11 * 16 + 4, 12 * 16 + 4, + this.security = this.addButton(new ToggleButton(this.x + 56 + 18 * 4, top, 11 * 16 + 4, 12 * 16 + 4, SecurityPermissions.SECURITY.getTranslatedName(), SecurityPermissions.SECURITY.getTranslatedTip(), btn -> toggleOption(SecurityPermissions.SECURITY))); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - super.drawFG(offsetX, offsetY, mouseX, mouseY); - this.font.drawString(GuiText.SecurityCardEditor.getLocal(), 8, this.ySize - 96 + 1 - this.getReservedSpace(), + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY); + this.textRenderer.draw(matrices, GuiText.SecurityCardEditor.getLocal(), 8, this.backgroundHeight - 96 + 1 - this.getReservedSpace(), 4210752); } diff --git a/src/unported/java/appeng/client/gui/implementations/SpatialIOPortScreen.java b/src/unported/java/appeng/client/gui/implementations/SpatialIOPortScreen.java index 2b897f22c..cb035c0d5 100644 --- a/src/unported/java/appeng/client/gui/implementations/SpatialIOPortScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/SpatialIOPortScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.client.gui.widgets.CommonButtons; @@ -33,44 +34,44 @@ public class SpatialIOPortScreen extends AEBaseScreen { public SpatialIOPortScreen(SpatialIOPortContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 199; + this.backgroundHeight = 199; } @Override public void init() { super.init(); - this.addButton(CommonButtons.togglePowerUnit(this.guiLeft - 18, this.guiTop + 8)); + this.addButton(CommonButtons.togglePowerUnit(this.x - 18, this.y + 8)); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(GuiText.StoredPower.getLocal() + ": " - + Platform.formatPowerLong(this.container.getCurrentPower(), false), 13, 21, 4210752); - this.font.drawString( - GuiText.MaxPower.getLocal() + ": " + Platform.formatPowerLong(this.container.getMaxPower(), false), 13, + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, GuiText.StoredPower.getLocal() + ": " + + Platform.formatPowerLong(this.handler.getCurrentPower(), false), 13, 21, 4210752); + this.textRenderer.draw(matrices, + GuiText.MaxPower.getLocal() + ": " + Platform.formatPowerLong(this.handler.getMaxPower(), false), 13, 31, 4210752); - this.font.drawString(GuiText.RequiredPower.getLocal() + ": " - + Platform.formatPowerLong(this.container.getRequiredPower(), false), 13, 73, 4210752); - this.font.drawString( - GuiText.Efficiency.getLocal() + ": " + (((float) this.container.getEfficency()) / 100) + '%', 13, 83, + this.textRenderer.draw(matrices, GuiText.RequiredPower.getLocal() + ": " + + Platform.formatPowerLong(this.handler.getRequiredPower(), false), 13, 73, 4210752); + this.textRenderer.draw(matrices, + GuiText.Efficiency.getLocal() + ": " + (((float) this.handler.getEfficency()) / 100) + '%', 13, 83, 4210752); - this.font.drawString(this.getGuiDisplayName(GuiText.SpatialIOPort.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96, 4210752); + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.SpatialIOPort.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96, 4210752); - if (this.container.xSize != 0 && this.container.ySize != 0 && this.container.zSize != 0) { - final String text = GuiText.SCSSize.getLocal() + ": " + this.container.xSize + "x" + this.container.ySize - + "x" + this.container.zSize; - this.font.drawString(text, 13, 93, 4210752); + if (this.handler.xSize != 0 && this.handler.ySize != 0 && this.handler.zSize != 0) { + final String text = GuiText.SCSSize.getLocal() + ": " + this.handler.xSize + "x" + this.handler.ySize + + "x" + this.handler.zSize; + this.textRenderer.draw(matrices, text, 13, 93, 4210752); } else { - this.font.drawString(GuiText.SCSSize.getLocal() + ": " + GuiText.SCSInvalid.getLocal(), 13, 93, 4210752); + this.textRenderer.draw(matrices, GuiText.SCSSize.getLocal() + ": " + GuiText.SCSInvalid.getLocal(), 13, 93, 4210752); } } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/spatialio.png"); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } } diff --git a/src/unported/java/appeng/client/gui/implementations/StorageBusScreen.java b/src/unported/java/appeng/client/gui/implementations/StorageBusScreen.java index ad0e2276e..5ae3465a3 100644 --- a/src/unported/java/appeng/client/gui/implementations/StorageBusScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/StorageBusScreen.java @@ -18,6 +18,7 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; @@ -44,21 +45,21 @@ public class StorageBusScreen extends UpgradeableScreen { public StorageBusScreen(StorageBusContainer container, PlayerInventory playerInventory, Text title) { super(container, playerInventory, title); - this.ySize = 251; + this.backgroundHeight = 251; } @Override protected void addButtons() { - addButton(new ActionButton(this.guiLeft - 18, this.guiTop + 8, ActionItems.CLOSE, btn -> clear())); - addButton(new ActionButton(this.guiLeft - 18, this.guiTop + 28, ActionItems.WRENCH, btn -> partition())); - this.rwMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 48, Settings.ACCESS, + addButton(new ActionButton(this.x - 18, this.y + 8, ActionItems.CLOSE, btn -> clear())); + addButton(new ActionButton(this.x - 18, this.y + 28, ActionItems.WRENCH, btn -> partition())); + this.rwMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 48, Settings.ACCESS, AccessRestriction.READ_WRITE); - this.storageFilter = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 68, + this.storageFilter = new ServerSettingToggleButton<>(this.x - 18, this.y + 68, Settings.STORAGE_FILTER, StorageFilter.EXTRACTABLE_ONLY); - this.fuzzyMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 88, Settings.FUZZY_MODE, + this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 88, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL); - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), + this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriorityGui())); this.addButton(this.storageFilter); @@ -67,9 +68,9 @@ public class StorageBusScreen extends UpgradeableScreen { } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(GuiText.StorageBus.getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.StorageBus.getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); if (this.fuzzyMode != null) { this.fuzzyMode.set(this.cvb.getFuzzyMode()); diff --git a/src/unported/java/appeng/client/gui/implementations/UpgradeableScreen.java b/src/unported/java/appeng/client/gui/implementations/UpgradeableScreen.java index 4ed2ba14f..8ee2e13aa 100644 --- a/src/unported/java/appeng/client/gui/implementations/UpgradeableScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/UpgradeableScreen.java @@ -18,9 +18,10 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.api.config.FuzzyMode; import appeng.api.config.RedstoneMode; @@ -52,12 +53,12 @@ public class UpgradeableScreen extends AEBaseScr this.cvb = container; this.bc = (IUpgradeableHost) container.getTarget(); - this.xSize = this.hasToolbox() ? 246 : 211; - this.ySize = 184; + this.backgroundWidth = this.hasToolbox() ? 246 : 211; + this.backgroundHeight = 184; } protected boolean hasToolbox() { - return (this.container).hasToolbox(); + return (this.handler).hasToolbox(); } @Override @@ -67,24 +68,24 @@ public class UpgradeableScreen extends AEBaseScr } protected void addButtons() { - this.redstoneMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 8, + this.redstoneMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 8, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE); addButton(this.redstoneMode); - this.fuzzyMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 28, Settings.FUZZY_MODE, + this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 28, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL); addButton(this.fuzzyMode); - this.craftMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 48, Settings.CRAFT_ONLY, + this.craftMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 48, Settings.CRAFT_ONLY, YesNo.NO); addButton(this.craftMode); - this.schedulingMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 68, + this.schedulingMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 68, Settings.SCHEDULING_MODE, SchedulingMode.DEFAULT); addButton(this.schedulingMode); } @Override - public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(this.getGuiDisplayName(this.getName().getLocal()), 8, 6, 4210752); - this.font.drawString(GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); + public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + this.textRenderer.draw(matrices, this.getGuiDisplayName(this.getName().getLocal()), 8, 6, 4210752); + this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); if (this.redstoneMode != null) { this.redstoneMode.set(this.cvb.getRedStoneMode()); @@ -104,18 +105,16 @@ public class UpgradeableScreen extends AEBaseScr } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.handleButtonVisibility(); this.bindTexture(this.getBackground()); - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, 211 - 34, this.ySize, getBlitOffset()); + drawTexture(matrices, offsetX, offsetY, 0, 0, 211 - 34, this.backgroundHeight); if (this.drawUpgrades()) { - GuiUtils.drawTexturedModalRect(offsetX + 177, offsetY, 177, 0, 35, 14 + this.cvb.availableUpgrades() * 18, - getBlitOffset()); + drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, 14 + this.cvb.availableUpgrades() * 18); } if (this.hasToolbox()) { - GuiUtils.drawTexturedModalRect(offsetX + 178, offsetY + this.ySize - 90, 178, this.ySize - 90, 68, 68, - getBlitOffset()); + drawTexture(matrices, offsetX + 178, offsetY + this.backgroundHeight - 90, 178, this.backgroundHeight - 90, 68, 68); } } diff --git a/src/unported/java/appeng/client/gui/implementations/VibrationChamberScreen.java b/src/unported/java/appeng/client/gui/implementations/VibrationChamberScreen.java index 6ec67364f..66cae0cbe 100644 --- a/src/unported/java/appeng/client/gui/implementations/VibrationChamberScreen.java +++ b/src/unported/java/appeng/client/gui/implementations/VibrationChamberScreen.java @@ -20,9 +20,10 @@ package appeng.client.gui.implementations; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.AEBaseScreen; import appeng.client.gui.widgets.ProgressBar; @@ -38,40 +39,40 @@ public class VibrationChamberScreen extends AEBaseScreen 0) { - final int i1 = this.container.getRemainingBurnTime() * 12 / 100; + if (this.handler.getRemainingBurnTime() > 0) { + final int i1 = this.handler.getRemainingBurnTime() * 12 / 100; this.bindTexture("guis/vibchamber.png"); RenderSystem.color3f(1, 1, 1); final int l = -15; final int k = 25; - GuiUtils.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 2, getBlitOffset()); + drawTexture(matrices, k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 2); } } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { this.bindTexture("guis/vibchamber.png"); - this.pb.x = 99 + this.guiLeft; - this.pb.y = 36 + this.guiTop; - GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); + this.pb.x = 99 + this.x; + this.pb.y = 36 + this.y; + drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); } } diff --git a/src/unported/java/appeng/client/render/SpatialSkyRender.java b/src/unported/java/appeng/client/render/SpatialSkyRender.java index cfcdc5cc5..ea479cf0a 100644 --- a/src/unported/java/appeng/client/render/SpatialSkyRender.java +++ b/src/unported/java/appeng/client/render/SpatialSkyRender.java @@ -27,10 +27,10 @@ import com.mojang.blaze3d.systems.RenderSystem; import org.lwjgl.opengl.GL11; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.render.BufferBuilder; import net.minecraft.util.math.Quaternion; import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.render.Tessellator; import net.minecraft.client.world.ClientWorld; import net.minecraftforge.client.IRenderHandler; import net.minecraftforge.client.SkyRenderHandler; @@ -86,10 +86,10 @@ public class SpatialSkyRender implements SkyRenderHandler { RenderSystem.disableTexture(); VertexBuffer.begin(GL11.GL_QUADS, VertexFormats.POSITION); - VertexBuffer.pos(-100.0D, -100.0D, -100.0D).endVertex(); - VertexBuffer.pos(-100.0D, -100.0D, 100.0D).endVertex(); - VertexBuffer.pos(100.0D, -100.0D, 100.0D).endVertex(); - VertexBuffer.pos(100.0D, -100.0D, -100.0D).endVertex(); + VertexBuffer.pos(-100.0D, -100.0D, -100.0D).next(); + VertexBuffer.pos(-100.0D, -100.0D, 100.0D).next(); + VertexBuffer.pos(100.0D, -100.0D, 100.0D).next(); + VertexBuffer.pos(100.0D, -100.0D, -100.0D).next(); tessellator.draw(); RenderSystem.enableTexture(); matrixStack.pop(); @@ -160,7 +160,7 @@ public class SpatialSkyRender implements SkyRenderHandler { final double d23 = d17 * d12 - d20 * d13; final double d24 = d23 * d9 - d21 * d10; final double d25 = d21 * d9 + d23 * d10; - vb.pos(x + d24, y + d22, z + d25).endVertex(); + vb.pos(x + d24, y + d22, z + d25).next(); } } } diff --git a/src/unported/java/appeng/client/render/cablebus/FacadeBlockAccess.java b/src/unported/java/appeng/client/render/cablebus/FacadeBlockAccess.java index 29d37c970..5e9bf233d 100644 --- a/src/unported/java/appeng/client/render/cablebus/FacadeBlockAccess.java +++ b/src/unported/java/appeng/client/render/cablebus/FacadeBlockAccess.java @@ -22,7 +22,7 @@ import javax.annotation.Nullable; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.fluid.IFluidState; +import net.minecraft.fluid.FluidState; import net.minecraft.util.math.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.BlockRenderView; @@ -64,7 +64,7 @@ public class FacadeBlockAccess implements BlockRenderView { } @Override - public IFluidState getFluidState(BlockPos pos) { + public FluidState getFluidState(BlockPos pos) { return world.getFluidState(pos); } diff --git a/src/unported/java/appeng/client/render/cablebus/P2PTunnelFrequencyModelData.java b/src/unported/java/appeng/client/render/cablebus/P2PTunnelFrequencyModelData.java deleted file mode 100644 index e8eaf95cc..000000000 --- a/src/unported/java/appeng/client/render/cablebus/P2PTunnelFrequencyModelData.java +++ /dev/null @@ -1,21 +0,0 @@ -package appeng.client.render.cablebus; - -import net.minecraftforge.client.model.data.ModelProperty; - -import appeng.client.render.model.AEInternalModelData; - -public final class P2PTunnelFrequencyModelData extends AEInternalModelData { - - public static final ModelProperty FREQUENCY = new ModelProperty<>(); - - private final long frequency; - - public P2PTunnelFrequencyModelData(long frequency) { - this.frequency = frequency; - } - - public long getFrequency() { - return frequency; - } - -} diff --git a/src/unported/java/appeng/client/render/model/AEInternalModelData.java b/src/unported/java/appeng/client/render/model/AEInternalModelData.java deleted file mode 100644 index c48b18986..000000000 --- a/src/unported/java/appeng/client/render/model/AEInternalModelData.java +++ /dev/null @@ -1,27 +0,0 @@ -package appeng.client.render.model; - -import javax.annotation.Nullable; - - -import net.minecraftforge.client.model.data.ModelProperty; - -public abstract class AEInternalModelData implements IModelData { - - @Override - public final boolean hasProperty(ModelProperty prop) { - throw new IllegalStateException("This model data must be used by internal models only."); - } - - @Nullable - @Override - public final T getData(ModelProperty prop) { - throw new IllegalStateException("This model data must be used by internal models only."); - } - - @Nullable - @Override - public final T setData(ModelProperty prop, T data) { - throw new IllegalStateException("This model data must be used by internal models only."); - } - -} diff --git a/src/unported/java/appeng/container/slot/NullSlot.java b/src/unported/java/appeng/container/slot/NullSlot.java deleted file mode 100644 index 40a492af8..000000000 --- a/src/unported/java/appeng/container/slot/NullSlot.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.container.slot; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.Slot; -import net.minecraft.item.ItemStack; - -// FIXME seems unused -public class NullSlot extends Slot { - - public NullSlot() { - super(null, 0, 0, 0); - } - - @Override - public void onSlotChange(final ItemStack par1ItemStack, final ItemStack par2ItemStack) { - - } - - @Override - public ItemStack onTake(final PlayerEntity par1PlayerEntity, final ItemStack par2ItemStack) { - return par2ItemStack; - } - - @Override - public boolean isItemValid(final ItemStack par1ItemStack) { - return false; - } - - @Override - @Nonnull - public ItemStack getStack() { - return ItemStack.EMPTY; - } - - @Override - public void putStack(final ItemStack par1ItemStack) { - - } - - @Override - public void onSlotChanged() { - - } - - @Override - public int getSlotStackLimit() { - return 0; - } - - @Override - public ItemStack decrStackSize(final int par1) { - return ItemStack.EMPTY; - } - - @Override - public boolean canTakeStack(final PlayerEntity par1PlayerEntity) { - return false; - } - - @Override - public int getSlotIndex() { - return 0; - } -} diff --git a/src/unported/java/appeng/core/CommonHelper.java b/src/unported/java/appeng/core/CommonHelper.java index ee962be25..700612b5e 100644 --- a/src/unported/java/appeng/core/CommonHelper.java +++ b/src/unported/java/appeng/core/CommonHelper.java @@ -23,7 +23,6 @@ import java.util.Random; import javax.annotation.Nonnull; -import net.minecraft.client.util.InputMappings; import net.minecraft.client.util.InputUtil; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.block.entity.BlockEntity; diff --git a/src/unported/java/appeng/core/FacadeItemGroup.java b/src/unported/java/appeng/core/FacadeItemGroup.java index 7d862798f..c7e07712d 100644 --- a/src/unported/java/appeng/core/FacadeItemGroup.java +++ b/src/unported/java/appeng/core/FacadeItemGroup.java @@ -74,7 +74,7 @@ public final class FacadeItemGroup extends ItemGroup { Item blockItem = b.asItem(); if (blockItem != Items.AIR && blockItem.getGroup() != null) { final DefaultedList tmpList = DefaultedList.of(); - b.appendStacks(blockItem.getGroup(), tmpList); + b.addStacksForDisplay(blockItem.getGroup(), tmpList); for (final ItemStack l : tmpList) { final ItemStack facade = itemFacade.createFacadeForItem(l, false); if (!facade.isEmpty()) { diff --git a/src/unported/java/appeng/core/Registration.java b/src/unported/java/appeng/core/Registration.java index 41b5e7419..52978ac6c 100644 --- a/src/unported/java/appeng/core/Registration.java +++ b/src/unported/java/appeng/core/Registration.java @@ -24,7 +24,7 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.advancement.criterion.Criteria; import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.block.entity.*; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ScreenManager; import net.minecraft.client.particle.ParticleManager; @@ -32,31 +32,20 @@ import net.minecraft.client.render.model.BakedModel; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.particle.ParticleType; import net.minecraft.recipe.RecipeSerializer; +import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.registry.Registry; import net.minecraft.world.biome.Biome; import net.minecraft.world.dimension.DimensionType; -import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.GenerationStep; +import net.minecraft.world.gen.decorator.Decorator; import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.FeatureConfig; import net.minecraft.world.gen.feature.IFeatureConfig; import net.minecraft.world.gen.feature.OreFeatureConfig; import net.minecraft.world.gen.placement.CountRangeConfig; import net.minecraft.world.gen.placement.IPlacementConfig; import net.minecraft.world.gen.placement.Placement; -import net.minecraftforge.client.event.*; -import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.common.ModDimension; -import net.minecraftforge.common.crafting.CraftingHelper; -import net.minecraftforge.common.extensions.IForgeContainerType; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.event.server.FMLServerStartingEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.loading.FMLEnvironment; -import net.minecraftforge.fml.network.IContainerFactory; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.IForgeRegistry; import appeng.api.AEApi; import appeng.api.config.Upgrades; @@ -112,8 +101,6 @@ import appeng.worldgen.ChargedQuartzOreConfig; import appeng.worldgen.ChargedQuartzOreFeature; import appeng.worldgen.meteorite.MeteoriteStructure; -import java.util.Map; - final class Registration { public Registration() { @@ -139,144 +126,6 @@ final class Registration { DriveModel.DEPENDENCIES.forEach(ModelLoader::addSpecialModel); ModelLoader.addSpecialModel(MolecularAssemblerRenderer.LIGHTS_MODEL); - PartModels partModels = (PartModels) Api.INSTANCE.registries().partModels(); - partModels.getModels().forEach(ModelLoader::addSpecialModel); - partModels.setInitialized(true); - } - - public void registerContainerTypes(RegistryEvent.Register> event) { - final IForgeRegistry> registry = event.getRegistry(); - - CellWorkbenchContainer.TYPE = registerContainer(registry, "cellworkbench", CellWorkbenchContainer::fromNetwork, - CellWorkbenchContainer::open); - ChestContainer.TYPE = registerContainer(registry, "chest", ChestContainer::fromNetwork, ChestContainer::open); - CondenserContainer.TYPE = registerContainer(registry, "condenser", CondenserContainer::fromNetwork, - CondenserContainer::open); - CraftAmountContainer.TYPE = registerContainer(registry, "craftamount", CraftAmountContainer::fromNetwork, - CraftAmountContainer::open); - CraftConfirmContainer.TYPE = registerContainer(registry, "craftconfirm", CraftConfirmContainer::fromNetwork, - CraftConfirmContainer::open); - CraftingCPUContainer.TYPE = registerContainer(registry, "craftingcpu", CraftingCPUContainer::fromNetwork, - CraftingCPUContainer::open); - CraftingStatusContainer.TYPE = registerContainer(registry, "craftingstatus", - CraftingStatusContainer::fromNetwork, CraftingStatusContainer::open); - CraftingTermContainer.TYPE = registerContainer(registry, "craftingterm", CraftingTermContainer::fromNetwork, - CraftingTermContainer::open); - DriveContainer.TYPE = registerContainer(registry, "drive", DriveContainer::fromNetwork, DriveContainer::open); - FormationPlaneContainer.TYPE = registerContainer(registry, "formationplane", - FormationPlaneContainer::fromNetwork, FormationPlaneContainer::open); - GrinderContainer.TYPE = registerContainer(registry, "grinder", GrinderContainer::fromNetwork, - GrinderContainer::open); - InscriberContainer.TYPE = registerContainer(registry, "inscriber", InscriberContainer::fromNetwork, - InscriberContainer::open); - InterfaceContainer.TYPE = registerContainer(registry, "interface", InterfaceContainer::fromNetwork, - InterfaceContainer::open); - InterfaceTerminalContainer.TYPE = registerContainer(registry, "interfaceterminal", - InterfaceTerminalContainer::fromNetwork, InterfaceTerminalContainer::open); - IOPortContainer.TYPE = registerContainer(registry, "ioport", IOPortContainer::fromNetwork, - IOPortContainer::open); - LevelEmitterContainer.TYPE = registerContainer(registry, "levelemitter", LevelEmitterContainer::fromNetwork, - LevelEmitterContainer::open); - MolecularAssemblerContainer.TYPE = registerContainer(registry, "molecular_assembler", - MolecularAssemblerContainer::fromNetwork, MolecularAssemblerContainer::open); - MEMonitorableContainer.TYPE = registerContainer(registry, "memonitorable", MEMonitorableContainer::fromNetwork, - MEMonitorableContainer::open); - MEPortableCellContainer.TYPE = registerContainer(registry, "meportablecell", - MEPortableCellContainer::fromNetwork, MEPortableCellContainer::open); - NetworkStatusContainer.TYPE = registerContainer(registry, "networkstatus", NetworkStatusContainer::fromNetwork, - NetworkStatusContainer::open); - NetworkToolContainer.TYPE = registerContainer(registry, "networktool", NetworkToolContainer::fromNetwork, - NetworkToolContainer::open); - PatternTermContainer.TYPE = registerContainer(registry, "patternterm", PatternTermContainer::fromNetwork, - PatternTermContainer::open); - PriorityContainer.TYPE = registerContainer(registry, "priority", PriorityContainer::fromNetwork, - PriorityContainer::open); - QNBContainer.TYPE = registerContainer(registry, "qnb", QNBContainer::fromNetwork, QNBContainer::open); - QuartzKnifeContainer.TYPE = registerContainer(registry, "quartzknife", QuartzKnifeContainer::fromNetwork, - QuartzKnifeContainer::open); - SecurityStationContainer.TYPE = registerContainer(registry, "securitystation", - SecurityStationContainer::fromNetwork, SecurityStationContainer::open); - SkyChestContainer.TYPE = registerContainer(registry, "skychest", SkyChestContainer::fromNetwork, - SkyChestContainer::open); - SpatialIOPortContainer.TYPE = registerContainer(registry, "spatialioport", SpatialIOPortContainer::fromNetwork, - SpatialIOPortContainer::open); - StorageBusContainer.TYPE = registerContainer(registry, "storagebus", StorageBusContainer::fromNetwork, - StorageBusContainer::open); - UpgradeableContainer.TYPE = registerContainer(registry, "upgradeable", UpgradeableContainer::fromNetwork, - UpgradeableContainer::open); - VibrationChamberContainer.TYPE = registerContainer(registry, "vibrationchamber", - VibrationChamberContainer::fromNetwork, VibrationChamberContainer::open); - WirelessContainer.TYPE = registerContainer(registry, "wireless", WirelessContainer::fromNetwork, - WirelessContainer::open); - WirelessTermContainer.TYPE = registerContainer(registry, "wirelessterm", WirelessTermContainer::fromNetwork, - WirelessTermContainer::open); - - FluidFormationPlaneContainer.TYPE = registerContainer(registry, "fluid_formation_plane", - FluidFormationPlaneContainer::fromNetwork, FluidFormationPlaneContainer::open); - FluidIOContainer.TYPE = registerContainer(registry, "fluid_io", FluidIOContainer::fromNetwork, - FluidIOContainer::open); - FluidInterfaceContainer.TYPE = registerContainer(registry, "fluid_interface", - FluidInterfaceContainer::fromNetwork, FluidInterfaceContainer::open); - FluidLevelEmitterContainer.TYPE = registerContainer(registry, "fluid_level_emitter", - FluidLevelEmitterContainer::fromNetwork, FluidLevelEmitterContainer::open); - FluidStorageBusContainer.TYPE = registerContainer(registry, "fluid_storage_bus", - FluidStorageBusContainer::fromNetwork, FluidStorageBusContainer::open); - FluidTerminalContainer.TYPE = registerContainer(registry, "fluid_terminal", FluidTerminalContainer::fromNetwork, - FluidTerminalContainer::open); - - DistExecutor.runWhenOn(EnvType.CLIENT, () -> () -> { - ScreenManager.registerFactory(GrinderContainer.TYPE, GrinderScreen::new); - ScreenManager.registerFactory(QNBContainer.TYPE, QNBScreen::new); - ScreenManager.registerFactory(SkyChestContainer.TYPE, SkyChestScreen::new); - ScreenManager.registerFactory(ChestContainer.TYPE, ChestScreen::new); - ScreenManager.registerFactory(WirelessContainer.TYPE, WirelessScreen::new); - ScreenManager.>registerFactory( - MEMonitorableContainer.TYPE, MEMonitorableScreen::new); - ScreenManager.registerFactory(MEPortableCellContainer.TYPE, MEPortableCellScreen::new); - ScreenManager.registerFactory(WirelessTermContainer.TYPE, WirelessTermScreen::new); - ScreenManager.registerFactory(NetworkStatusContainer.TYPE, NetworkStatusScreen::new); - ScreenManager.>registerFactory( - CraftingCPUContainer.TYPE, CraftingCPUScreen::new); - ScreenManager.registerFactory(NetworkToolContainer.TYPE, NetworkToolScreen::new); - ScreenManager.registerFactory(QuartzKnifeContainer.TYPE, QuartzKnifeScreen::new); - ScreenManager.registerFactory(DriveContainer.TYPE, DriveScreen::new); - ScreenManager.registerFactory(VibrationChamberContainer.TYPE, VibrationChamberScreen::new); - ScreenManager.registerFactory(CondenserContainer.TYPE, CondenserScreen::new); - ScreenManager.registerFactory(InterfaceContainer.TYPE, InterfaceScreen::new); - ScreenManager.registerFactory(FluidInterfaceContainer.TYPE, FluidInterfaceScreen::new); - ScreenManager.>registerFactory( - UpgradeableContainer.TYPE, UpgradeableScreen::new); - ScreenManager.registerFactory(FluidIOContainer.TYPE, FluidIOScreen::new); - ScreenManager.registerFactory(IOPortContainer.TYPE, IOPortScreen::new); - ScreenManager.registerFactory(StorageBusContainer.TYPE, StorageBusScreen::new); - ScreenManager.registerFactory(FluidStorageBusContainer.TYPE, FluidStorageBusScreen::new); - ScreenManager.registerFactory(FormationPlaneContainer.TYPE, FormationPlaneScreen::new); - ScreenManager.registerFactory(FluidFormationPlaneContainer.TYPE, FluidFormationPlaneScreen::new); - ScreenManager.registerFactory(PriorityContainer.TYPE, PriorityScreen::new); - ScreenManager.registerFactory(SecurityStationContainer.TYPE, SecurityStationScreen::new); - ScreenManager.registerFactory(CraftingTermContainer.TYPE, CraftingTermScreen::new); - ScreenManager.registerFactory(PatternTermContainer.TYPE, PatternTermScreen::new); - ScreenManager.registerFactory(FluidTerminalContainer.TYPE, FluidTerminalScreen::new); - ScreenManager.registerFactory(LevelEmitterContainer.TYPE, LevelEmitterScreen::new); - ScreenManager.registerFactory(FluidLevelEmitterContainer.TYPE, FluidLevelEmitterScreen::new); - ScreenManager.registerFactory(SpatialIOPortContainer.TYPE, SpatialIOPortScreen::new); - ScreenManager.registerFactory(InscriberContainer.TYPE, InscriberScreen::new); - ScreenManager.registerFactory(CellWorkbenchContainer.TYPE, CellWorkbenchScreen::new); - ScreenManager.registerFactory(MolecularAssemblerContainer.TYPE, MolecularAssemblerScreen::new); - ScreenManager.registerFactory(CraftAmountContainer.TYPE, CraftAmountScreen::new); - ScreenManager.registerFactory(CraftConfirmContainer.TYPE, CraftConfirmScreen::new); - ScreenManager.registerFactory(InterfaceTerminalContainer.TYPE, InterfaceTerminalScreen::new); - ScreenManager.registerFactory(CraftingStatusContainer.TYPE, CraftingStatusScreen::new); - }); - } - - private ScreenHandlerType registerContainer(IForgeRegistry> registry, - String id, IContainerFactory factory, ContainerOpener.Opener opener) { - ScreenHandlerType type = IForgeContainerType.create(factory); - type.setRegistryName(AppEng.MOD_ID, id); - registry.register(type); - ContainerOpener.addOpener(type, opener); - return type; } // FIXME LATER @@ -290,10 +139,10 @@ final class Registration { // Block and part interface have different translation keys, but support the // same upgrades - ITextComponent interfaceGroup = parts.iface().asItem().getName(); - ITextComponent itemIoBusGroup = GuiText.IOBuses.textComponent(); - ITextComponent fluidIoBusGroup = GuiText.IOBusesFluids.textComponent(); - ITextComponent storageCellGroup = GuiText.IOBusesFluids.textComponent(); + Text interfaceGroup = parts.iface().asItem().getName(); + Text itemIoBusGroup = GuiText.IOBuses.textComponent(); + Text fluidIoBusGroup = GuiText.IOBusesFluids.textComponent(); + Text storageCellGroup = GuiText.IOBusesFluids.textComponent(); // default settings.. ((P2PTunnelRegistry) registries.p2pTunnel()).configure(); @@ -412,30 +261,30 @@ final class Registration { /* * White List Vanilla... */ - mr.whiteListTileEntity(net.minecraft.tileentity.BannerTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.BeaconTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.BrewingStandTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.ChestTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.CommandBlockTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.ComparatorTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.DaylightDetectorTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.DispenserTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.DropperTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.EnchantingTableTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.EnderChestTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.EndPortalTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.FurnaceTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.HopperTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.MobSpawnerTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.PistonTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.ShulkerBoxTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.SignTileEntity.class); - mr.whiteListTileEntity(net.minecraft.tileentity.SkullTileEntity.class); + mr.whiteListBlockEntity(BannerBlockEntity.class); + mr.whiteListBlockEntity(BeaconBlockEntity.class); + mr.whiteListBlockEntity(BrewingStandBlockEntity.class); + mr.whiteListBlockEntity(ChestBlockEntity.class); + mr.whiteListBlockEntity(CommandBlockBlockEntity.class); + mr.whiteListBlockEntity(ComparatorBlockEntity.class); + mr.whiteListBlockEntity(DaylightDetectorBlockEntity.class); + mr.whiteListBlockEntity(DispenserBlockEntity.class); + mr.whiteListBlockEntity(DropperBlockEntity.class); + mr.whiteListBlockEntity(EnchantingTableBlockEntity.class); + mr.whiteListBlockEntity(EnderChestBlockEntity.class); + mr.whiteListBlockEntity(EndPortalBlockEntity.class); + mr.whiteListBlockEntity(FurnaceBlockEntity.class); + mr.whiteListBlockEntity(HopperBlockEntity.class); + mr.whiteListBlockEntity(MobSpawnerBlockEntity.class); + mr.whiteListBlockEntity(PistonBlockEntity.class); + mr.whiteListBlockEntity(ShulkerBoxBlockEntity.class); + mr.whiteListBlockEntity(SignBlockEntity.class); + mr.whiteListBlockEntity(SkullBlockEntity.class); /* * Whitelist AE2 */ - mr.whiteListTileEntity(AEBaseBlockEntity.class); + mr.whiteListBlockEntity(AEBaseBlockEntity.class); /* * world gen @@ -444,7 +293,7 @@ final class Registration { // FIXME: registries.worldgen().disableWorldGenForProviderID( type, // StorageWorldProvider.class ); - registries.worldgen().disableWorldGenForDimension(type, DimensionType.THE_NETHER.getRegistryName()); + registries.worldgen().disableWorldGenForDimension(type, DimensionType.THE_NETHER_REGISTRY_KEY.getValue()); } // whitelist from config @@ -453,11 +302,10 @@ final class Registration { new Identifier(dimension)); } - ForgeRegistries.BIOMES.forEach(b -> { + Biome.BIOMES.forEach(b -> { addMeteoriteWorldGen(b); addQuartzWorldGen(b); }); - } private static void addMeteoriteWorldGen(Biome b) { @@ -469,10 +317,9 @@ final class Registration { return; } - b.addStructure(MeteoriteStructure.INSTANCE.withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG)); - b.addFeature(GenerationStage.Decoration.TOP_LAYER_MODIFICATION, - MeteoriteStructure.INSTANCE.withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG) - .withPlacement(Placement.NOPE.configure(IPlacementConfig.NO_PLACEMENT_CONFIG))); + b.addStructureFeature(MeteoriteStructure.INSTANCE.configure(FeatureConfig.DEFAULT)); + b.addFeature(GenerationStep.Feature.TOP_LAYER_MODIFICATION, + MeteoriteStructure.INSTANCE.configure(FeatureConfig.DEFAULT)); } private static void addQuartzWorldGen(Biome b) { @@ -481,22 +328,22 @@ final class Registration { } BlockState quartzOre = AEApi.instance().definitions().blocks().quartzOre().block().getDefaultState(); - b.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, + b.addFeature(GenerationStep.Feature.UNDERGROUND_ORES, Feature.ORE - .withConfiguration(new OreFeatureConfig(OreFeatureConfig.FillerBlockType.NATURAL_STONE, + .configure(new OreFeatureConfig(OreFeatureConfig.Target.NATURAL_STONE, quartzOre, AEConfig.instance().getQuartzOresPerCluster())) - .withPlacement(Placement.COUNT_RANGE.configure( + .createDecoratedFeature(Decorator.COUNT_RANGE.configure( new CountRangeConfig(AEConfig.instance().getQuartzOresClusterAmount(), 12, 12, 72)))); if (AEConfig.instance().isFeatureEnabled(AEFeature.CHARGED_CERTUS_ORE)) { BlockState chargedQuartzOre = AEApi.instance().definitions().blocks().quartzOreCharged().block() .getDefaultState(); - b.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, + b.addFeature(GenerationStep.Decoration.UNDERGROUND_DECORATION, ChargedQuartzOreFeature.INSTANCE - .withConfiguration(new ChargedQuartzOreConfig(quartzOre, chargedQuartzOre, + .configure(new ChargedQuartzOreConfig(quartzOre, chargedQuartzOre, AEConfig.instance().getSpawnChargedChance())) - .withPlacement(Placement.NOPE.configure(IPlacementConfig.NO_PLACEMENT_CONFIG))); + .createDecoratedFeature(Decorator.NOPE.configure(IPlacementConfig.NO_PLACEMENT_CONFIG))); } } diff --git a/src/unported/java/appeng/crafting/CraftingJob.java b/src/unported/java/appeng/crafting/CraftingJob.java deleted file mode 100644 index 45fbf7da9..000000000 --- a/src/unported/java/appeng/crafting/CraftingJob.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.crafting; - -import java.util.HashMap; -import java.util.concurrent.TimeUnit; - -import com.google.common.base.Stopwatch; - -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.World; - -import appeng.api.AEApi; -import appeng.api.config.Actionable; -import appeng.api.networking.IGrid; -import appeng.api.networking.IGridHost; -import appeng.api.networking.IGridNode; -import appeng.api.networking.crafting.ICraftingCallback; -import appeng.api.networking.crafting.ICraftingGrid; -import appeng.api.networking.crafting.ICraftingJob; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.IActionSource; -import appeng.api.networking.storage.IStorageGrid; -import appeng.api.storage.channels.IItemStorageChannel; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IItemList; -import appeng.api.util.DimensionalCoord; -import appeng.core.AELog; -import appeng.hooks.TickHandler; - -public class CraftingJob implements Runnable, ICraftingJob { - private static final String LOG_CRAFTING_JOB = "CraftingJob (%s) issued by %s requesting [%s] using %s bytes took %s ms"; - private static final String LOG_MACHINE_SOURCE_DETAILS = "Machine[object=%s, %s]"; - - private final MECraftingInventory original; - private final World world; - private final IItemList crafting = AEApi.instance().storage() - .getStorageChannel(IItemStorageChannel.class).createList(); - private final IItemList missing = AEApi.instance().storage() - .getStorageChannel(IItemStorageChannel.class).createList(); - private final HashMap opsAndMultiplier = new HashMap<>(); - private final Object monitor = new Object(); - private final Stopwatch watch = Stopwatch.createUnstarted(); - private CraftingTreeNode tree; - private final IAEItemStack output; - private boolean simulate = false; - private MECraftingInventory availableCheck; - private long bytes = 0; - private final IActionSource actionSrc; - private final ICraftingCallback callback; - private boolean running = false; - private boolean done = false; - private int time = 5; - private int incTime = Integer.MAX_VALUE; - - private World wrapWorld(final World w) { - return w; - } - - public CraftingJob(final World w, final IGrid grid, final IActionSource actionSrc, final IAEItemStack what, - final ICraftingCallback callback) { - this.world = this.wrapWorld(w); - this.output = what.copy(); - this.actionSrc = actionSrc; - - this.callback = callback; - final ICraftingGrid cc = grid.getCache(ICraftingGrid.class); - final IStorageGrid sg = grid.getCache(IStorageGrid.class); - this.original = new MECraftingInventory( - sg.getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class)), actionSrc, - false, false, false); - - this.setTree(this.getCraftingTree(cc, what)); - this.availableCheck = null; - } - - private CraftingTreeNode getCraftingTree(final ICraftingGrid cc, final IAEItemStack what) { - return new CraftingTreeNode(cc, this, what, null, -1, 0); - } - - void refund(final IAEItemStack o) { - this.availableCheck.injectItems(o, Actionable.MODULATE, this.actionSrc); - } - - IAEItemStack checkUse(final IAEItemStack available) { - return this.availableCheck.extractItems(available, Actionable.MODULATE, this.actionSrc); - } - - public void writeToNBT(final CompoundTag out) { - - } - - void addTask(IAEItemStack what, final long crafts, final ICraftingPatternDetails details, final int depth) { - if (crafts > 0) { - what = what.copy(); - what.setStackSize(what.getStackSize() * crafts); - this.crafting.add(what); - } - } - - void addMissing(IAEItemStack what) { - what = what.copy(); - this.missing.add(what); - } - - @Override - public void run() { - try { - try { - TickHandler.INSTANCE.registerCraftingSimulation(this.world, this); - this.handlePausing(); - - final Stopwatch timer = Stopwatch.createStarted(); - - final MECraftingInventory craftingInventory = new MECraftingInventory(this.original, true, false, true); - craftingInventory.ignore(this.output); - - this.availableCheck = new MECraftingInventory(this.original, false, false, false); - this.getTree().request(craftingInventory, this.output.getStackSize(), this.actionSrc); - this.getTree().dive(this); - - for (final String s : this.opsAndMultiplier.keySet()) { - final TwoIntegers ti = this.opsAndMultiplier.get(s); - AELog.crafting(s + " * " + ti.times + " = " + (ti.perOp * ti.times)); - } - - this.logCraftingJob("real", timer); - // if ( mode == Actionable.MODULATE ) - // craftingInventory.moveItemsToStorage( storage ); - } catch (final CraftBranchFailure e) { - this.simulate = true; - - try { - final Stopwatch timer = Stopwatch.createStarted(); - final MECraftingInventory craftingInventory = new MECraftingInventory(this.original, true, false, - true); - craftingInventory.ignore(this.output); - - this.availableCheck = new MECraftingInventory(this.original, false, false, false); - - this.getTree().setSimulate(); - this.getTree().request(craftingInventory, this.output.getStackSize(), this.actionSrc); - this.getTree().dive(this); - - for (final String s : this.opsAndMultiplier.keySet()) { - final TwoIntegers ti = this.opsAndMultiplier.get(s); - AELog.crafting(s + " * " + ti.times + " = " + (ti.perOp * ti.times)); - } - - this.logCraftingJob("simulate", timer); - } catch (final CraftBranchFailure e1) { - AELog.debug(e1); - } catch (final CraftingCalculationFailure f) { - AELog.debug(f); - } catch (final InterruptedException e1) { - AELog.crafting("Crafting calculation canceled."); - this.finish(); - return; - } - } catch (final CraftingCalculationFailure f) { - AELog.debug(f); - } catch (final InterruptedException e1) { - AELog.crafting("Crafting calculation canceled."); - this.finish(); - return; - } - - AELog.craftingDebug("crafting job now done"); - } catch (final Throwable t) { - this.finish(); - throw new IllegalStateException(t); - } - - this.finish(); - } - - void handlePausing() throws InterruptedException { - if (this.incTime > 100) { - this.incTime = 0; - - synchronized (this.monitor) { - if (this.watch.elapsed(TimeUnit.MICROSECONDS) > this.time) { - this.running = false; - this.watch.stop(); - this.monitor.notify(); - } - - if (!this.running) { - AELog.craftingDebug("crafting job will now sleep"); - - while (!this.running) { - this.monitor.wait(); - } - - AELog.craftingDebug("crafting job now active"); - } - } - - if (Thread.interrupted()) { - throw new InterruptedException(); - } - } - this.incTime++; - } - - private void finish() { - if (this.callback != null) { - this.callback.calculationComplete(this); - } - - this.availableCheck = null; - - synchronized (this.monitor) { - this.running = false; - this.done = true; - this.monitor.notify(); - } - } - - @Override - public boolean isSimulation() { - return this.simulate; - } - - @Override - public long getByteTotal() { - return this.bytes; - } - - @Override - public void populatePlan(final IItemList plan) { - if (this.getTree() != null) { - this.getTree().getPlan(plan); - } - } - - @Override - public IAEItemStack getOutput() { - return this.output; - } - - public boolean isDone() { - return this.done; - } - - World getWorld() { - return this.world; - } - - /** - * returns true if this needs more simulation. - * - * @param milli milliseconds of simulation - * - * @return true if this needs more simulation - */ - public boolean simulateFor(final int milli) { - this.time = milli; - - synchronized (this.monitor) { - if (this.done) { - return false; - } - - this.watch.reset(); - this.watch.start(); - this.running = true; - - AELog.craftingDebug("main thread is now going to sleep"); - - this.monitor.notify(); - - while (this.running) { - try { - this.monitor.wait(); - } catch (final InterruptedException ignored) { - } - } - - AELog.craftingDebug("main thread is now active"); - } - - return true; - } - - void addBytes(final long crafts) { - this.bytes += crafts; - } - - public CraftingTreeNode getTree() { - return this.tree; - } - - private void setTree(final CraftingTreeNode tree) { - this.tree = tree; - } - - private void logCraftingJob(String type, Stopwatch timer) { - if (AELog.isCraftingLogEnabled()) { - final String itemToOutput = this.output.toString(); - final long elapsedTime = timer.elapsed(TimeUnit.MILLISECONDS); - final String actionSource; - - if (this.actionSrc.player().isPresent()) { - final PlayerEntity player = this.actionSrc.player().get(); - - actionSource = player.toString(); - } else if (this.actionSrc.machine().isPresent()) { - final IActionHost machineSource = this.actionSrc.machine().get(); - final IGridNode actionableNode = machineSource.getActionableNode(); - final IGridHost machine = actionableNode.getMachine(); - final DimensionalCoord location = actionableNode.getGridBlock().getLocation(); - - actionSource = String.format(LOG_MACHINE_SOURCE_DETAILS, machine, location); - } else { - actionSource = "[unknown source]"; - } - - AELog.crafting(LOG_CRAFTING_JOB, type, actionSource, itemToOutput, this.bytes, elapsedTime); - } - } - - private static class TwoIntegers { - private final long perOp = 0; - private final long times = 0; - } -} diff --git a/src/unported/java/appeng/debug/MeteoritePlacerItem.java b/src/unported/java/appeng/debug/MeteoritePlacerItem.java index b437e58ba..67ba636ba 100644 --- a/src/unported/java/appeng/debug/MeteoritePlacerItem.java +++ b/src/unported/java/appeng/debug/MeteoritePlacerItem.java @@ -46,7 +46,7 @@ public class MeteoritePlacerItem extends AEBaseItem { private static final String MODE_TAG = "mode"; - public MeteoritePlacerItem(Properties properties) { + public MeteoritePlacerItem(Settings properties) { super(properties); } diff --git a/src/unported/java/appeng/fluids/client/gui/FluidFormationPlaneScreen.java b/src/unported/java/appeng/fluids/client/gui/FluidFormationPlaneScreen.java index 9d49980d1..e53d9b25a 100644 --- a/src/unported/java/appeng/fluids/client/gui/FluidFormationPlaneScreen.java +++ b/src/unported/java/appeng/fluids/client/gui/FluidFormationPlaneScreen.java @@ -19,7 +19,7 @@ public class FluidFormationPlaneScreen extends UpgradeableScreen openPriorityGui())); } diff --git a/src/unported/java/appeng/fluids/client/gui/FluidIOScreen.java b/src/unported/java/appeng/fluids/client/gui/FluidIOScreen.java index 57c5ae770..d0ccb1f38 100644 --- a/src/unported/java/appeng/fluids/client/gui/FluidIOScreen.java +++ b/src/unported/java/appeng/fluids/client/gui/FluidIOScreen.java @@ -44,7 +44,7 @@ public class FluidIOScreen extends UpgradeableScreen { public void init() { super.init(); - final IAEFluidTank inv = this.container.getFluidConfigInventory(); + final IAEFluidTank inv = this.handler.getFluidConfigInventory(); final int y = 40; final int x = 80; diff --git a/src/unported/java/appeng/fluids/client/gui/FluidInterfaceScreen.java b/src/unported/java/appeng/fluids/client/gui/FluidInterfaceScreen.java index c66b41294..737cd8caa 100644 --- a/src/unported/java/appeng/fluids/client/gui/FluidInterfaceScreen.java +++ b/src/unported/java/appeng/fluids/client/gui/FluidInterfaceScreen.java @@ -18,9 +18,10 @@ package appeng.fluids.client.gui; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.text.Text; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.client.gui.implementations.UpgradeableScreen; import appeng.client.gui.widgets.TabButton; @@ -38,15 +39,15 @@ public class FluidInterfaceScreen extends UpgradeableScreen(this.guiLeft - 18, this.guiTop + 28, + this.redstoneMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 28, Settings.REDSTONE_EMITTER, RedstoneMode.LOW_SIGNAL); final int a = AEConfig.instance().levelByMillyBuckets(0); @@ -54,22 +54,22 @@ public class FluidLevelEmitterScreen extends UpgradeableScreen addQty(a))); - this.addButton(new Button(this.guiLeft + 48, this.guiTop + 17, 28, 20, "+" + b, btn -> addQty(b))); - this.addButton(new Button(this.guiLeft + 82, this.guiTop + 17, 32, 20, "+" + c, btn -> addQty(c))); - this.addButton(new Button(this.guiLeft + 120, this.guiTop + 17, 38, 20, "+" + d, btn -> addQty(d))); + this.addButton(new ButtonWidget(this.x + 20, this.y + 17, 22, 20, "+" + a, btn -> addQty(a))); + this.addButton(new ButtonWidget(this.x + 48, this.y + 17, 28, 20, "+" + b, btn -> addQty(b))); + this.addButton(new ButtonWidget(this.x + 82, this.y + 17, 32, 20, "+" + c, btn -> addQty(c))); + this.addButton(new ButtonWidget(this.x + 120, this.y + 17, 38, 20, "+" + d, btn -> addQty(d))); - this.addButton(new Button(this.guiLeft + 20, this.guiTop + 59, 22, 20, "-" + a, btn -> addQty(-a))); - this.addButton(new Button(this.guiLeft + 48, this.guiTop + 59, 28, 20, "-" + b, btn -> addQty(-b))); - this.addButton(new Button(this.guiLeft + 82, this.guiTop + 59, 32, 20, "-" + c, btn -> addQty(-c))); - this.addButton(new Button(this.guiLeft + 120, this.guiTop + 59, 38, 20, "-" + d, btn -> addQty(-d))); + this.addButton(new ButtonWidget(this.x + 20, this.y + 59, 22, 20, "-" + a, btn -> addQty(-a))); + this.addButton(new ButtonWidget(this.x + 48, this.y + 59, 28, 20, "-" + b, btn -> addQty(-b))); + this.addButton(new ButtonWidget(this.x + 82, this.y + 59, 32, 20, "-" + c, btn -> addQty(-c))); + this.addButton(new ButtonWidget(this.x + 120, this.y + 59, 38, 20, "-" + d, btn -> addQty(-d))); this.addButton(this.redstoneMode); } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { - super.drawBG(offsetX, offsetY, mouseX, mouseY, partialTicks); + public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { + super.drawBG(matrices, offsetX, offsetY, mouseX, mouseY, partialTicks); this.level.render(mouseX, mouseY, partialTicks); } @@ -152,7 +152,7 @@ public class FluidLevelEmitterScreen extends UpgradeableScreen clear())); - addButton(new ActionButton(this.guiLeft - 18, this.guiTop + 28, ActionItems.WRENCH, btn -> partition())); - this.rwMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 48, Settings.ACCESS, + addButton(new ActionButton(this.x - 18, this.y + 8, ActionItems.CLOSE, btn -> clear())); + addButton(new ActionButton(this.x - 18, this.y + 28, ActionItems.WRENCH, btn -> partition())); + this.rwMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 48, Settings.ACCESS, AccessRestriction.READ_WRITE); - this.storageFilter = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 68, + this.storageFilter = new ServerSettingToggleButton<>(this.x - 18, this.y + 68, Settings.STORAGE_FILTER, StorageFilter.EXTRACTABLE_ONLY); - this.fuzzyMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 88, Settings.FUZZY_MODE, + this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 88, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL); - addButton(this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), + addButton(this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriorityGui()))); this.addButton(this.storageFilter); @@ -97,9 +98,9 @@ public class FluidStorageBusScreen extends UpgradeableScreen 0) { - blit(this.x, this.y + this.height - iconHeightRemainder, getBlitOffset(), 16, iconHeightRemainder, + drawTexture(matrices, this.x, this.y + this.height - iconHeightRemainder, getZOffset(), 16, iconHeightRemainder, sprite); } for (int i = 0; i < scaledHeight / 16; i++) { - blit(this.x, this.y + this.height - iconHeightRemainder - (i + 1) * 16, getBlitOffset(), 16, 16, + drawTexture(matrices, this.x, this.y + this.height - iconHeightRemainder - (i + 1) * 16, getZOffset(), 16, 16, sprite); } } @@ -85,7 +87,7 @@ public class FluidTankWidget extends Widget implements ITooltip { } @Override - public String getMessage() { + public Text getMessage() { final IAEFluidStack fluid = this.tank.getFluidInSlot(this.slot); if (fluid != null && fluid.getStackSize() > 0) { String desc = fluid.getFluid().getAttributes().getName(fluid.getFluidStack()).getFormattedText(); diff --git a/src/unported/java/appeng/fluids/client/gui/widgets/OptionalFluidSlotWidget.java b/src/unported/java/appeng/fluids/client/gui/widgets/OptionalFluidSlotWidget.java index 882bc8251..39a4fd3d1 100644 --- a/src/unported/java/appeng/fluids/client/gui/widgets/OptionalFluidSlotWidget.java +++ b/src/unported/java/appeng/fluids/client/gui/widgets/OptionalFluidSlotWidget.java @@ -3,7 +3,7 @@ package appeng.fluids.client.gui.widgets; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraftforge.fml.client.gui.GuiUtils; + import appeng.api.storage.data.IAEFluidStack; import appeng.container.slot.IOptionalSlotHost; @@ -48,7 +48,7 @@ public class OptionalFluidSlotWidget extends FluidSlotWidget { } else { RenderSystem.color4f(1.0F, 1.0F, 1.0F, 0.4F); } - GuiUtils.drawTexturedModalRect(guileft + this.xPos() - 1, guitop + this.yPos() - 1, this.srcX - 1, + drawTexture(matrices, guileft + this.xPos() - 1, guitop + this.yPos() - 1, this.srcX - 1, this.srcY - 1, this.getWidth() + 2, this.getHeight() + 2, currentZIndex); } } diff --git a/src/unported/java/appeng/fluids/helper/FluidCellConfig.java b/src/unported/java/appeng/fluids/helper/FluidCellConfig.java deleted file mode 100644 index 49e7e3c7f..000000000 --- a/src/unported/java/appeng/fluids/helper/FluidCellConfig.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2018, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.fluids.helper; - -import javax.annotation.Nonnull; - -import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.FluidAttributes; -import net.minecraftforge.fluids.FluidUtil; - -import appeng.api.AEApi; -import appeng.fluids.items.FluidDummyItem; -import appeng.items.contents.CellConfig; - -/** - * @author DrummerMC - * @version rv6 - 2018-01-22 - * @since rv6 2018-01-22 - */ -public class FluidCellConfig extends CellConfig { - public FluidCellConfig(ItemStack is) { - super(is); - } - - @Override - @Nonnull - public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { - if (stack.isEmpty() || stack.getItem() instanceof FluidDummyItem) { - super.insertItem(slot, stack, simulate); - } - LazyOptional fluidOpt = FluidUtil.getFluidContained(stack); - if (!fluidOpt.isPresent() - || !AEApi.instance().definitions().items().dummyFluidItem().maybeStack(1).isPresent()) { - return stack; - } - FluidVolume fluid = fluidOpt.orElse(null); - - fluid.setAmount(FluidAttributes.BUCKET_VOLUME); - ItemStack is = AEApi.instance().definitions().items().dummyFluidItem().maybeStack(1).get(); - FluidDummyItem item = (FluidDummyItem) is.getItem(); - item.setFluidStack(is, fluid); - return super.insertItem(slot, is, simulate); - } - - @Override - public void setStackInSlot(int slot, @Nonnull ItemStack stack) { - if (stack.isEmpty() || stack.getItem() instanceof FluidDummyItem) { - super.setInvStack(slot, stack); - } - LazyOptional fluidOpt = FluidUtil.getFluidContained(stack); - if (!fluidOpt.isPresent() - || !AEApi.instance().definitions().items().dummyFluidItem().maybeStack(1).isPresent()) { - return; - } - FluidVolume fluid = fluidOpt.orElse(null); - - fluid.setAmount(FluidAttributes.BUCKET_VOLUME); - ItemStack is = AEApi.instance().definitions().items().dummyFluidItem().maybeStack(1).get(); - FluidDummyItem item = (FluidDummyItem) is.getItem(); - item.setFluidStack(is, fluid); - super.setInvStack(slot, is); - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack stack) { - if (stack.isEmpty() || stack.getItem() instanceof FluidDummyItem) { - super.isItemValid(slot, stack); - } - LazyOptional fluidOpt = FluidUtil.getFluidContained(stack); - if (!fluidOpt.isPresent() - || !AEApi.instance().definitions().items().dummyFluidItem().maybeStack(1).isPresent()) { - return false; - } - FluidVolume fluid = fluidOpt.orElse(null); - - fluid.setAmount(FluidAttributes.BUCKET_VOLUME); - ItemStack is = AEApi.instance().definitions().items().dummyFluidItem().maybeStack(1).get(); - FluidDummyItem item = (FluidDummyItem) is.getItem(); - item.setFluidStack(is, fluid); - return super.isItemValid(slot, is); - } - -} diff --git a/src/unported/java/appeng/fluids/items/FluidDummyItemColor.java b/src/unported/java/appeng/fluids/items/FluidDummyItemColor.java deleted file mode 100644 index f0ef7658e..000000000 --- a/src/unported/java/appeng/fluids/items/FluidDummyItemColor.java +++ /dev/null @@ -1,27 +0,0 @@ -package appeng.fluids.items; - -import net.minecraft.client.renderer.color.IItemColor; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fluids.FluidStack; - -@OnlyIn(Dist.CLIENT) -public class FluidDummyItemColor implements IItemColor { - - @Override - public int getColor(ItemStack stack, int tintIndex) { - - Item item = stack.getItem(); - if (!(item instanceof FluidDummyItem)) { - return -1; - } - - FluidDummyItem fluidItem = (FluidDummyItem) item; - FluidStack fluidStack = fluidItem.getFluidStack(stack); - - return fluidStack.getFluid().getAttributes().getColor(fluidStack); - } - -} diff --git a/src/unported/java/appeng/fluids/util/AEFluidTank.java b/src/unported/java/appeng/fluids/util/AEFluidTank.java deleted file mode 100644 index 9cbb0b1fb..000000000 --- a/src/unported/java/appeng/fluids/util/AEFluidTank.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2018, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.fluids.util; - -import net.minecraftforge.fluids.capability.templates.FluidTank; - -import appeng.api.storage.data.IAEFluidStack; -import appeng.util.Platform; - -public class AEFluidTank extends FluidTank implements IAEFluidTank { - private final IAEFluidInventory host; - - public AEFluidTank(IAEFluidInventory host, int capacity) { - super(capacity); - this.host = host; - } - - @Override - protected void onContentsChanged() { - if (this.host != null && Platform.isServer()) { - this.host.onFluidInventoryChanged(this, 0); - } - super.onContentsChanged(); - } - - @Override - public void setFluidInSlot(int slot, IAEFluidStack fluid) { - if (slot == 0) { - this.setFluid(fluid == null ? null : fluid.getFluidStack()); - this.onContentsChanged(); - } - } - - @Override - public IAEFluidStack getFluidInSlot(int slot) { - if (slot == 0) { - return AEFluidStack.fromFluidVolume(this.getFluid()); - } - return null; - } - - @Override - public int getSlots() { - return 1; - } - -} diff --git a/src/unported/java/appeng/helpers/LocationRotation.java b/src/unported/java/appeng/helpers/LocationRotation.java deleted file mode 100644 index a6b862bca..000000000 --- a/src/unported/java/appeng/helpers/LocationRotation.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.helpers; - -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; - -import appeng.api.util.IOrientable; - -public class LocationRotation implements IOrientable { - - private final BlockView w; - private final int x; - private final int y; - private final int z; - - public LocationRotation(final BlockView world, final int x, final int y, final int z) { - this.w = world; - this.x = x; - this.y = y; - this.z = z; - } - - @Override - public boolean canBeRotated() { - return false; - } - - @Override - public Direction getForward() { - if (this.getUp().getOffsetY() == 0) { - return Direction.UP; - } - return Direction.SOUTH; - } - - @Override - public Direction getUp() { - final int num = Math.abs(this.x + this.y + this.z) % 6; - return Direction.values()[num]; - } - - @Override - public void setOrientation(final Direction forward, final Direction up) { - - } -} diff --git a/src/unported/java/appeng/helpers/NullRotation.java b/src/unported/java/appeng/helpers/NullRotation.java deleted file mode 100644 index 4bfd8c3dc..000000000 --- a/src/unported/java/appeng/helpers/NullRotation.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.helpers; - -import net.minecraft.util.math.Direction; - -import appeng.api.util.IOrientable; - -public class NullRotation implements IOrientable { - - public NullRotation() { - - } - - @Override - public boolean canBeRotated() { - return false; - } - - @Override - public Direction getForward() { - return Direction.SOUTH; - } - - @Override - public Direction getUp() { - return Direction.UP; - } - - @Override - public void setOrientation(final Direction forward, final Direction up) { - - } -} diff --git a/src/unported/java/appeng/helpers/Reflected.java b/src/unported/java/appeng/helpers/Reflected.java deleted file mode 100644 index 48cccac49..000000000 --- a/src/unported/java/appeng/helpers/Reflected.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.helpers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Marker interface to help identify invocation of reflection - */ -@Retention(RetentionPolicy.SOURCE) -@Target({ ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.TYPE, ElementType.METHOD }) -public @interface Reflected { - -} diff --git a/src/unported/java/appeng/integration/modules/jei/FacadeRegistryPlugin.java b/src/unported/java/appeng/integration/modules/jei/FacadeRegistryPlugin.java index 2ca6357ef..7d4d44ea4 100644 --- a/src/unported/java/appeng/integration/modules/jei/FacadeRegistryPlugin.java +++ b/src/unported/java/appeng/integration/modules/jei/FacadeRegistryPlugin.java @@ -105,11 +105,11 @@ class FacadeRegistryPlugin implements IRecipeManagerPlugin { "facade/" + textureItem.getItem().getRegistryName().toString().replace(':', '/')); DefaultedList ingredients = DefaultedList.withSize(9, Ingredient.EMPTY); - ingredients.set(1, Ingredient.fromStacks(cableAnchor)); - ingredients.set(3, Ingredient.fromStacks(cableAnchor)); - ingredients.set(5, Ingredient.fromStacks(cableAnchor)); - ingredients.set(7, Ingredient.fromStacks(cableAnchor)); - ingredients.set(4, Ingredient.fromStacks(textureItem)); + ingredients.set(1, Ingredient.ofStacks(cableAnchor)); + ingredients.set(3, Ingredient.ofStacks(cableAnchor)); + ingredients.set(5, Ingredient.ofStacks(cableAnchor)); + ingredients.set(7, Ingredient.ofStacks(cableAnchor)); + ingredients.set(4, Ingredient.ofStacks(textureItem)); return new ShapedRecipe(id, "", 3, 3, ingredients, result); } diff --git a/src/unported/java/appeng/integration/modules/jei/GrinderRecipeCategory.java b/src/unported/java/appeng/integration/modules/jei/GrinderRecipeCategory.java index 3d6f2c1be..f814bb322 100644 --- a/src/unported/java/appeng/integration/modules/jei/GrinderRecipeCategory.java +++ b/src/unported/java/appeng/integration/modules/jei/GrinderRecipeCategory.java @@ -122,7 +122,7 @@ class GrinderRecipeCategory implements IRecipeCategory { // FIXME if( this.recipe.getOptionalOutput() != null ) // FIXME { // FIXME String text = String.format( "%d%%", (int) ( this.recipe.getOptionalChance() * 100 ) ); -// FIXME float width = fr.getStringWidth( text ) * scale; +// FIXME float width = fr.getWidth( text ) * scale; // FIXME int xScaled = Math.round( ( x + ( 18 - width ) / 2 ) * invScale ); // FIXME fr.drawString( text, xScaled, (int) ( 65 * invScale ), Color.gray.getRGB() ); // FIXME x += 18; @@ -131,7 +131,7 @@ class GrinderRecipeCategory implements IRecipeCategory { // FIXME if( this.recipe.getSecondOptionalOutput() != null ) // FIXME { // FIXME String text = String.format( "%d%%", (int) ( this.recipe.getSecondOptionalChance() * 100 ) ); -// FIXME float width = fr.getStringWidth( text ) * scale; +// FIXME float width = fr.getWidth( text ) * scale; // FIXME int xScaled = Math.round( ( x + ( 18 - width ) / 2 ) * invScale ); // FIXME fr.drawString( text, xScaled, (int) ( 65 * invScale ), Color.gray.getRGB() ); // FIXME } diff --git a/src/unported/java/appeng/integration/modules/jei/RecipeTransferHandler.java b/src/unported/java/appeng/integration/modules/jei/RecipeTransferHandler.java index cf14777a5..2957bae1d 100644 --- a/src/unported/java/appeng/integration/modules/jei/RecipeTransferHandler.java +++ b/src/unported/java/appeng/integration/modules/jei/RecipeTransferHandler.java @@ -25,8 +25,8 @@ import java.util.Map; import javax.annotation.Nullable; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.Slot; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.slot.Slot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -42,7 +42,7 @@ import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.packets.JEIRecipePacket; import appeng.util.Platform; -class RecipeTransferHandler implements IRecipeTransferHandler { +class RecipeTransferHandler implements IRecipeTransferHandler { private final Class containerClass; @@ -75,7 +75,7 @@ class RecipeTransferHandler implements IRecipeTransferHandl continue; } - for (final Slot slot : container.inventorySlots) { + for (final Slot slot : container.slots) { if (slot instanceof CraftingMatrixSlot || slot instanceof FakeCraftingMatrixSlot) { if (slot.getSlotIndex() == slotIndex) { final ListTag tags = new ListTag(); diff --git a/src/unported/java/appeng/items/tools/powered/powersink/PoweredItemCapabilities.java b/src/unported/java/appeng/items/tools/powered/powersink/PoweredItemCapabilities.java index 9cc833075..7a1716008 100644 --- a/src/unported/java/appeng/items/tools/powered/powersink/PoweredItemCapabilities.java +++ b/src/unported/java/appeng/items/tools/powered/powersink/PoweredItemCapabilities.java @@ -30,7 +30,7 @@ import net.minecraftforge.energy.IEnergyStorage; import appeng.api.config.Actionable; import appeng.api.config.PowerUnits; import appeng.api.implementations.items.IAEItemPowerStorage; -import appeng.capabilities.Capabilities; +import appeng.attributes.MEAttributes; /** * The capability provider to expose chargable items to other mods. @@ -49,7 +49,7 @@ class PoweredItemCapabilities implements ICapabilityProvider, IEnergyStorage { @SuppressWarnings("unchecked") @Override public LazyOptional getCapability(Capability capability, @Nullable Direction facing) { - if (capability == Capabilities.FORGE_ENERGY) { + if (capability == MEAttributes.FORGE_ENERGY) { return (LazyOptional) LazyOptional.of(() -> this); } return LazyOptional.empty(); diff --git a/src/unported/java/appeng/me/cache/P2PCache.java b/src/unported/java/appeng/me/cache/P2PCache.java deleted file mode 100644 index 100270340..000000000 --- a/src/unported/java/appeng/me/cache/P2PCache.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.me.cache; - -import java.util.HashMap; -import java.util.Random; - -import com.google.common.collect.LinkedHashMultimap; -import com.google.common.collect.Multimap; - -import appeng.api.networking.GridFlags; -import appeng.api.networking.IGrid; -import appeng.api.networking.IGridCache; -import appeng.api.networking.IGridHost; -import appeng.api.networking.IGridNode; -import appeng.api.networking.IGridStorage; -import appeng.api.networking.events.MENetworkBootingStatusChange; -import appeng.api.networking.events.MENetworkEventSubscribe; -import appeng.api.networking.events.MENetworkPowerStatusChange; -import appeng.api.networking.ticking.ITickManager; -import appeng.core.AELog; -import appeng.me.cache.helpers.TunnelCollection; -import appeng.parts.p2p.MEP2PTunnelPart; -import appeng.parts.p2p.P2PTunnelPart; - -public class P2PCache implements IGridCache { - private static final TunnelCollection NULL_COLLECTION = new TunnelCollection(null, - null); - - private final IGrid myGrid; - private final HashMap inputs = new HashMap<>(); - private final Multimap outputs = LinkedHashMultimap.create(); - private final Random frequencyGenerator; - - public P2PCache(final IGrid g) { - this.myGrid = g; - this.frequencyGenerator = new Random(g.hashCode()); - } - - @MENetworkEventSubscribe - public void bootComplete(final MENetworkBootingStatusChange bootStatus) { - final ITickManager tm = this.myGrid.getCache(ITickManager.class); - for (final P2PTunnelPart me : this.inputs.values()) { - if (me instanceof MEP2PTunnelPart) { - tm.wakeDevice(me.getGridNode()); - } - } - } - - @MENetworkEventSubscribe - public void bootComplete(final MENetworkPowerStatusChange power) { - final ITickManager tm = this.myGrid.getCache(ITickManager.class); - for (final P2PTunnelPart me : this.inputs.values()) { - if (me instanceof MEP2PTunnelPart) { - tm.wakeDevice(me.getGridNode()); - } - } - } - - @Override - public void onUpdateTick() { - - } - - @Override - public void removeNode(final IGridNode node, final IGridHost machine) { - if (machine instanceof P2PTunnelPart) { - if (machine instanceof MEP2PTunnelPart) { - if (!node.hasFlag(GridFlags.REQUIRE_CHANNEL)) { - return; - } - } - - final P2PTunnelPart t = (P2PTunnelPart) machine; - // AELog.info( "rmv-" + (t.output ? "output: " : "input: ") + t.freq ); - - if (t.isOutput()) { - this.outputs.remove(t.getFrequency(), t); - } else { - this.inputs.remove(t.getFrequency()); - } - - this.updateTunnel(t.getFrequency(), !t.isOutput(), false); - } - } - - @Override - public void addNode(final IGridNode node, final IGridHost machine) { - if (machine instanceof P2PTunnelPart) { - if (machine instanceof MEP2PTunnelPart) { - if (!node.hasFlag(GridFlags.REQUIRE_CHANNEL)) { - return; - } - } - - final P2PTunnelPart t = (P2PTunnelPart) machine; - // AELog.info( "add-" + (t.output ? "output: " : "input: ") + t.freq ); - - if (t.isOutput()) { - this.outputs.put(t.getFrequency(), t); - } else { - this.inputs.put(t.getFrequency(), t); - } - - this.updateTunnel(t.getFrequency(), !t.isOutput(), false); - } - } - - @Override - public void onSplit(final IGridStorage storageB) { - - } - - @Override - public void onJoin(final IGridStorage storageB) { - - } - - @Override - public void populateGridStorage(final IGridStorage storage) { - - } - - private void updateTunnel(final short freq, final boolean updateOutputs, final boolean configChange) { - for (final P2PTunnelPart p : this.outputs.get(freq)) { - if (configChange) { - p.onTunnelConfigChange(); - } - p.onTunnelNetworkChange(); - } - - final P2PTunnelPart in = this.inputs.get(freq); - if (in != null) { - if (configChange) { - in.onTunnelConfigChange(); - } - in.onTunnelNetworkChange(); - } - } - - public void updateFreq(final P2PTunnelPart t, final short newFrequency) { - if (this.outputs.containsValue(t)) { - this.outputs.remove(t.getFrequency(), t); - } - - if (this.inputs.containsValue(t)) { - this.inputs.remove(t.getFrequency()); - } - - t.setFrequency(newFrequency); - - if (t.isOutput()) { - this.outputs.put(t.getFrequency(), t); - } else { - this.inputs.put(t.getFrequency(), t); - } - - // AELog.info( "update-" + (t.output ? "output: " : "input: ") + t.freq ); - this.updateTunnel(t.getFrequency(), t.isOutput(), true); - this.updateTunnel(t.getFrequency(), !t.isOutput(), true); - } - - public short newFrequency() { - short newFrequency; - int cycles = 0; - - do { - newFrequency = (short) this.frequencyGenerator.nextInt(1 << 16); - cycles++; - } while (newFrequency == 0 || this.inputs.containsKey(newFrequency)); - - if (cycles > 25) { - AELog.debug("Generating a new P2P frequency '%1$d' took %2$d cycles", newFrequency, cycles); - } - - return newFrequency; - } - - public TunnelCollection getOutputs(final short freq, final Class c) { - final P2PTunnelPart in = this.inputs.get(freq); - - if (in == null) { - return NULL_COLLECTION; - } - - final TunnelCollection out = this.inputs.get(freq).getCollection(this.outputs.get(freq), c); - - if (out == null) { - return NULL_COLLECTION; - } - - return out; - } - - public P2PTunnelPart getInput(final short freq) { - return this.inputs.get(freq); - } -} diff --git a/src/unported/java/appeng/parts/automation/PlaneModelData.java b/src/unported/java/appeng/parts/automation/PlaneModelData.java deleted file mode 100644 index 8c2e071ac..000000000 --- a/src/unported/java/appeng/parts/automation/PlaneModelData.java +++ /dev/null @@ -1,17 +0,0 @@ -package appeng.parts.automation; - -import appeng.client.render.model.AEInternalModelData; - -public class PlaneModelData extends AEInternalModelData { - - private final PlaneConnections connections; - - public PlaneModelData(PlaneConnections connections) { - this.connections = connections; - } - - public PlaneConnections getConnections() { - return connections; - } - -} diff --git a/src/unported/java/appeng/parts/p2p/FEP2PTunnelPart.java b/src/unported/java/appeng/parts/p2p/FEP2PTunnelPart.java index 05ad2e87f..4c1e152b6 100644 --- a/src/unported/java/appeng/parts/p2p/FEP2PTunnelPart.java +++ b/src/unported/java/appeng/parts/p2p/FEP2PTunnelPart.java @@ -31,7 +31,7 @@ import net.minecraftforge.energy.IEnergyStorage; import appeng.api.config.PowerUnits; import appeng.api.parts.IPartModel; -import appeng.capabilities.Capabilities; +import appeng.attributes.MEAttributes; import appeng.items.parts.PartModels; import appeng.me.GridAccessException; @@ -67,7 +67,7 @@ public class FEP2PTunnelPart extends P2PTunnelPart { final BlockEntity te = self.getWorld().getBlockEntity(self.getPos().offset(this.getSide().getFacing())); if (te != null) { - energyStorageOpt = te.getCapability(Capabilities.FORGE_ENERGY, + energyStorageOpt = te.getCapability(MEAttributes.FORGE_ENERGY, this.getSide().getOpposite().getFacing()); } } @@ -78,7 +78,7 @@ public class FEP2PTunnelPart extends P2PTunnelPart { @Nullable @Override public LazyOptional getCapability(@Nonnull Capability capability) { - if (capability == Capabilities.FORGE_ENERGY) { + if (capability == MEAttributes.FORGE_ENERGY) { if (this.isOutput()) { return (LazyOptional) LazyOptional.of(() -> this.outputHandler); } diff --git a/src/unported/java/appeng/server/ServerHelper.java b/src/unported/java/appeng/server/ServerHelper.java index 96b4200f1..4ee24aa38 100644 --- a/src/unported/java/appeng/server/ServerHelper.java +++ b/src/unported/java/appeng/server/ServerHelper.java @@ -23,13 +23,9 @@ import java.util.List; import java.util.Random; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.util.InputMappings; import net.minecraft.client.util.InputUtil; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundTag; import net.minecraft.server.MinecraftServer; import net.minecraft.util.hit.HitResult; import net.minecraft.world.World; @@ -42,7 +38,6 @@ import appeng.client.EffectType; import appeng.core.CommonHelper; import appeng.core.sync.BasePacket; import appeng.core.sync.network.NetworkHandler; -import appeng.items.tools.NetworkToolItem; import appeng.util.Platform; public class ServerHelper extends CommonHelper { diff --git a/src/unported/java/appeng/server/subcommands/TestMeteoritesCommand.java b/src/unported/java/appeng/server/subcommands/TestMeteoritesCommand.java index d43a82c71..580cfad10 100644 --- a/src/unported/java/appeng/server/subcommands/TestMeteoritesCommand.java +++ b/src/unported/java/appeng/server/subcommands/TestMeteoritesCommand.java @@ -43,7 +43,7 @@ import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkStatus; -import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.feature.structure.StructureStart; import net.minecraft.server.world.ServerWorld; @@ -92,7 +92,7 @@ public class TestMeteoritesCommand implements ISubCommand { ChunkPos center = new ChunkPos(centerBlock); - ChunkGenerator generator = world.getChunkManager().getChunkGenerator(); + ChunkGenerator generator = world.getChunkManager().getChunkGenerator(); // Find all meteorites in the given rectangle List found = new ArrayList<>(); diff --git a/src/unported/java/appeng/spatial/StorageCellBiome.java b/src/unported/java/appeng/spatial/StorageCellBiome.java index 3cb646b90..ac3cf0b01 100644 --- a/src/unported/java/appeng/spatial/StorageCellBiome.java +++ b/src/unported/java/appeng/spatial/StorageCellBiome.java @@ -23,9 +23,9 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldAccess; import net.minecraft.world.WorldView; import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.GenerationSettings; -import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -67,7 +67,7 @@ public class StorageCellBiome extends Biome { } @Override - public void decorate(GenerationStage.Decoration stage, ChunkGenerator chunkGenerator, + public void decorate(GenerationStep.Decoration stage, ChunkGenerator chunkGenerator, WorldAccess worldIn, long seed, SharedSeedRandom random, BlockPos pos) { // Nothing should ever generate here... } diff --git a/src/unported/java/appeng/spatial/StorageCellDimension.java b/src/unported/java/appeng/spatial/StorageCellDimension.java index f74b2ba7a..0bb4b31a1 100644 --- a/src/unported/java/appeng/spatial/StorageCellDimension.java +++ b/src/unported/java/appeng/spatial/StorageCellDimension.java @@ -27,7 +27,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.dimension.DimensionType; -import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.chunk.ChunkGenerator; import net.fabricmc.api.EnvType; import net.minecraftforge.client.IRenderHandler; diff --git a/src/unported/java/appeng/spatial/StorageChunkGenerator.java b/src/unported/java/appeng/spatial/StorageChunkGenerator.java index c1c839803..6a2d93379 100644 --- a/src/unported/java/appeng/spatial/StorageChunkGenerator.java +++ b/src/unported/java/appeng/spatial/StorageChunkGenerator.java @@ -26,7 +26,7 @@ import net.minecraft.world.biome.provider.BiomeProvider; import net.minecraft.world.biome.provider.SingleBiomeProvider; import net.minecraft.world.biome.provider.SingleBiomeProviderSettings; import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.GenerationSettings; import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.WorldGenRegion; diff --git a/src/unported/java/appeng/tile/networking/ControllerBlockEntity.java b/src/unported/java/appeng/tile/networking/ControllerBlockEntity.java deleted file mode 100644 index 8edb3c29d..000000000 --- a/src/unported/java/appeng/tile/networking/ControllerBlockEntity.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.tile.networking; - -import java.util.EnumSet; - -import net.minecraft.item.ItemStack; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import alexiil.mc.lib.attributes.item.FixedItemInv; -import alexiil.mc.lib.attributes.item.impl.EmptyFixedItemInv; - -import appeng.api.config.Actionable; -import appeng.api.networking.GridFlags; -import appeng.api.networking.energy.IEnergyGrid; -import appeng.api.networking.events.MENetworkControllerChange; -import appeng.api.networking.events.MENetworkEventSubscribe; -import appeng.api.networking.events.MENetworkPowerStatusChange; -import appeng.api.networking.events.MENetworkPowerStorage; -import appeng.api.networking.events.MENetworkPowerStorage.PowerEventType; -import appeng.api.networking.pathing.ControllerState; -import appeng.api.util.AECableType; -import appeng.api.util.AEPartLocation; -import appeng.block.networking.ControllerBlock; -import appeng.block.networking.ControllerBlock.ControllerBlockState; -import appeng.me.GridAccessException; -import appeng.tile.grid.AENetworkPowerBlockEntity; -import appeng.util.inv.InvOperation; - -public class ControllerBlockEntity extends AENetworkPowerBlockEntity { - private boolean isValid = false; - - public ControllerBlockEntity(BlockEntityType tileEntityTypeIn) { - super(tileEntityTypeIn); - this.setInternalMaxPower(8000); - this.setInternalPublicPowerStorage(true); - this.getProxy().setIdlePowerUsage(3); - this.getProxy().setFlags(GridFlags.CANNOT_CARRY, GridFlags.DENSE_CAPACITY); - } - - @Override - public AECableType getCableConnectionType(final AEPartLocation dir) { - return AECableType.DENSE_SMART; - } - - @Override - public void onReady() { - this.onNeighborChange(true); - super.onReady(); - } - - public void onNeighborChange(final boolean force) { - final boolean xx = this.checkController(this.pos.offset(Direction.EAST)) - && this.checkController(this.pos.offset(Direction.WEST)); - final boolean yy = this.checkController(this.pos.offset(Direction.UP)) - && this.checkController(this.pos.offset(Direction.DOWN)); - final boolean zz = this.checkController(this.pos.offset(Direction.NORTH)) - && this.checkController(this.pos.offset(Direction.SOUTH)); - - // int meta = world.getBlockMetadata( xCoord, yCoord, zCoord ); - // boolean hasPower = meta > 0; - // boolean isConflict = meta == 2; - - final boolean oldValid = this.isValid; - - this.isValid = (xx && !yy && !zz) || (!xx && yy && !zz) || (!xx && !yy && zz) - || ((xx ? 1 : 0) + (yy ? 1 : 0) + (zz ? 1 : 0) <= 1); - - if (oldValid != this.isValid || force) { - if (this.isValid) { - this.getProxy().setValidSides(EnumSet.allOf(Direction.class)); - } else { - this.getProxy().setValidSides(EnumSet.noneOf(Direction.class)); - } - - this.updateMeta(); - } - - } - - private void updateMeta() { - if (!this.getProxy().isReady()) { - return; - } - - ControllerBlockState metaState = ControllerBlockState.offline; - - try { - if (this.getProxy().getEnergy().isNetworkPowered()) { - metaState = ControllerBlockState.online; - - if (this.getProxy().getPath().getControllerState() == ControllerState.CONTROLLER_CONFLICT) { - metaState = ControllerBlockState.conflicted; - } - } - } catch (final GridAccessException e) { - metaState = ControllerBlockState.offline; - } - - if (this.checkController(this.pos) - && this.world.getBlockState(this.pos).get(ControllerBlock.CONTROLLER_STATE) != metaState) { - this.world.setBlockState(this.pos, - this.world.getBlockState(this.pos).with(ControllerBlock.CONTROLLER_STATE, metaState)); - } - - } - - @Override - protected double getFunnelPowerDemand(final double maxReceived) { - try { - final IEnergyGrid grid = this.getProxy().getEnergy(); - - return grid.getEnergyDemand(maxReceived); - } catch (final GridAccessException e) { - // no grid? use local... - return super.getFunnelPowerDemand(maxReceived); - } - } - - @Override - protected double funnelPowerIntoStorage(final double power, final Actionable mode) { - try { - final IEnergyGrid grid = this.getProxy().getEnergy(); - final double leftOver = grid.injectPower(power, mode); - - return leftOver; - } catch (final GridAccessException e) { - // no grid? use local... - return super.funnelPowerIntoStorage(power, mode); - } - } - - @Override - protected void PowerEvent(final PowerEventType x) { - try { - this.getProxy().getGrid().postEvent(new MENetworkPowerStorage(this, x)); - } catch (final GridAccessException e) { - // not ready! - } - } - - @MENetworkEventSubscribe - public void onControllerChange(final MENetworkControllerChange status) { - this.updateMeta(); - } - - @MENetworkEventSubscribe - public void onPowerChange(final MENetworkPowerStatusChange status) { - this.updateMeta(); - } - - @Override - public FixedItemInv getInternalInventory() { - return EmptyFixedItemInv.INSTANCE; - } - - @Override - public void onChangeInventory(final FixedItemInv inv, final int slot, final InvOperation mc, - final ItemStack removed, final ItemStack added) { - } - - /** - * Check for a controller at this coordinates as well as is it loaded. - * - * @return true if there is a loaded controller - */ - private boolean checkController(final BlockPos pos) { - if (this.world.getChunkManager().isChunkLoaded(new ChunkPos(pos.getX() >> 4, pos.getZ() >> 4))) { - return this.world.getBlockEntity(pos) instanceof ControllerBlockEntity; - } - - return false; - } -} diff --git a/src/unported/java/appeng/worldgen/ChargedQuartzOreFeature.java b/src/unported/java/appeng/worldgen/ChargedQuartzOreFeature.java index 81c0b74e5..0713d852e 100644 --- a/src/unported/java/appeng/worldgen/ChargedQuartzOreFeature.java +++ b/src/unported/java/appeng/worldgen/ChargedQuartzOreFeature.java @@ -9,7 +9,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.WorldAccess; import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.GenerationSettings; import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.feature.Feature; @@ -36,7 +36,7 @@ public class ChargedQuartzOreFeature extends Feature { @Override public boolean place(WorldAccess worldIn, ChunkGenerator generator, Random rand, - BlockPos pos, ChargedQuartzOreConfig config) { + BlockPos pos, ChargedQuartzOreConfig config) { ChunkPos chunkPos = new ChunkPos(pos); BlockPos.Mutable bpos = new BlockPos.Mutable(); diff --git a/src/unported/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java b/src/unported/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java index dd27a7143..f57c5a26e 100644 --- a/src/unported/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java +++ b/src/unported/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java @@ -6,7 +6,7 @@ import java.util.Collection; import javax.annotation.Nullable; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.INBT; +import net.minecraft.nbt.Tag; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; @@ -49,7 +49,7 @@ public final class MeteoriteSpawnData { chunkX /= 16; chunkZ /= 16; String key = chunkX + "," + chunkZ; - INBT inbt = data.spawns.get(key); + Tag inbt = data.spawns.get(key); if (!(inbt instanceof CompoundTag)) { if (create) { inbt = new CompoundTag(); diff --git a/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructure.java b/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructure.java index e092b851f..1f1727285 100644 --- a/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructure.java +++ b/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructure.java @@ -7,30 +7,32 @@ import com.mojang.datafixers.Dynamic; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.BiomeManager; -import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.EndChunkGenerator; import net.minecraft.world.gen.NetherChunkGenerator; -import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import net.minecraft.world.gen.feature.StructureFeature; import net.minecraft.world.gen.feature.structure.ScatteredStructure; import net.minecraft.world.gen.feature.structure.Structure; import appeng.core.AELog; import appeng.core.AppEng; -public class MeteoriteStructure extends ScatteredStructure { +public class MeteoriteStructure extends StructureFeature { - public static final Structure INSTANCE = new MeteoriteStructure(NoFeatureConfig::deserialize); + public static final StructureFeature INSTANCE = new MeteoriteStructure(DefaultFeatureConfig::deserialize); static { INSTANCE.setRegistryName(AppEng.MOD_ID, "meteorite"); } - public MeteoriteStructure(Function, ? extends NoFeatureConfig> configFactoryIn) { + public MeteoriteStructure(Function, ? extends DefaultFeatureConfig> configFactoryIn) { super(configFactoryIn); } @Override - public boolean canBeGenerated(BiomeManager biomeManagerIn, ChunkGenerator generator, Random randIn, int chunkX, + public boolean canBeGenerated(BiomeManager biomeManagerIn, ChunkGenerator generator, Random randIn, int chunkX, int chunkZ, Biome biomeIn) { if (super.canBeGenerated(biomeManagerIn, generator, randIn, chunkX, chunkZ, biomeIn)) { // In case the biome blacklist fails, we still double-check here that we're not @@ -62,7 +64,7 @@ public class MeteoriteStructure extends ScatteredStructure { } @Override - public Structure.IStartFactory getStartFactory() { + public StructureStartFactory getStructureStartFactory() { return MeteoriteStructureStart::new; } diff --git a/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java b/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java index 76990c742..8ba1ffa51 100644 --- a/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java +++ b/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java @@ -24,10 +24,10 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.MutableBoundingBox; import net.minecraft.world.WorldAccess; -import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.structure.IStructurePieceType; import net.minecraft.world.gen.feature.structure.StructurePiece; -import net.minecraft.world.gen.feature.template.TemplateManager; +import net.minecraft.structure.StructureManager; import appeng.core.worlddata.WorldData; import appeng.worldgen.meteorite.fallout.FalloutMode; @@ -53,7 +53,7 @@ public class MeteoriteStructurePiece extends StructurePiece { chunkPos.getZStart() - range, chunkPos.getXEnd() + range, center.getY(), chunkPos.getZEnd() + range); } - public MeteoriteStructurePiece(TemplateManager templateManager, CompoundTag tag) { + public MeteoriteStructurePiece(StructureManager templateManager, CompoundTag tag) { super(TYPE, tag); BlockPos center = BlockPos.fromLong(tag.getLong(Constants.TAG_POS)); @@ -85,8 +85,8 @@ public class MeteoriteStructurePiece extends StructurePiece { } @Override - public boolean create(WorldAccess world, ChunkGenerator chunkGeneratorIn, Random rand, MutableBoundingBox bounds, - ChunkPos chunkPos) { + public boolean create(WorldAccess world, ChunkGenerator chunkGeneratorIn, Random rand, MutableBoundingBox bounds, + ChunkPos chunkPos) { MeteoritePlacer placer = new MeteoritePlacer(world, settings, bounds); placer.place(); diff --git a/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructureStart.java b/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructureStart.java index 01489c073..21a28e5d8 100644 --- a/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructureStart.java +++ b/src/unported/java/appeng/worldgen/meteorite/MeteoriteStructureStart.java @@ -7,6 +7,7 @@ import com.google.common.math.StatsAccumulator; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.structure.StructureStart; import net.minecraft.tag.BlockTags; import net.minecraft.tag.Tag; import net.minecraft.util.Identifier; @@ -15,16 +16,17 @@ import net.minecraft.util.math.MutableBoundingBox; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome.Category; import net.minecraft.world.biome.Biome.TempCategory; -import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.Heightmap.Type; +import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.structure.Structure; import net.minecraft.world.gen.feature.structure.StructureStart; -import net.minecraft.world.gen.feature.template.TemplateManager; +import net.minecraft.structure.StructureManager; import appeng.worldgen.meteorite.fallout.FalloutMode; -public class MeteoriteStructureStart extends StructureStart { +public class MeteoriteStructureStart extends StructureStart { private final Tag sandTag = BlockTags.getContainer().getOrCreate(new Identifier("minecraft:sand")); private final Tag terracottaTag = BlockTags.getContainer() @@ -35,8 +37,9 @@ public class MeteoriteStructureStart extends StructureStart { super(p_i225815_1_, p_i225815_2_, p_i225815_3_, p_i225815_4_, p_i225815_5_, p_i225815_6_); } - public void init(ChunkGenerator generator, TemplateManager templateManagerIn, int chunkX, int chunkZ, - Biome biome) { + @Override + public void init(ChunkGenerator generator, StructureManager templateManagerIn, int chunkX, int chunkZ, + Biome biome, DefaultFeatureConfig config) { final int centerX = chunkX * 16 + this.rand.nextInt(16); final int centerZ = chunkZ * 16 + this.rand.nextInt(16); final float meteoriteRadius = (this.rand.nextFloat() * 6.0f) + 2; @@ -87,7 +90,7 @@ public class MeteoriteStructureStart extends StructureStart { * * @return true, if it found a single block of water */ - private boolean locateWaterAroundTheCrater(ChunkGenerator generator, BlockPos pos, float radius) { + private boolean locateWaterAroundTheCrater(ChunkGenerator generator, BlockPos pos, float radius) { final int seaLevel = generator.getSeaLevel(); final int maxY = seaLevel - 1; BlockPos.Mutable blockPos = new BlockPos.Mutable();