diff --git a/api/src/main/java/appeng/api/implementations/items/ISpatialStorageCell.java b/api/src/main/java/appeng/api/implementations/items/ISpatialStorageCell.java index afbca3f53..803833e11 100644 --- a/api/src/main/java/appeng/api/implementations/items/ISpatialStorageCell.java +++ b/api/src/main/java/appeng/api/implementations/items/ISpatialStorageCell.java @@ -25,6 +25,7 @@ package appeng.api.implementations.items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; import net.minecraft.world.dimension.DimensionType; @@ -70,5 +71,5 @@ public interface ISpatialStorageCell { * * @return result of transition */ - TransitionResult doSpatialTransition(ItemStack is, World w, WorldCoord min, WorldCoord max, int playerId); + TransitionResult doSpatialTransition(ItemStack is, ServerWorld w, WorldCoord min, WorldCoord max, int playerId); } \ No newline at end of file diff --git a/api/src/main/java/appeng/api/storage/data/IAEFluidStack.java b/api/src/main/java/appeng/api/storage/data/IAEFluidStack.java index d03a725c2..5d4d36884 100644 --- a/api/src/main/java/appeng/api/storage/data/IAEFluidStack.java +++ b/api/src/main/java/appeng/api/storage/data/IAEFluidStack.java @@ -23,8 +23,8 @@ package appeng.api.storage.data; +import alexiil.mc.lib.attributes.fluid.volume.FluidKey; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; -import net.minecraft.fluid.Fluid; /** * An alternate version of FluidStack for AE to keep tabs on things easier, and @@ -64,9 +64,9 @@ public interface IAEFluidStack extends IAEStack { IAEFluidStack copy(); /** - * quick way to get access to the Forge Fluid Definition. + * quick way to get access to the libblockaccess Fluid Definition. * * @return fluid definition */ - Fluid getFluid(); + FluidKey getFluid(); } diff --git a/build.gradle b/build.gradle index 6d013fecb..9c278320e 100644 --- a/build.gradle +++ b/build.gradle @@ -58,6 +58,7 @@ allprojects { } minecraft { + accessWidener "${project.rootDir}/core/src/main/resources/appliedenergistics2.accesswidener" } dependencies { diff --git a/core/build.gradle b/core/build.gradle index 6ceb114ff..2b850c1cf 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,4 +1,3 @@ - archivesBaseName = artifact_basename + "-core" dependencies { diff --git a/core/src/main/java/appeng/block/AEBaseBlockItem.java b/core/src/main/java/appeng/block/AEBaseBlockItem.java index 20162e750..e169ded01 100644 --- a/core/src/main/java/appeng/block/AEBaseBlockItem.java +++ b/core/src/main/java/appeng/block/AEBaseBlockItem.java @@ -37,7 +37,6 @@ import appeng.api.util.IOrientable; import appeng.api.util.IOrientableBlock; import appeng.block.misc.LightDetectorBlock; import appeng.block.misc.SkyCompassBlock; -import appeng.block.networking.WirelessBlock; import appeng.me.helpers.IGridProxyable; import appeng.tile.AEBaseBlockEntity; @@ -85,7 +84,7 @@ public class AEBaseBlockItem extends BlockItem { } else { forward = Direction.UP; } - } else if (this.blockType instanceof WirelessBlock || this.blockType instanceof SkyCompassBlock) { + } else if (/* FIXME FABRIC this.blockType instanceof WirelessBlock || */ this.blockType instanceof SkyCompassBlock) { forward = side; if (forward == Direction.UP || forward == Direction.DOWN) { up = Direction.SOUTH; @@ -141,7 +140,7 @@ public class AEBaseBlockItem extends BlockItem { } if (tile instanceof IGridProxyable) { - ((IGridProxyable) tile).getProxy().setOwner(player); + // FIXME FABRIC ((IGridProxyable) tile).getProxy().setOwner(player); } tile.onPlacement(context); diff --git a/core/src/main/java/appeng/block/AEBaseTileBlock.java b/core/src/main/java/appeng/block/AEBaseTileBlock.java index 6b69d8523..b5cf49687 100644 --- a/core/src/main/java/appeng/block/AEBaseTileBlock.java +++ b/core/src/main/java/appeng/block/AEBaseTileBlock.java @@ -25,6 +25,8 @@ import java.util.function.Supplier; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import alexiil.mc.lib.attributes.AttributeList; +import alexiil.mc.lib.attributes.AttributeProvider; import alexiil.mc.lib.attributes.item.FixedItemInv; import com.google.common.collect.Lists; @@ -49,15 +51,13 @@ import net.minecraft.world.World; import appeng.api.implementations.items.IMemoryCard; import appeng.api.implementations.items.MemoryCardMessages; import appeng.api.util.IOrientable; -import appeng.block.networking.CableBusBlock; import appeng.tile.AEBaseInvBlockEntity; import appeng.tile.AEBaseBlockEntity; -import appeng.tile.networking.CableBusBlockEntity; import appeng.tile.storage.SkyChestBlockEntity; import appeng.util.Platform; import appeng.util.SettingsFrom; -public abstract class AEBaseTileBlock extends AEBaseBlock implements BlockEntityProvider { +public abstract class AEBaseTileBlock extends AEBaseBlock implements BlockEntityProvider, AttributeProvider { @Nonnull private Class blockEntityClass; @@ -205,7 +205,7 @@ public abstract class AEBaseTileBlock extends AEBas return ActionResult.FAIL; } - if (tile instanceof CableBusBlockEntity || tile instanceof SkyChestBlockEntity) { + if (/* FIXME FABRIC tile instanceof CableBusBlockEntity || */ tile instanceof SkyChestBlockEntity) { return ActionResult.FAIL; } @@ -232,7 +232,7 @@ public abstract class AEBaseTileBlock extends AEBas return ActionResult.FAIL; } - if (heldItem.getItem() instanceof IMemoryCard && !(this instanceof CableBusBlock)) { + if (heldItem.getItem() instanceof IMemoryCard /* FIXME FABRIC && !(this instanceof CableBusBlock)*/) { final IMemoryCard memoryCard = (IMemoryCard) heldItem.getItem(); final AEBaseBlockEntity tileEntity = this.getBlockEntity(world, pos); @@ -299,4 +299,13 @@ public abstract class AEBaseTileBlock extends AEBas return currentState; } + // Gives our tile entity a chance to provide it's attributes + @Override + public void addAllAttributes(World world, BlockPos pos, BlockState state, AttributeList to) { + T te = getBlockEntity(world, pos); + if (te != null) { + te.addAllAttributes(world, pos, state, to); + } + } + } diff --git a/src/main/java/appeng/block/storage/SkyChestBlock.java b/core/src/main/java/appeng/block/storage/SkyChestBlock.java similarity index 92% rename from src/main/java/appeng/block/storage/SkyChestBlock.java rename to core/src/main/java/appeng/block/storage/SkyChestBlock.java index 8cb5ed06e..726946b20 100644 --- a/src/main/java/appeng/block/storage/SkyChestBlock.java +++ b/core/src/main/java/appeng/block/storage/SkyChestBlock.java @@ -37,9 +37,6 @@ import net.minecraft.world.BlockView; import net.minecraft.world.World; import appeng.block.AEBaseTileBlock; -import appeng.container.ContainerLocator; -import appeng.container.ContainerOpener; -import appeng.container.implementations.SkyChestContainer; import appeng.tile.storage.SkyChestBlockEntity; import appeng.util.Platform; @@ -66,7 +63,7 @@ public class SkyChestBlock extends AEBaseTileBlock { } @Override - public boolean propagatesSkylightDown(BlockState state, BlockView reader, BlockPos pos) { + public boolean isTranslucent(BlockState state, BlockView reader, BlockPos pos) { return true; } @@ -79,7 +76,8 @@ public class SkyChestBlock extends AEBaseTileBlock { return ActionResult.PASS; } - ContainerOpener.openContainer(SkyChestContainer.TYPE, player, ContainerLocator.forTileEntity(tile)); + throw new IllegalStateException(); + // FIXME FABRIC ContainerOpener.openContainer(SkyChestContainer.TYPE, player, ContainerLocator.forTileEntity(tile)); } return ActionResult.SUCCESS; diff --git a/core/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java b/core/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java index 335511e7d..1e2f21571 100644 --- a/core/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java +++ b/core/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java @@ -24,7 +24,6 @@ import appeng.block.AEBaseBlock; import appeng.block.AEBaseBlockItem; import appeng.block.AEBaseTileBlock; import appeng.bootstrap.definitions.TileEntityDefinition; -import appeng.core.AEItemGroup; import appeng.core.AppEng; import appeng.core.CreativeTab; import appeng.core.features.BlockDefinition; @@ -171,8 +170,8 @@ class BlockDefinitionBuilder implements IBlockBuilder { definition = (T) new BlockDefinition(this.id.getPath(), block, item, features); } - if (itemGroup instanceof AEItemGroup) { - ((AEItemGroup) itemGroup).add(definition); + if (itemGroup == CreativeTab.INSTANCE) { + CreativeTab.add(definition); } return definition; diff --git a/core/src/main/java/appeng/bootstrap/BlockRendering.java b/core/src/main/java/appeng/bootstrap/BlockRendering.java index 17125a5b0..4632ee01b 100644 --- a/core/src/main/java/appeng/bootstrap/BlockRendering.java +++ b/core/src/main/java/appeng/bootstrap/BlockRendering.java @@ -26,14 +26,11 @@ import net.minecraft.block.Block; import net.minecraft.client.color.block.BlockColorProvider; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.ModelBakeSettings; import net.minecraft.util.Identifier; import appeng.block.AEBaseTileBlock; import appeng.bootstrap.components.BlockColorComponent; import appeng.bootstrap.components.RenderTypeComponent; -import appeng.client.render.model.AutoRotatingBakedModel; -import net.minecraft.util.registry.Registry; class BlockRendering implements IBlockRendering { @@ -79,7 +76,7 @@ class BlockRendering implements IBlockRendering { // This is a default rotating model if the base-block uses an AE block entity // which exposes UP/FRONT as // extended props - factory.addModelOverride(id.getPath(), (l, m) -> new AutoRotatingBakedModel(m)); + // FIXME FABRIC factory.addModelOverride(id.getPath(), (l, m) -> new AutoRotatingBakedModel(m)); } if (this.blockColor != null) { diff --git a/core/src/main/java/appeng/bootstrap/EntityBuilder.java b/core/src/main/java/appeng/bootstrap/EntityBuilder.java index 33a602bbd..1c8be9918 100644 --- a/core/src/main/java/appeng/bootstrap/EntityBuilder.java +++ b/core/src/main/java/appeng/bootstrap/EntityBuilder.java @@ -1,6 +1,8 @@ package appeng.bootstrap; import appeng.api.features.AEFeature; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; +import net.fabricmc.fabric.impl.object.builder.FabricEntityType; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; @@ -19,7 +21,7 @@ public class EntityBuilder { private final String id; - private final EntityType.Builder builder; + private final FabricEntityTypeBuilder builder; private final EnumSet features = EnumSet.noneOf(AEFeature.class); @@ -27,7 +29,7 @@ public class EntityBuilder { SpawnGroup classification) { this.factory = factory; this.id = id; - this.builder = EntityType.Builder.create(entityFactory, classification); + this.builder = FabricEntityTypeBuilder.create(classification, entityFactory); } public EntityBuilder features(AEFeature... features) { @@ -41,14 +43,14 @@ public class EntityBuilder { return this; } - public EntityBuilder customize(Consumer> function) { + public EntityBuilder customize(Consumer> function) { function.accept(builder); return this; } public EntityType build() { + EntityType entityType = builder.build(); String fullId = "appliedenergistics2:" + this.id; - EntityType entityType = builder.build(fullId); Registry.register(Registry.ENTITY_TYPE, fullId, entityType); return entityType; } diff --git a/core/src/main/java/appeng/bootstrap/ItemDefinitionBuilder.java b/core/src/main/java/appeng/bootstrap/ItemDefinitionBuilder.java index 1fccbc2a7..50455683f 100644 --- a/core/src/main/java/appeng/bootstrap/ItemDefinitionBuilder.java +++ b/core/src/main/java/appeng/bootstrap/ItemDefinitionBuilder.java @@ -35,7 +35,6 @@ import net.fabricmc.api.Environment; import appeng.api.features.AEFeature; import appeng.bootstrap.components.IInitComponent; -import appeng.core.AEItemGroup; import appeng.core.AppEng; import appeng.core.CreativeTab; import appeng.core.features.ItemDefinition; @@ -149,8 +148,8 @@ class ItemDefinitionBuilder implements IItemBuilder { this.itemRendering.apply(this.factory, item); } - if (itemGroup instanceof AEItemGroup) { - ((AEItemGroup) itemGroup).add(definition); + if (itemGroup == CreativeTab.INSTANCE) { + CreativeTab.add(definition); } return definition; diff --git a/src/main/java/appeng/client/ActionKey.java b/core/src/main/java/appeng/client/ActionKey.java similarity index 100% rename from src/main/java/appeng/client/ActionKey.java rename to core/src/main/java/appeng/client/ActionKey.java diff --git a/src/main/java/appeng/client/EffectType.java b/core/src/main/java/appeng/client/EffectType.java similarity index 95% rename from src/main/java/appeng/client/EffectType.java rename to core/src/main/java/appeng/client/EffectType.java index 0a47d4812..d74b26a27 100644 --- a/src/main/java/appeng/client/EffectType.java +++ b/core/src/main/java/appeng/client/EffectType.java @@ -19,5 +19,5 @@ package appeng.client; public enum EffectType { - Energy, Lightning, Vibrant, LightningArc + Energy, Vibrant, LightningArc } diff --git a/core/src/main/java/appeng/client/render/effects/ChargedOreFX.java b/core/src/main/java/appeng/client/render/effects/ChargedOreFX.java index 96c050bf0..233711754 100644 --- a/core/src/main/java/appeng/client/render/effects/ChargedOreFX.java +++ b/core/src/main/java/appeng/client/render/effects/ChargedOreFX.java @@ -19,28 +19,28 @@ package appeng.client.render.effects; import net.fabricmc.api.Environment; -import net.minecraft.client.particle.IAnimatedSprite; -import net.minecraft.client.particle.IParticleFactory; +import net.minecraft.client.particle.ParticleFactory; +import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.RedstoneParticle; +import net.minecraft.client.particle.RedDustParticle; +import net.minecraft.client.world.ClientWorld; import net.minecraft.particle.DefaultParticleType; -import net.minecraft.particles.RedstoneParticleData; -import net.minecraft.world.World; +import net.minecraft.particle.DustParticleEffect; import net.fabricmc.api.EnvType; @Environment(EnvType.CLIENT) -public class ChargedOreFX extends RedstoneParticle { +public class ChargedOreFX extends RedDustParticle { - private static final RedstoneParticleData PARTICLE_DATA = new RedstoneParticleData(0.21f, 0.61f, 1.0f, 1.0f); + private static final DustParticleEffect PARTICLE_DATA = new DustParticleEffect(0.21f, 0.61f, 1.0f, 1.0f); - private ChargedOreFX(World worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed, - IAnimatedSprite spriteSet) { - super(worldIn, x, y, z, xSpeed, ySpeed, zSpeed, PARTICLE_DATA, spriteSet); + private ChargedOreFX(ClientWorld world, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed, + SpriteProvider spriteSet) { + super(world, x, y, z, xSpeed, ySpeed, zSpeed, PARTICLE_DATA, spriteSet); } @Override - public int getBrightnessForRender(final float par1) { - int j1 = super.getBrightnessForRender(par1); + public int getColorMultiplier(final float par1) { + int j1 = super.getColorMultiplier(par1); j1 = Math.max(j1 >> 20, j1 >> 4); j1 += 3; if (j1 > 15) { @@ -50,17 +50,17 @@ public class ChargedOreFX extends RedstoneParticle { } @Environment(EnvType.CLIENT) - public static class Factory implements IParticleFactory { - private final IAnimatedSprite spriteSet; + public static class Factory implements ParticleFactory { + private final SpriteProvider spriteSet; - public Factory(IAnimatedSprite p_i50477_1_) { + public Factory(SpriteProvider p_i50477_1_) { this.spriteSet = p_i50477_1_; } @Override - public Particle makeParticle(DefaultParticleType typeIn, World worldIn, double x, double y, double z, - double xSpeed, double ySpeed, double zSpeed) { - return new ChargedOreFX(worldIn, x, y, z, xSpeed, ySpeed, zSpeed, this.spriteSet); + public Particle createParticle(DefaultParticleType effect, ClientWorld world, double x, double y, double z, + double xSpeed, double ySpeed, double zSpeed) { + return new ChargedOreFX(world, x, y, z, xSpeed, ySpeed, zSpeed, this.spriteSet); } } } diff --git a/core/src/main/java/appeng/client/render/effects/CraftingFx.java b/core/src/main/java/appeng/client/render/effects/CraftingFx.java index 76a47a117..b70fe75be 100644 --- a/core/src/main/java/appeng/client/render/effects/CraftingFx.java +++ b/core/src/main/java/appeng/client/render/effects/CraftingFx.java @@ -18,20 +18,17 @@ package appeng.client.render.effects; -import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.minecraft.client.render.VertexConsumer; import net.fabricmc.api.EnvType; -import net.minecraft.client.particle.IAnimatedSprite; -import net.minecraft.client.particle.IParticleFactory; -import net.minecraft.client.particle.IParticleRenderType; -import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.SpriteBillboardParticle; -import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.particle.*; +import net.minecraft.client.particle.ParticleTextureSheet; +import net.minecraft.client.render.Camera; import net.minecraft.client.util.math.Vector3f; +import net.minecraft.client.world.ClientWorld; import net.minecraft.particle.DefaultParticleType; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; import net.fabricmc.api.Environment; @Environment(EnvType.CLIENT) @@ -43,42 +40,44 @@ public class CraftingFx extends SpriteBillboardParticle { private final float offsetY; private final float offsetZ; - public CraftingFx(final World par1World, final double x, final double y, final double z, - final IAnimatedSprite sprite) { - super(par1World, x, y, z); + public CraftingFx(ClientWorld world, final double x, final double y, final double z, + final SpriteProvider sprite) { + super(world, x, y, z); // Pick a random normal, offset it by 0.35 and use that as the particle origin - Vector3f off = new Vector3f(rand.nextFloat() - 0.5f, rand.nextFloat() - 0.5f, rand.nextFloat() - 0.5f); + Vector3f off = new Vector3f(random.nextFloat() - 0.5f, random.nextFloat() - 0.5f, random.nextFloat() - 0.5f); off.normalize(); - off.mul(0.35f); + off.scale(0.35f); offsetX = off.getX(); offsetY = off.getY(); offsetZ = off.getZ(); - this.particleGravity = 0; - this.particleBlue = 1; - this.particleGreen = 0.9f; - this.particleRed = 1; - this.selectSpriteRandomly(sprite); + this.gravityStrength = 0; + this.colorBlue = 1; + this.colorGreen = 0.9f; + this.colorRed = 1; + this.setSprite(sprite); this.maxAge /= 1.2; - this.canCollide = false; // we're INSIDE the block anyway + this.collidesWithWorld = false; // we're INSIDE the block anyway } + + @Override - public void renderParticle(IVertexBuilder buffer, ActiveRenderInfo renderInfo, float partialTicks) { + public void buildGeometry(VertexConsumer buffer, Camera camera, float partialTicks) { float f = (this.age + partialTicks) / this.maxAge; - float offX = (float) posX + MathHelper.lerp(f, offsetX, 0); - float offY = (float) posY + MathHelper.lerp(f, offsetY, 0); - float offZ = (float) posZ + MathHelper.lerp(f, offsetZ, 0); + float offX = (float) x + MathHelper.lerp(f, offsetX, 0); + float offY = (float) y + MathHelper.lerp(f, offsetY, 0); + float offZ = (float) z + MathHelper.lerp(f, offsetZ, 0); float alpha = MathHelper.lerp(easeOutCirc(f), 1.3f, 0.1f); float scale = MathHelper.lerp(easeOutCirc(f), 0.13f, 0.0f); // I believe this particle is same as breaking particle, but should not exit the // original block it was // spawned in (which is encased in glass) - Vec3d vec3d = renderInfo.getProjectedView(); + Vec3d vec3d = camera.getPos(); offX -= vec3d.x; offY -= vec3d.y; offZ -= vec3d.z; @@ -88,8 +87,8 @@ public class CraftingFx extends SpriteBillboardParticle { for (int i = 0; i < 4; ++i) { Vector3f vector3f = avector3f[i]; - vector3f.transform(renderInfo.getRotation()); - vector3f.mul(scale); + vector3f.rotate(camera.getRotation()); + vector3f.scale(scale); vector3f.add(offX, offY, offZ); } @@ -98,14 +97,14 @@ public class CraftingFx extends SpriteBillboardParticle { float minV = this.getMinV(); float maxV = this.getMaxV(); int j = 15728880; // full brightness - buffer.pos(avector3f[0].getX(), avector3f[0].getY(), avector3f[0].getZ()).tex(maxU, maxV) - .color(this.particleRed, this.particleGreen, this.particleBlue, alpha).lightmap(j).endVertex(); - buffer.pos(avector3f[1].getX(), avector3f[1].getY(), avector3f[1].getZ()).tex(maxU, minV) - .color(this.particleRed, this.particleGreen, this.particleBlue, alpha).lightmap(j).endVertex(); - buffer.pos(avector3f[2].getX(), avector3f[2].getY(), avector3f[2].getZ()).tex(minU, minV) - .color(this.particleRed, this.particleGreen, this.particleBlue, alpha).lightmap(j).endVertex(); - buffer.pos(avector3f[3].getX(), avector3f[3].getY(), avector3f[3].getZ()).tex(minU, maxV) - .color(this.particleRed, this.particleGreen, this.particleBlue, alpha).lightmap(j).endVertex(); + buffer.vertex(avector3f[0].getX(), avector3f[0].getY(), avector3f[0].getZ()).texture(maxU, maxV) + .color(this.colorRed, this.colorGreen, this.colorBlue, alpha).light(j).next(); + buffer.vertex(avector3f[1].getX(), avector3f[1].getY(), avector3f[1].getZ()).texture(maxU, minV) + .color(this.colorRed, this.colorGreen, this.colorBlue, alpha).light(j).next(); + buffer.vertex(avector3f[2].getX(), avector3f[2].getY(), avector3f[2].getZ()).texture(minU, minV) + .color(this.colorRed, this.colorGreen, this.colorBlue, alpha).light(j).next(); + buffer.vertex(avector3f[3].getX(), avector3f[3].getY(), avector3f[3].getZ()).texture(minU, maxV) + .color(this.colorRed, this.colorGreen, this.colorBlue, alpha).light(j).next(); } // https://easings.net/#easeOutCirc @@ -114,29 +113,29 @@ public class CraftingFx extends SpriteBillboardParticle { } @Override - public IParticleRenderType getRenderType() { - return IParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + public ParticleTextureSheet getType() { + return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; } @Override public void tick() { if (this.age++ >= this.maxAge) { - this.setExpired(); + this.markDead(); } } @Environment(EnvType.CLIENT) - public static class Factory implements IParticleFactory { - private final IAnimatedSprite spriteSet; + public static class Factory implements ParticleFactory { + private final SpriteProvider spriteSet; - public Factory(IAnimatedSprite p_i50477_1_) { + public Factory(SpriteProvider p_i50477_1_) { this.spriteSet = p_i50477_1_; } @Override - public Particle makeParticle(DefaultParticleType data, World worldIn, double x, double y, double z, double xSpeed, - double ySpeed, double zSpeed) { - return new CraftingFx(worldIn, x, y, z, spriteSet); + public Particle createParticle(DefaultParticleType effect, ClientWorld world, double x, double y, double z, double xSpeed, + double ySpeed, double zSpeed) { + return new CraftingFx(world, x, y, z, spriteSet); } } diff --git a/core/src/main/java/appeng/client/render/effects/EnergyFx.java b/core/src/main/java/appeng/client/render/effects/EnergyFx.java index 0de0ef655..25a6367f7 100644 --- a/core/src/main/java/appeng/client/render/effects/EnergyFx.java +++ b/core/src/main/java/appeng/client/render/effects/EnergyFx.java @@ -18,14 +18,14 @@ package appeng.client.render.effects; -import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.minecraft.client.render.VertexConsumer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.particle.*; -import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.render.Camera; +import net.minecraft.client.world.ClientWorld; import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; @Environment(EnvType.CLIENT) public class EnergyFx extends SpriteBillboardParticle { @@ -34,44 +34,44 @@ public class EnergyFx extends SpriteBillboardParticle { private final int startBlkY; private final int startBlkZ; - public EnergyFx(final World par1World, final double par2, final double par4, final double par6, - final IAnimatedSprite sprite) { - super(par1World, par2, par4, par6); - this.particleGravity = 0; - this.particleBlue = 1; - this.particleGreen = 1; - this.particleRed = 1; - this.particleAlpha = 1.4f; - this.particleScale = 3.5f; - this.selectSpriteRandomly(sprite); + public EnergyFx(ClientWorld world, final double par2, final double par4, final double par6, + final SpriteProvider sprite) { + super(world, par2, par4, par6); + this.gravityStrength = 0; + this.colorBlue = 1; + this.colorGreen = 1; + this.colorRed = 1; + this.colorAlpha = 1.4f; + this.scale = 3.5f; + this.setSprite(sprite); - this.startBlkX = MathHelper.floor(this.posX); - this.startBlkY = MathHelper.floor(this.posY); - this.startBlkZ = MathHelper.floor(this.posZ); + this.startBlkX = MathHelper.floor(this.x); + this.startBlkY = MathHelper.floor(this.y); + this.startBlkZ = MathHelper.floor(this.z); } @Override - public IParticleRenderType getRenderType() { - return IParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + public ParticleTextureSheet getType() { + return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; } @Override - public float getScale(float scaleFactor) { - return 0.1f * this.particleScale; + public float getSize(float tickDelta) { + return 0.1f * this.scale; } @Override - public void renderParticle(IVertexBuilder buffer, ActiveRenderInfo renderInfo, float partialTicks) { - float x = (float) (this.prevX + (this.posX - this.prevX) * partialTicks); - float y = (float) (this.prevY + (this.posY - this.prevY) * partialTicks); - float z = (float) (this.prevZ + (this.posZ - this.prevZ) * partialTicks); + public void buildGeometry(VertexConsumer buffer, Camera camera, float partialTicks) { + float x = (float) (this.prevPosX + (this.x - this.prevPosX) * partialTicks); + float y = (float) (this.prevPosY + (this.y - this.prevPosY) * partialTicks); + float z = (float) (this.prevPosZ + (this.z - this.prevPosZ) * partialTicks); final int blkX = MathHelper.floor(x); final int blkY = MathHelper.floor(y); final int blkZ = MathHelper.floor(z); if (blkX == this.startBlkX && blkY == this.startBlkY && blkZ == this.startBlkZ) { - super.renderParticle(buffer, renderInfo, partialTicks); + super.buildGeometry(buffer, camera, partialTicks); } } @@ -80,42 +80,42 @@ public class EnergyFx extends SpriteBillboardParticle { super.tick(); this.onGround = false; - this.particleScale *= 0.89f; - this.particleAlpha *= 0.89f; + this.scale *= 0.89f; + this.colorAlpha *= 0.89f; } - public void setMotionX(float motionX) { - this.motionX = motionX; + public void setVelocityX(float velocityX) { + this.velocityX = velocityX; } - public void setMotionY(float motionY) { - this.motionY = motionY; + public void setVelocityY(float velocityY) { + this.velocityY = velocityY; } - public void setMotionZ(float motionZ) { - this.motionZ = motionZ; + public void setVelocityZ(float velocityZ) { + this.velocityZ = velocityZ; } @Environment(EnvType.CLIENT) - public static class Factory implements IParticleFactory { - private final IAnimatedSprite spriteSet; + public static class Factory implements ParticleFactory { + private final SpriteProvider spriteSet; - public Factory(IAnimatedSprite spriteSet) { + public Factory(SpriteProvider spriteSet) { this.spriteSet = spriteSet; } @Override - public Particle makeParticle(EnergyParticleData data, World worldIn, double x, double y, double z, - double xSpeed, double ySpeed, double zSpeed) { - EnergyFx result = new EnergyFx(worldIn, x, y, z, spriteSet); - result.setMotionX((float) xSpeed); - result.setMotionY((float) ySpeed); - result.setMotionZ((float) zSpeed); - if (data.forItem) { - result.posX += -0.2 * data.direction.xOffset; - result.posY += -0.2 * data.direction.yOffset; - result.posZ += -0.2 * data.direction.zOffset; - result.particleScale *= 0.8f; + public Particle createParticle(EnergyParticleData effect, ClientWorld world, double x, double y, double z, + double xSpeed, double ySpeed, double zSpeed) { + EnergyFx result = new EnergyFx(world, x, y, z, spriteSet); + result.setVelocityX((float) xSpeed); + result.setVelocityY((float) ySpeed); + result.setVelocityZ((float) zSpeed); + if (effect.forItem) { + result.x += -0.2 * effect.direction.xOffset; + result.y += -0.2 * effect.direction.yOffset; + result.z += -0.2 * effect.direction.zOffset; + result.scale *= 0.8f; } return result; } diff --git a/core/src/main/java/appeng/client/render/effects/LightningArcFX.java b/core/src/main/java/appeng/client/render/effects/LightningArcFX.java index 0c9b3d6f1..f3c60ac73 100644 --- a/core/src/main/java/appeng/client/render/effects/LightningArcFX.java +++ b/core/src/main/java/appeng/client/render/effects/LightningArcFX.java @@ -21,10 +21,11 @@ package appeng.client.render.effects; import java.util.Random; import net.fabricmc.api.Environment; -import net.minecraft.client.particle.IAnimatedSprite; -import net.minecraft.client.particle.IParticleFactory; +import net.minecraft.client.particle.SpriteProvider; +import net.minecraft.client.particle.ParticleFactory; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.SpriteBillboardParticle; +import net.minecraft.client.world.ClientWorld; import net.minecraft.world.World; import net.fabricmc.api.EnvType; @@ -37,9 +38,9 @@ public class LightningArcFX extends LightningFX { private final double ry; private final double rz; - public LightningArcFX(final World w, final double x, final double y, final double z, final double ex, + public LightningArcFX(ClientWorld world, final double x, final double y, final double z, final double ex, final double ey, final double ez, final double r, final double g, final double b) { - super(w, x, y, z, r, g, b, 6); + super(world, x, y, z, r, g, b, 6); this.rx = ex - x; this.ry = ey - y; @@ -67,19 +68,19 @@ public class LightningArcFX extends LightningFX { } @Environment(EnvType.CLIENT) - public static class Factory implements IParticleFactory { - private final IAnimatedSprite spriteSet; + public static class Factory implements ParticleFactory { + private final SpriteProvider spriteSet; - public Factory(IAnimatedSprite spriteSet) { + public Factory(SpriteProvider spriteSet) { this.spriteSet = spriteSet; } @Override - public Particle makeParticle(LightningArcParticleData data, World worldIn, double x, double y, double z, - double xSpeed, double ySpeed, double zSpeed) { - SpriteBillboardParticle lightningFX = new LightningArcFX(worldIn, x, y, z, data.target.x, data.target.y, - data.target.z, 0, 0, 0); - lightningFX.selectSpriteRandomly(this.spriteSet); + public Particle createParticle(LightningArcParticleData effect, ClientWorld world, double x, double y, double z, + double xSpeed, double ySpeed, double zSpeed) { + SpriteBillboardParticle lightningFX = new LightningArcFX(world, x, y, z, effect.target.x, effect.target.y, + effect.target.z, 0, 0, 0); + lightningFX.setSprite(this.spriteSet); return lightningFX; } } diff --git a/core/src/main/java/appeng/client/render/effects/LightningFX.java b/core/src/main/java/appeng/client/render/effects/LightningFX.java index 30e1cf78f..b12156c4d 100644 --- a/core/src/main/java/appeng/client/render/effects/LightningFX.java +++ b/core/src/main/java/appeng/client/render/effects/LightningFX.java @@ -20,22 +20,19 @@ package appeng.client.render.effects; import java.util.Random; -import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.minecraft.client.render.VertexConsumer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.particle.IAnimatedSprite; -import net.minecraft.client.particle.IParticleFactory; -import net.minecraft.client.particle.IParticleRenderType; -import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.SpriteBillboardParticle; -import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.particle.*; +import net.minecraft.client.particle.ParticleTextureSheet; +import net.minecraft.client.render.Camera; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.particle.DefaultParticleType; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; @Environment(EnvType.CLIENT) public class LightningFX extends SpriteBillboardParticle { @@ -49,19 +46,19 @@ public class LightningFX extends SpriteBillboardParticle { private final double[] verticesWithUV = new double[3]; private boolean hasData = false; - private LightningFX(final World w, final double x, final double y, final double z, final double r, final double g, + private LightningFX(ClientWorld world, final double x, final double y, final double z, final double r, final double g, final double b) { - this(w, x, y, z, r, g, b, 6); + this(world, x, y, z, r, g, b, 6); this.regen(); } - protected LightningFX(final World w, final double x, final double y, final double z, final double r, final double g, + protected LightningFX(ClientWorld world, final double x, final double y, final double z, final double r, final double g, final double b, final int maxAge) { - super(w, x, y, z, r, g, b); + super(world, x, y, z, r, g, b); this.precomputedSteps = new double[LightningFX.STEPS][3]; - this.motionX = 0; - this.motionY = 0; - this.motionZ = 0; + this.velocityX = 0; + this.velocityY = 0; + this.velocityZ = 0; this.maxAge = maxAge; } @@ -84,40 +81,40 @@ public class LightningFX extends SpriteBillboardParticle { } @Override - public IParticleRenderType getRenderType() { + public ParticleTextureSheet getType() { // TODO: FIXME - return IParticleRenderType.PARTICLE_SHEET_OPAQUE; + return ParticleTextureSheet.PARTICLE_SHEET_OPAQUE; } @Override public void tick() { - this.prevX = this.posX; - this.prevY = this.posY; - this.prevZ = this.posZ; + this.prevPosX = this.x; + this.prevPosY = this.y; + this.prevPosZ = this.z; if (this.age++ >= this.maxAge) { - this.setExpired(); + this.markDead(); } - this.motionY -= 0.04D * this.particleGravity; - this.move(this.motionX, this.motionY, this.motionZ); - this.motionX *= 0.9800000190734863D; - this.motionY *= 0.9800000190734863D; - this.motionZ *= 0.9800000190734863D; + this.velocityY -= 0.04D * this.gravityStrength; + this.move(this.velocityX, this.velocityY, this.velocityZ); + this.velocityX *= 0.9800000190734863D; + this.velocityY *= 0.9800000190734863D; + this.velocityZ *= 0.9800000190734863D; } @Override - public void renderParticle(IVertexBuilder buffer, ActiveRenderInfo renderInfo, float partialTicks) { - Vec3d vec3d = renderInfo.getProjectedView(); - float centerX = (float) (MathHelper.lerp(partialTicks, this.prevX, this.posX) - vec3d.getX()); - float centerY = (float) (MathHelper.lerp(partialTicks, this.prevY, this.posY) - vec3d.getY()); - float centerZ = (float) (MathHelper.lerp(partialTicks, this.prevZ, this.posZ) - vec3d.getZ()); + public void buildGeometry(VertexConsumer buffer, Camera camera, float partialTicks) { + Vec3d vec3d = camera.getPos(); + float centerX = (float) (MathHelper.lerp(partialTicks, this.prevPosX, this.x) - vec3d.getX()); + float centerY = (float) (MathHelper.lerp(partialTicks, this.prevPosY, this.y) - vec3d.getY()); + float centerZ = (float) (MathHelper.lerp(partialTicks, this.prevPosZ, this.z) - vec3d.getZ()); final float j = 1.0f; - float red = this.particleRed * j * 0.9f; - float green = this.particleGreen * j * 0.95f; - float blue = this.particleBlue * j; - final float alpha = this.particleAlpha; + float red = this.colorRed * j * 0.9f; + float green = this.colorGreen * j * 0.95f; + float blue = this.colorBlue * j; + final float alpha = this.colorAlpha; if (this.age == 3) { this.regen(); @@ -126,7 +123,7 @@ public class LightningFX extends SpriteBillboardParticle { float u = this.getMinU() + (this.getMaxU() - this.getMinU()) / 2; float v = this.getMinV() + (this.getMaxV() - this.getMinV()) / 2; - double scale = 0.02;// 0.02F * this.particleScale; + double scale = 0.02;// 0.02F * this.scale; final double[] a = new double[3]; final double[] b = new double[3]; @@ -147,17 +144,17 @@ public class LightningFX extends SpriteBillboardParticle { // FIXME offX *= 0.001; // FIXME offY *= 0.001; // FIXME offZ *= 0.001; - red = this.particleRed * j * 0.4f; - green = this.particleGreen * j * 0.25f; - blue = this.particleBlue * j * 0.45f; + red = this.colorRed * j * 0.4f; + green = this.colorGreen * j * 0.25f; + blue = this.colorBlue * j * 0.45f; } else { // FIXME offX = 0; // FIXME offY = 0; // FIXME offZ = 0; scale = 0.02; - red = this.particleRed * j * 0.9f; - green = this.particleGreen * j * 0.65f; - blue = this.particleBlue * j * 0.85f; + red = this.colorRed * j * 0.9f; + green = this.colorGreen * j * 0.65f; + blue = this.colorBlue * j * 0.85f; } for (int cycle = 0; cycle < 3; cycle++) { @@ -221,17 +218,17 @@ public class LightningFX extends SpriteBillboardParticle { this.hasData = false; } - private void draw(float red, float green, float blue, final IVertexBuilder tess, final double[] a, final double[] b, - final float u, final float v) { + private void draw(float red, float green, float blue, final VertexConsumer tess, final double[] a, final double[] b, + final float u, final float v) { if (this.hasData) { - tess.pos(a[0], a[1], a[2]).tex(u, v).color(red, green, blue, this.particleAlpha) - .lightmap(BRIGHTNESS, BRIGHTNESS).endVertex(); - tess.pos(this.vertices[0], this.vertices[1], this.vertices[2]).tex(u, v) - .color(red, green, blue, this.particleAlpha).lightmap(BRIGHTNESS, BRIGHTNESS).endVertex(); - tess.pos(this.verticesWithUV[0], this.verticesWithUV[1], this.verticesWithUV[2]).tex(u, v) - .color(red, green, blue, this.particleAlpha).lightmap(BRIGHTNESS, BRIGHTNESS).endVertex(); - tess.pos(b[0], b[1], b[2]).tex(u, v).color(red, green, blue, this.particleAlpha) - .lightmap(BRIGHTNESS, BRIGHTNESS).endVertex(); + tess.vertex(a[0], a[1], a[2]).texture(u, v).color(red, green, blue, this.colorAlpha) + .light(BRIGHTNESS, BRIGHTNESS).next(); + tess.vertex(this.vertices[0], this.vertices[1], this.vertices[2]).texture(u, v) + .color(red, green, blue, this.colorAlpha).light(BRIGHTNESS, BRIGHTNESS).next(); + tess.vertex(this.verticesWithUV[0], this.verticesWithUV[1], this.verticesWithUV[2]).texture(u, v) + .color(red, green, blue, this.colorAlpha).light(BRIGHTNESS, BRIGHTNESS).next(); + tess.vertex(b[0], b[1], b[2]).texture(u, v).color(red, green, blue, this.colorAlpha) + .light(BRIGHTNESS, BRIGHTNESS).next(); } this.hasData = true; for (int x = 0; x < 3; x++) { @@ -245,18 +242,18 @@ public class LightningFX extends SpriteBillboardParticle { } @Environment(EnvType.CLIENT) - public static class Factory implements IParticleFactory { - private final IAnimatedSprite spriteSet; + public static class Factory implements ParticleFactory { + private final SpriteProvider spriteSet; - public Factory(IAnimatedSprite spriteSet) { + public Factory(SpriteProvider spriteSet) { this.spriteSet = spriteSet; } @Override - public Particle makeParticle(DefaultParticleType typeIn, World worldIn, double x, double y, double z, - double xSpeed, double ySpeed, double zSpeed) { - LightningFX lightningFX = new LightningFX(worldIn, x, y, z, xSpeed, ySpeed, zSpeed); - lightningFX.selectSpriteRandomly(this.spriteSet); + public Particle createParticle(DefaultParticleType type, ClientWorld world, double x, double y, double z, + double xSpeed, double ySpeed, double zSpeed) { + LightningFX lightningFX = new LightningFX(world, x, y, z, xSpeed, ySpeed, zSpeed); + lightningFX.setSprite(this.spriteSet); return lightningFX; } } diff --git a/core/src/main/java/appeng/client/render/effects/MatterCannonFX.java b/core/src/main/java/appeng/client/render/effects/MatterCannonFX.java index 5bceee490..49a4092d5 100644 --- a/core/src/main/java/appeng/client/render/effects/MatterCannonFX.java +++ b/core/src/main/java/appeng/client/render/effects/MatterCannonFX.java @@ -20,69 +20,69 @@ package appeng.client.render.effects; import net.fabricmc.api.EnvType; import net.minecraft.client.particle.*; +import net.minecraft.client.world.ClientWorld; import net.minecraft.particle.DefaultParticleType; -import net.minecraft.world.World; import net.fabricmc.api.Environment; import appeng.api.util.AEPartLocation; public class MatterCannonFX extends SpriteBillboardParticle { - public MatterCannonFX(final World par1World, final double x, final double y, final double z, - IAnimatedSprite sprite) { - super(par1World, x, y, z); - this.particleGravity = 0; - this.particleBlue = 1; - this.particleGreen = 1; - this.particleRed = 1; - this.particleAlpha = 1.4f; - this.particleScale = 1.1f; - this.motionX = 0.0f; - this.motionY = 0.0f; - this.motionZ = 0.0f; - this.selectSpriteRandomly(sprite); + public MatterCannonFX(ClientWorld world, final double x, final double y, final double z, + SpriteProvider sprite) { + super(world, x, y, z); + this.gravityStrength = 0; + this.colorBlue = 1; + this.colorGreen = 1; + this.colorRed = 1; + this.colorAlpha = 1.4f; + this.scale = 1.1f; + this.velocityX = 0.0f; + this.velocityY = 0.0f; + this.velocityZ = 0.0f; + this.setSprite(sprite); } public void fromItem(final AEPartLocation d) { - this.particleScale *= 1.2f; + this.scale *= 1.2f; } @Override - public IParticleRenderType getRenderType() { - return IParticleRenderType.PARTICLE_SHEET_OPAQUE; + public ParticleTextureSheet getType() { + return ParticleTextureSheet.PARTICLE_SHEET_OPAQUE; } @Override public void tick() { - this.prevX = this.posX; - this.prevY = this.posY; - this.prevZ = this.posZ; + this.prevPosX = this.x; + this.prevPosY = this.y; + this.prevPosZ = this.z; if (this.age++ >= this.maxAge) { - this.setExpired(); + this.markDead(); } - this.motionY -= 0.04D * this.particleGravity; - this.move(this.motionX, this.motionY, this.motionZ); - this.motionX *= 0.9800000190734863D; - this.motionY *= 0.9800000190734863D; - this.motionZ *= 0.9800000190734863D; + this.velocityY -= 0.04D * this.gravityStrength; + this.move(this.velocityX, this.velocityY, this.velocityZ); + this.velocityX *= 0.9800000190734863D; + this.velocityY *= 0.9800000190734863D; + this.velocityZ *= 0.9800000190734863D; - this.particleScale *= 1.19f; - this.particleAlpha *= 0.59f; + this.scale *= 1.19f; + this.colorAlpha *= 0.59f; } @Environment(EnvType.CLIENT) - public static class Factory implements IParticleFactory { - private final IAnimatedSprite spriteSet; + public static class Factory implements ParticleFactory { + private final SpriteProvider spriteSet; - public Factory(IAnimatedSprite spriteSet) { + public Factory(SpriteProvider spriteSet) { this.spriteSet = spriteSet; } @Override - public Particle makeParticle(DefaultParticleType data, World world, double x, double y, double z, double xSpeed, - double ySpeed, double zSpeed) { + public Particle createParticle(DefaultParticleType effect, ClientWorld world, double x, double y, double z, double xSpeed, + double ySpeed, double zSpeed) { return new MatterCannonFX(world, x, y, z, spriteSet); } } diff --git a/core/src/main/java/appeng/client/render/effects/ParticleTypes.java b/core/src/main/java/appeng/client/render/effects/ParticleTypes.java index 91373f130..46da0dd63 100644 --- a/core/src/main/java/appeng/client/render/effects/ParticleTypes.java +++ b/core/src/main/java/appeng/client/render/effects/ParticleTypes.java @@ -5,6 +5,7 @@ import net.minecraft.particle.DefaultParticleType; import net.minecraft.particle.ParticleType; import appeng.core.AppEng; +import net.minecraft.util.registry.Registry; public final class ParticleTypes { @@ -21,14 +22,14 @@ public final class ParticleTypes { public static final DefaultParticleType MATTER_CANNON = FabricParticleTypes.simple(false); public static final DefaultParticleType VIBRANT = FabricParticleTypes.simple(false); - static { - CHARGED_ORE.setRegistryName(AppEng.MOD_ID, "charged_ore_fx"); - CRAFTING.setRegistryName(AppEng.MOD_ID, "crafting_fx"); - ENERGY.setRegistryName(AppEng.MOD_ID, "energy_fx"); - LIGHTNING_ARC.setRegistryName(AppEng.MOD_ID, "lightning_arc_fx"); - LIGHTNING.setRegistryName(AppEng.MOD_ID, "lightning_fx"); - MATTER_CANNON.setRegistryName(AppEng.MOD_ID, "matter_cannon_fx"); - VIBRANT.setRegistryName(AppEng.MOD_ID, "vibrant_fx"); + public static void register() { + Registry.register(Registry.PARTICLE_TYPE, AppEng.makeId("charged_ore_fx"), CHARGED_ORE); + Registry.register(Registry.PARTICLE_TYPE, AppEng.makeId("crafting_fx"), CRAFTING); + Registry.register(Registry.PARTICLE_TYPE, AppEng.makeId("energy_fx"), ENERGY); + Registry.register(Registry.PARTICLE_TYPE, AppEng.makeId("lightning_arc_fx"), LIGHTNING_ARC); + Registry.register(Registry.PARTICLE_TYPE, AppEng.makeId("lightning_fx"), LIGHTNING); + Registry.register(Registry.PARTICLE_TYPE, AppEng.makeId("matter_cannon_fx"), MATTER_CANNON); + Registry.register(Registry.PARTICLE_TYPE, AppEng.makeId("vibrant_fx"), VIBRANT); } } diff --git a/core/src/main/java/appeng/client/render/effects/VibrantFX.java b/core/src/main/java/appeng/client/render/effects/VibrantFX.java index 828e40411..be8a305fc 100644 --- a/core/src/main/java/appeng/client/render/effects/VibrantFX.java +++ b/core/src/main/java/appeng/client/render/effects/VibrantFX.java @@ -20,44 +20,43 @@ package appeng.client.render.effects; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.particle.IAnimatedSprite; -import net.minecraft.client.particle.IParticleFactory; -import net.minecraft.client.particle.IParticleRenderType; -import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.SpriteBillboardParticle; +import net.minecraft.client.particle.*; +import net.minecraft.client.particle.ParticleFactory; +import net.minecraft.client.particle.ParticleTextureSheet; +import net.minecraft.client.particle.SpriteProvider; +import net.minecraft.client.world.ClientWorld; import net.minecraft.particle.DefaultParticleType; -import net.minecraft.world.World; @Environment(EnvType.CLIENT) public class VibrantFX extends SpriteBillboardParticle { - public VibrantFX(final World par1World, final double x, final double y, final double z, final double par8, - final double par10, final double par12, IAnimatedSprite sprite) { - super(par1World, x, y, z, par8, par10, par12); - final float f = this.rand.nextFloat() * 0.1F + 0.8F; - this.particleRed = f * 0.7f; - this.particleGreen = f * 0.89f; - this.particleBlue = f * 0.9f; - this.selectSpriteRandomly(sprite); - this.setSize(0.04F, 0.04F); - this.particleScale *= this.rand.nextFloat() * 0.6F + 1.9F; - this.motionX = 0.0D; - this.motionY = 0.0D; - this.motionZ = 0.0D; - this.prevX = this.posX; - this.prevY = this.posY; - this.prevZ = this.posZ; + public VibrantFX(ClientWorld world, final double x, final double y, final double z, final double par8, + final double par10, final double par12, SpriteProvider sprite) { + super(world, x, y, z, par8, par10, par12); + final float f = this.random.nextFloat() * 0.1F + 0.8F; + this.colorRed = f * 0.7f; + this.colorGreen = f * 0.89f; + this.colorBlue = f * 0.9f; + this.setSprite(sprite); + this.setBoundingBoxSpacing(0.04F, 0.04F); + this.scale *= this.random.nextFloat() * 0.6F + 1.9F; + this.velocityX = 0.0D; + this.velocityY = 0.0D; + this.velocityZ = 0.0D; + this.prevPosX = this.x; + this.prevPosY = this.y; + this.prevPosZ = this.z; this.maxAge = (int) (20.0D / (Math.random() * 0.8D + 0.1D)); } @Override - public IParticleRenderType getRenderType() { + public ParticleTextureSheet getType() { // FIXME Might be PARTICLE_SHEET_LIT - return IParticleRenderType.PARTICLE_SHEET_OPAQUE; + return ParticleTextureSheet.PARTICLE_SHEET_OPAQUE; } @Override - public int getBrightnessForRender(final float par1) { + public int getColorMultiplier(final float par1) { // This just means full brightness return 15 << 20 | 15 << 4; } @@ -67,30 +66,30 @@ public class VibrantFX extends SpriteBillboardParticle { */ @Override public void tick() { - this.prevX = this.posX; - this.prevY = this.posY; - this.prevZ = this.posZ; - // this.moveEntity(this.motionX, this.motionY, this.motionZ); - this.particleScale *= 0.95; + this.prevPosX = this.x; + this.prevPosY = this.y; + this.prevPosZ = this.z; + // this.moveEntity(this.velocityX, this.velocityY, this.velocityZ); + this.scale *= 0.95; - if (this.maxAge <= 0 || this.particleScale < 0.1) { - this.setExpired(); + if (this.maxAge <= 0 || this.scale < 0.1) { + this.markDead(); } this.maxAge--; } @Environment(EnvType.CLIENT) - public static class Factory implements IParticleFactory { - private final IAnimatedSprite spriteSet; + public static class Factory implements ParticleFactory { + private final SpriteProvider spriteSet; - public Factory(IAnimatedSprite spriteSet) { + public Factory(SpriteProvider spriteSet) { this.spriteSet = spriteSet; } @Override - public Particle makeParticle(DefaultParticleType typeIn, World worldIn, double x, double y, double z, - double xSpeed, double ySpeed, double zSpeed) { - return new VibrantFX(worldIn, x, y, z, xSpeed, ySpeed, zSpeed, spriteSet); + public Particle createParticle(DefaultParticleType effect, ClientWorld world, double x, double y, double z, + double xSpeed, double ySpeed, double zSpeed) { + return new VibrantFX(world, x, y, z, xSpeed, ySpeed, zSpeed, spriteSet); } } diff --git a/src/main/java/appeng/client/render/model/AEModelData.java b/core/src/main/java/appeng/client/render/model/AEModelData.java similarity index 72% rename from src/main/java/appeng/client/render/model/AEModelData.java rename to core/src/main/java/appeng/client/render/model/AEModelData.java index 83103e50b..5dfa464fd 100644 --- a/src/main/java/appeng/client/render/model/AEModelData.java +++ b/core/src/main/java/appeng/client/render/model/AEModelData.java @@ -8,14 +8,12 @@ import com.google.common.base.Preconditions; import net.minecraft.util.math.Direction; -import net.minecraftforge.client.model.data.ModelProperty; - /** * This implementation of IModelData allows us to know precisely which data is * part of the model data. This is relevant for {@link AutoRotatingBakedModel} * and {@link AutoRotatingCacheKey}. */ -public class AEModelData implements IModelData { +public class AEModelData { private final Direction up; private final Direction forward; @@ -54,20 +52,4 @@ public class AEModelData implements IModelData { return Objects.hash(up, forward); } - @Override - public boolean hasProperty(ModelProperty prop) { - return false; - } - - @Nullable - @Override - public T getData(ModelProperty prop) { - throw new IllegalStateException(); - } - - @Nullable - @Override - public T setData(ModelProperty prop, T data) { - throw new IllegalStateException(); - } } diff --git a/core/src/main/java/appeng/core/AEConfig.java b/core/src/main/java/appeng/core/AEConfig.java index 09837c5ae..adbcb075b 100644 --- a/core/src/main/java/appeng/core/AEConfig.java +++ b/core/src/main/java/appeng/core/AEConfig.java @@ -18,57 +18,44 @@ package appeng.core; +import appeng.api.config.*; +import appeng.api.features.AEFeature; +import appeng.core.config.*; +import appeng.core.settings.TickRates; +import appeng.util.EnumCycler; +import net.minecraft.world.dimension.DimensionType; + +import java.io.File; import java.util.*; import java.util.function.DoubleSupplier; import java.util.stream.Collectors; -import com.google.common.base.Strings; - -import org.apache.commons.lang3.tuple.Pair; - -import net.minecraft.world.dimension.DimensionType; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.common.ForgeConfigSpec.BooleanValue; -import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; -import net.minecraftforge.common.ForgeConfigSpec.DoubleValue; -import net.minecraftforge.common.ForgeConfigSpec.EnumValue; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; - -import appeng.api.config.*; -import appeng.api.features.AEFeature; -import appeng.core.settings.TickRates; -import appeng.util.EnumCycler; - -@Mod.EventBusSubscriber(modid = AppEng.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public final class AEConfig { - public static final ClientConfig CLIENT; - public static final ForgeConfigSpec CLIENT_SPEC; - public static final CommonConfig COMMON; - public static final ForgeConfigSpec COMMON_SPEC; + public final ClientConfig clientConfig; + public final CommonConfig commonConfig; + + public AEConfig(File configDir) { + ConfigSection clientRoot = ConfigSection.createRoot(); + clientConfig = new ClientConfig(clientRoot); + syncClientConfig(); + + ConfigSection commonRoot = ConfigSection.createRoot(); + commonConfig = new CommonConfig(commonRoot); + syncCommonConfig(); + + // FIXME config loading/saving + } // Default Energy Conversion Rates private static final double DEFAULT_IC2_EXCHANGE = 2.0; private static final double DEFAULT_RF_EXCHANGE = 0.5; - static { - final Pair specPair = new ForgeConfigSpec.Builder().configure(ClientConfig::new); - CLIENT_SPEC = specPair.getRight(); - CLIENT = specPair.getLeft(); - - final Pair commonPair = new ForgeConfigSpec.Builder() - .configure(CommonConfig::new); - COMMON_SPEC = commonPair.getRight(); - COMMON = commonPair.getLeft(); - } - public static final String VERSION = "@version@"; public static final String CHANNEL = "@aechannel@"; // Config instance - private static final AEConfig instance = new AEConfig(); + private static AEConfig instance; private final EnumSet featureFlags = EnumSet.noneOf(AEFeature.class); @@ -86,7 +73,7 @@ public final class AEConfig { private final int[] craftByStacks = new int[4]; private final int[] priorityByStacks = new int[4]; private final int[] levelByStacks = new int[4]; - private final int[] levelByMillibuckets = { 10, 100, 1000, 10000 }; + private final int[] levelByMillibuckets = {10, 100, 1000, 10000}; // Spatial IO/Dimension private double spatialPowerExponent; @@ -119,65 +106,55 @@ public final class AEConfig { // Tunnels public static final double TUNNEL_POWER_LOSS = 0.05; - // FIXME: this is shit, move this concern out of the config class - @SubscribeEvent - public static void onModConfigEvent(final ModConfig.ModConfigEvent configEvent) { - if (configEvent.getConfig().getSpec() == CLIENT_SPEC) { - instance.syncClientConfig(); - } else if (configEvent.getConfig().getSpec() == COMMON_SPEC) { - instance.syncCommonConfig(); - } - } - private void syncClientConfig() { - this.disableColoredCableRecipesInJEI = CLIENT.disableColoredCableRecipesInJEI.get(); - this.enableEffects = CLIENT.enableEffects.get(); - this.useLargeFonts = CLIENT.useLargeFonts.get(); - this.useColoredCraftingStatus = CLIENT.useColoredCraftingStatus.get(); - this.selectedPowerUnit = CLIENT.selectedPowerUnit.get(); + this.disableColoredCableRecipesInJEI = clientConfig.disableColoredCableRecipesInJEI.get(); + this.enableEffects = clientConfig.enableEffects.get(); + this.useLargeFonts = clientConfig.useLargeFonts.get(); + this.useColoredCraftingStatus = clientConfig.useColoredCraftingStatus.get(); + this.selectedPowerUnit = clientConfig.selectedPowerUnit.get(); // load buttons.. for (int btnNum = 0; btnNum < 4; btnNum++) { - this.craftByStacks[btnNum] = CLIENT.craftByStacks.get(btnNum).get(); - this.priorityByStacks[btnNum] = CLIENT.priorityByStacks.get(btnNum).get(); - this.levelByStacks[btnNum] = CLIENT.levelByStacks.get(btnNum).get(); + this.craftByStacks[btnNum] = clientConfig.craftByStacks.get(btnNum).get(); + this.priorityByStacks[btnNum] = clientConfig.priorityByStacks.get(btnNum).get(); + this.levelByStacks[btnNum] = clientConfig.levelByStacks.get(btnNum).get(); } } private void syncCommonConfig() { - PowerUnits.EU.conversionRatio = COMMON.powerRatioIc2.get(); - PowerUnits.RF.conversionRatio = COMMON.powerRatioForgeEnergy.get(); - PowerMultiplier.CONFIG.multiplier = COMMON.powerUsageMultiplier.get(); + PowerUnits.EU.conversionRatio = commonConfig.powerRatioIc2.get(); + PowerUnits.RF.conversionRatio = commonConfig.powerRatioForgeEnergy.get(); + PowerMultiplier.CONFIG.multiplier = commonConfig.powerUsageMultiplier.get(); - CondenserOutput.MATTER_BALLS.requiredPower = COMMON.condenserMatterBallsPower.get(); - CondenserOutput.SINGULARITY.requiredPower = COMMON.condenserSingularityPower.get(); + CondenserOutput.MATTER_BALLS.requiredPower = commonConfig.condenserMatterBallsPower.get(); + CondenserOutput.SINGULARITY.requiredPower = commonConfig.condenserSingularityPower.get(); - this.oreDoublePercentage = COMMON.oreDoublePercentage.get().floatValue(); + this.oreDoublePercentage = (float) commonConfig.oreDoublePercentage.get(); - this.meteoriteMaximumSpawnHeight = COMMON.meteoriteMaximumSpawnHeight.get(); - this.meteoriteDimensionWhitelist = new HashSet<>(COMMON.meteoriteDimensionWhitelist.get()); + this.meteoriteMaximumSpawnHeight = commonConfig.meteoriteMaximumSpawnHeight.get(); + this.meteoriteDimensionWhitelist = new HashSet<>(commonConfig.meteoriteDimensionWhitelist.get()); - this.wirelessBaseCost = COMMON.wirelessBaseCost.get(); - this.wirelessCostMultiplier = COMMON.wirelessCostMultiplier.get(); - this.wirelessBaseRange = COMMON.wirelessBaseRange.get(); - this.wirelessBoosterRangeMultiplier = COMMON.wirelessBoosterRangeMultiplier.get(); - this.wirelessBoosterExp = COMMON.wirelessBoosterExp.get(); - this.wirelessHighWirelessCount = COMMON.wirelessHighWirelessCount.get(); - this.wirelessTerminalDrainMultiplier = COMMON.wirelessTerminalDrainMultiplier.get(); + this.wirelessBaseCost = commonConfig.wirelessBaseCost.get(); + this.wirelessCostMultiplier = commonConfig.wirelessCostMultiplier.get(); + this.wirelessBaseRange = commonConfig.wirelessBaseRange.get(); + this.wirelessBoosterRangeMultiplier = commonConfig.wirelessBoosterRangeMultiplier.get(); + this.wirelessBoosterExp = commonConfig.wirelessBoosterExp.get(); + this.wirelessHighWirelessCount = commonConfig.wirelessHighWirelessCount.get(); + this.wirelessTerminalDrainMultiplier = commonConfig.wirelessTerminalDrainMultiplier.get(); - this.formationPlaneEntityLimit = COMMON.formationPlaneEntityLimit.get(); + this.formationPlaneEntityLimit = commonConfig.formationPlaneEntityLimit.get(); - this.wirelessTerminalBattery = COMMON.wirelessTerminalBattery.get(); - this.chargedStaffBattery = COMMON.chargedStaffBattery.get(); - this.entropyManipulatorBattery = COMMON.entropyManipulatorBattery.get(); - this.portableCellBattery = COMMON.portableCellBattery.get(); - this.colorApplicatorBattery = COMMON.colorApplicatorBattery.get(); - this.matterCannonBattery = COMMON.matterCannonBattery.get(); + this.wirelessTerminalBattery = commonConfig.wirelessTerminalBattery.get(); + this.chargedStaffBattery = commonConfig.chargedStaffBattery.get(); + this.entropyManipulatorBattery = commonConfig.entropyManipulatorBattery.get(); + this.portableCellBattery = commonConfig.portableCellBattery.get(); + this.colorApplicatorBattery = commonConfig.colorApplicatorBattery.get(); + this.matterCannonBattery = commonConfig.matterCannonBattery.get(); this.featureFlags.clear(); for (final AEFeature feature : AEFeature.values()) { if (feature.isVisible()) { - if (COMMON.enabledFeatures.containsKey(feature)) { + if (commonConfig.enabledFeatures.containsKey(feature)) { this.featureFlags.add(feature); } } else { @@ -186,16 +163,16 @@ public final class AEConfig { } for (final TickRates tr : TickRates.values()) { - tr.setMin(COMMON.tickRateMin.get(tr).get()); - tr.setMax(COMMON.tickRateMin.get(tr).get()); + tr.setMin(commonConfig.tickRateMin.get(tr).get()); + tr.setMax(commonConfig.tickRateMin.get(tr).get()); } - this.spatialPowerMultiplier = COMMON.spatialPowerMultiplier.get(); - this.spatialPowerExponent = COMMON.spatialPowerExponent.get(); + this.spatialPowerMultiplier = commonConfig.spatialPowerMultiplier.get(); + this.spatialPowerExponent = commonConfig.spatialPowerExponent.get(); - this.craftingCalculationTimePerTick = COMMON.craftingCalculationTimePerTick.get(); + this.craftingCalculationTimePerTick = commonConfig.craftingCalculationTimePerTick.get(); - this.removeCrashingItemsOnLoad = COMMON.removeCrashingItemsOnLoad.get(); + this.removeCrashingItemsOnLoad = commonConfig.removeCrashingItemsOnLoad.get(); } public static AEConfig instance() { @@ -225,34 +202,27 @@ public final class AEConfig { } public YesNo getSearchTooltips() { - return CLIENT.searchTooltips.get(); + return clientConfig.searchTooltips.get(); } public TerminalStyle getTerminalStyle() { - return CLIENT.terminalStyle.get(); + return clientConfig.terminalStyle.get(); } public void setTerminalStyle(TerminalStyle setting) { - CLIENT.terminalStyle.set(setting); + clientConfig.terminalStyle.set(setting); } public SearchBoxMode getTerminalSearchMode() { - return CLIENT.terminalSearchMode.get(); + return clientConfig.terminalSearchMode.get(); } public void setTerminalSearchMode(SearchBoxMode setting) { - CLIENT.terminalSearchMode.set(setting); + clientConfig.terminalSearchMode.set(setting); } public void save() { - if (CLIENT_SPEC.isLoaded()) { - CLIENT.selectedPowerUnit.set(this.selectedPowerUnit); - CLIENT_SPEC.save(); - } - - if (COMMON_SPEC.isLoaded()) { - COMMON_SPEC.save(); - } + clientConfig.selectedPowerUnit.set(this.selectedPowerUnit); } public int craftItemsByStackAmounts(final int i) { @@ -272,14 +242,14 @@ public final class AEConfig { } public PowerUnits getSelectedPowerUnit() { - return this.selectedPowerUnit; + return this.clientConfig.selectedPowerUnit.get(); } @SuppressWarnings("unchecked") public void nextPowerUnit(final boolean backwards) { - this.selectedPowerUnit = EnumCycler.rotateEnum(this.selectedPowerUnit, backwards, + PowerUnits selectedPowerUnit = EnumCycler.rotateEnum(this.selectedPowerUnit, backwards, (EnumSet) Settings.POWER_UNITS.getPossibleValues()); - this.save(); + clientConfig.selectedPowerUnit.set(selectedPowerUnit); } // Getters @@ -348,15 +318,15 @@ public final class AEConfig { } public float getSpawnChargedChance() { - return COMMON.spawnChargedChance.get().floatValue(); + return (float) commonConfig.spawnChargedChance.get(); } public int getQuartzOresPerCluster() { - return COMMON.quartzOresPerCluster.get(); + return commonConfig.quartzOresPerCluster.get(); } public int getQuartzOresClusterAmount() { - return COMMON.quartzOresClusterAmount.get(); + return commonConfig.quartzOresClusterAmount.get(); } public int getMeteoriteMaximumSpawnHeight() { @@ -372,32 +342,31 @@ public final class AEConfig { private static class ClientConfig { // Misc - public final BooleanValue enableEffects; - public final BooleanValue useLargeFonts; - public final BooleanValue useColoredCraftingStatus; - public final BooleanValue disableColoredCableRecipesInJEI; - public final EnumValue selectedPowerUnit; + public final BooleanOption enableEffects; + public final BooleanOption useLargeFonts; + public final BooleanOption useColoredCraftingStatus; + public final BooleanOption disableColoredCableRecipesInJEI; + public final EnumOption selectedPowerUnit; // GUI Buttons - private static final int[] BTN_BY_STACK_DEFAULTS = { 1, 10, 100, 1000 }; - public final List> craftByStacks; - public final List> priorityByStacks; - public final List> levelByStacks; + private static final int[] BTN_BY_STACK_DEFAULTS = {1, 10, 100, 1000}; + public final List craftByStacks; + public final List priorityByStacks; + public final List levelByStacks; // Terminal Settings - public final EnumValue searchTooltips; - public final EnumValue terminalStyle; - public final EnumValue terminalSearchMode; + public final EnumOption searchTooltips; + public final EnumOption terminalStyle; + public final EnumOption terminalSearchMode; - public ClientConfig(ForgeConfigSpec.Builder builder) { - builder.push("client"); - this.disableColoredCableRecipesInJEI = builder.comment("TODO").define("disableColoredCableRecipesInJEI", + public ClientConfig(ConfigSection root) { + ConfigSection client = root.subsection("client"); + this.disableColoredCableRecipesInJEI = client.addBoolean("disableColoredCableRecipesInJEI", true); - this.enableEffects = builder.comment("TODO").define("enableEffects", true); - this.useLargeFonts = builder.comment("TODO").define("useTerminalUseLargeFont", false); - this.useColoredCraftingStatus = builder.comment("TODO").define("useColoredCraftingStatus", true); - this.selectedPowerUnit = builder.comment("Power unit shown in AE UIs").defineEnum("PowerUnit", - PowerUnits.AE, PowerUnits.values()); + this.enableEffects = client.addBoolean("enableEffects", true); + this.useLargeFonts = client.addBoolean("useTerminalUseLargeFont", false); + this.useColoredCraftingStatus = client.addBoolean("useColoredCraftingStatus", true); + this.selectedPowerUnit = client.addEnum("PowerUnit", PowerUnits.AE, "Power unit shown in AE UIs"); this.craftByStacks = new ArrayList<>(4); this.priorityByStacks = new ArrayList<>(4); @@ -407,23 +376,19 @@ public final class AEConfig { int defaultValue = BTN_BY_STACK_DEFAULTS[btnNum]; final int buttonCap = (int) (Math.pow(10, btnNum + 1) - 1); - this.craftByStacks.add(builder.comment("Controls buttons on Crafting Screen") - .defineInRange("craftByStacks" + btnNum, defaultValue, 1, buttonCap)); - this.priorityByStacks.add(builder.comment("Controls buttons on Priority Screen") - .defineInRange("priorityByStacks" + btnNum, defaultValue, 1, buttonCap)); - this.levelByStacks.add(builder.comment("Controls buttons on Level Emitter Screen") - .defineInRange("levelByStacks" + btnNum, defaultValue, 1, buttonCap)); + this.craftByStacks.add(client + .addInt("craftByStacks" + btnNum, defaultValue, 1, buttonCap, "Controls buttons on Crafting Screen")); + this.priorityByStacks.add(client + .addInt("priorityByStacks" + btnNum, defaultValue, 1, buttonCap, "Controls buttons on Priority Screen")); + this.levelByStacks.add(client + .addInt("levelByStacks" + btnNum, defaultValue, 1, buttonCap, "Controls buttons on Level Emitter Screen")); } - builder.pop(); - - builder.push("terminals"); - this.searchTooltips = builder.comment("Should tooltips be searched. Performance impact") - .defineEnum("searchTooltips", YesNo.YES, YesNo.values()); - this.terminalStyle = builder.defineEnum("terminalStyle", TerminalStyle.TALL, TerminalStyle.values()); - this.terminalSearchMode = builder.defineEnum("terminalSearchMode", SearchBoxMode.AUTOSEARCH, - SearchBoxMode.values()); - builder.pop(); + ConfigSection terminals = root.subsection("terminals"); + this.searchTooltips = terminals + .addEnum("searchTooltips", YesNo.YES, "Should tooltips be searched. Performance impact"); + this.terminalStyle = terminals.addEnum("terminalStyle", TerminalStyle.TALL); + this.terminalSearchMode = terminals.addEnum("terminalSearchMode", SearchBoxMode.AUTOSEARCH); } } @@ -431,63 +396,62 @@ public final class AEConfig { private static class CommonConfig { // Feature toggles - public final Map enabledFeatures = new EnumMap<>(AEFeature.class); + public final Map enabledFeatures = new EnumMap<>(AEFeature.class); // Misc - public final BooleanValue removeCrashingItemsOnLoad; - public final ConfigValue formationPlaneEntityLimit; - public final ConfigValue craftingCalculationTimePerTick; + public final BooleanOption removeCrashingItemsOnLoad; + public final IntegerOption formationPlaneEntityLimit; + public final IntegerOption craftingCalculationTimePerTick; // Spatial IO/Dimension - public final ConfigValue spatialPowerExponent; - public final ConfigValue spatialPowerMultiplier; + public final DoubleOption spatialPowerExponent; + public final DoubleOption spatialPowerMultiplier; // Grindstone - public final DoubleValue oreDoublePercentage; + public final DoubleOption oreDoublePercentage; // Batteries - public final ConfigValue wirelessTerminalBattery; - public final ConfigValue entropyManipulatorBattery; - public final ConfigValue matterCannonBattery; - public final ConfigValue portableCellBattery; - public final ConfigValue colorApplicatorBattery; - public final ConfigValue chargedStaffBattery; + public final IntegerOption wirelessTerminalBattery; + public final IntegerOption entropyManipulatorBattery; + public final IntegerOption matterCannonBattery; + public final IntegerOption portableCellBattery; + public final IntegerOption colorApplicatorBattery; + public final IntegerOption chargedStaffBattery; // Certus quartz - public final DoubleValue spawnChargedChance; - public final ConfigValue quartzOresPerCluster; - public final ConfigValue quartzOresClusterAmount; + public final DoubleOption spawnChargedChance; + public final IntegerOption quartzOresPerCluster; + public final IntegerOption quartzOresClusterAmount; // Meteors - public final ConfigValue meteoriteMaximumSpawnHeight; - public final ConfigValue> meteoriteDimensionWhitelist; + public final IntegerOption meteoriteMaximumSpawnHeight; + public final StringListOption meteoriteDimensionWhitelist; // Wireless - public final ConfigValue wirelessBaseCost; - public final ConfigValue wirelessCostMultiplier; - public final ConfigValue wirelessTerminalDrainMultiplier; - public final ConfigValue wirelessBaseRange; - public final ConfigValue wirelessBoosterRangeMultiplier; - public final ConfigValue wirelessBoosterExp; - public final ConfigValue wirelessHighWirelessCount; + public final DoubleOption wirelessBaseCost; + public final DoubleOption wirelessCostMultiplier; + public final DoubleOption wirelessTerminalDrainMultiplier; + public final DoubleOption wirelessBaseRange; + public final DoubleOption wirelessBoosterRangeMultiplier; + public final DoubleOption wirelessBoosterExp; + public final DoubleOption wirelessHighWirelessCount; // Power Ratios - public final ConfigValue powerRatioIc2; - public final ConfigValue powerRatioForgeEnergy; - public final DoubleValue powerUsageMultiplier; + public final DoubleOption powerRatioIc2; + public final DoubleOption powerRatioForgeEnergy; + public final DoubleOption powerUsageMultiplier; // Condenser Power Requirement - public final ConfigValue condenserMatterBallsPower; - public final ConfigValue condenserSingularityPower; + public final IntegerOption condenserMatterBallsPower; + public final IntegerOption condenserSingularityPower; - public final Map> tickRateMin = new HashMap<>(); - public final Map> tickRateMax = new HashMap<>(); + public final Map tickRateMin = new HashMap<>(); + public final Map tickRateMax = new HashMap<>(); - public CommonConfig(ForgeConfigSpec.Builder builder) { + public CommonConfig(ConfigSection root) { // Feature switches - builder.comment("Warning: Disabling a feature may disable other features depending on it.") - .push("features"); + ConfigSection features = root.subsection("features", "Warning: Disabling a feature may disable other features depending on it."); // We need to group by feature category Map> groupedFeatures = Arrays.stream(AEFeature.values()) @@ -497,96 +461,74 @@ public final class AEConfig { for (final String category : groupedFeatures.keySet()) { List featuresInGroup = groupedFeatures.get(category); - builder.push(category); + ConfigSection categorySection = features.subsection(category); for (AEFeature feature : featuresInGroup) { if (feature.isConfig()) { - enabledFeatures.put(feature, builder.comment(Strings.nullToEmpty(feature.comment())) - .define(feature.key(), feature.isEnabled())); + enabledFeatures.put(feature, categorySection.addBoolean(feature.key(), feature.isEnabled(), feature.comment())); } } - builder.pop(); } - builder.pop(); + ConfigSection general = root.subsection("general"); + removeCrashingItemsOnLoad = general.addBoolean("removeCrashingItemsOnLoad", false, "Will auto-remove items that crash when being loaded from storage. This will destroy those items instead of crashing the game!"); - builder.push("general"); - removeCrashingItemsOnLoad = builder.comment( - "Will auto-remove items that crash when being loaded from storage. This will destroy those items instead of crashing the game!") - .define("removeCrashingItemsOnLoad", false); - builder.pop(); + ConfigSection automation = root.subsection("automation"); + formationPlaneEntityLimit = automation.addInt("formationPlaneEntityLimit", 128); - builder.push("automation"); - formationPlaneEntityLimit = builder.comment("TODO").define("formationPlaneEntityLimit", 128); - builder.pop(); + ConfigSection craftingCPU = root.subsection("craftingCPU"); + this.craftingCalculationTimePerTick = craftingCPU.addInt("craftingCalculationTimePerTick", 5); - builder.push("craftingCPU"); - this.craftingCalculationTimePerTick = builder.define("craftingCalculationTimePerTick", 5); + ConfigSection spatialio = root.subsection("spatialio"); + this.spatialPowerMultiplier = spatialio.addDouble("spatialPowerMultiplier", 1250.0); + this.spatialPowerExponent = spatialio.addDouble("spatialPowerExponent", 1.35); - builder.pop(); + ConfigSection grindStone = root.subsection("GrindStone"); + this.oreDoublePercentage = grindStone.addDouble("oreDoublePercentage", 90.0, 0.0, 100.0, "Chance to actually get an output with stacksize > 1."); - builder.push("spatialio"); - this.spatialPowerMultiplier = builder.define("spatialPowerMultiplier", 1250.0); - this.spatialPowerExponent = builder.define("spatialPowerExponent", 1.35); - builder.pop(); + ConfigSection battery = root.subsection("battery"); + this.wirelessTerminalBattery = battery.addInt("wirelessTerminal", 1600000); + this.chargedStaffBattery = battery.addInt("chargedStaff", 8000); + this.entropyManipulatorBattery = battery.addInt("entropyManipulator", 200000); + this.portableCellBattery = battery.addInt("portableCell", 20000); + this.colorApplicatorBattery = battery.addInt("colorApplicator", 20000); + this.matterCannonBattery = battery.addInt("matterCannon", 200000); - builder.push("GrindStone"); - this.oreDoublePercentage = builder.comment("Chance to actually get an output with stacksize > 1.") - .defineInRange("oreDoublePercentage", 90.0, 0.0, 100.0); - builder.pop(); + ConfigSection worldGen = root.subsection("worldGen"); - builder.push("battery"); - this.wirelessTerminalBattery = builder.define("wirelessTerminal", 1600000); - this.chargedStaffBattery = builder.define("chargedStaff", 8000); - this.entropyManipulatorBattery = builder.define("entropyManipulator", 200000); - this.portableCellBattery = builder.define("portableCell", 20000); - this.colorApplicatorBattery = builder.define("colorApplicator", 20000); - this.matterCannonBattery = builder.define("matterCannon", 200000); - builder.pop(); - - builder.push("worldGen"); - - this.spawnChargedChance = builder.defineInRange("spawnChargedChance", 0.08, 0.0, 1.0); - this.meteoriteMaximumSpawnHeight = builder.define("meteoriteMaximumSpawnHeight", 180); + this.spawnChargedChance = worldGen.addDouble("spawnChargedChance", 0.08, 0.0, 1.0); + this.meteoriteMaximumSpawnHeight = worldGen.addInt("meteoriteMaximumSpawnHeight", 180); List defaultDimensionWhitelist = new ArrayList<>(); - defaultDimensionWhitelist.add(DimensionType.getKey(DimensionType.OVERWORLD).toString()); - this.meteoriteDimensionWhitelist = builder.defineList("meteoriteDimensionWhitelist", - defaultDimensionWhitelist, obj -> true); + defaultDimensionWhitelist.add(DimensionType.OVERWORLD_REGISTRY_KEY.getValue().toString()); + this.meteoriteDimensionWhitelist = worldGen.addStringList("meteoriteDimensionWhitelist", + defaultDimensionWhitelist); - this.quartzOresPerCluster = builder.define("quartzOresPerCluster", 4); - this.quartzOresClusterAmount = builder.define("quartzOresClusterAmount", 20); + this.quartzOresPerCluster = worldGen.addInt("quartzOresPerCluster", 4); + this.quartzOresClusterAmount = worldGen.addInt("quartzOresClusterAmount", 20); - builder.pop(); + ConfigSection wireless = root.subsection("wireless"); + this.wirelessBaseCost = wireless.addDouble("wirelessBaseCost", 8.0); + this.wirelessCostMultiplier = wireless.addDouble("wirelessCostMultiplier", 1.0); + this.wirelessBaseRange = wireless.addDouble("wirelessBaseRange", 16.0); + this.wirelessBoosterRangeMultiplier = wireless.addDouble("wirelessBoosterRangeMultiplier", 1.0); + this.wirelessBoosterExp = wireless.addDouble("wirelessBoosterExp", 1.5); + this.wirelessHighWirelessCount = wireless.addDouble("wirelessHighWirelessCount", 64.0); + this.wirelessTerminalDrainMultiplier = wireless.addDouble("wirelessTerminalDrainMultiplier", 1.0); - builder.push("wireless"); - this.wirelessBaseCost = builder.define("wirelessBaseCost", 8.0); - this.wirelessCostMultiplier = builder.define("wirelessCostMultiplier", 1.0); - this.wirelessBaseRange = builder.define("wirelessBaseRange", 16.0); - this.wirelessBoosterRangeMultiplier = builder.define("wirelessBoosterRangeMultiplier", 1.0); - this.wirelessBoosterExp = builder.define("wirelessBoosterExp", 1.5); - this.wirelessHighWirelessCount = builder.define("wirelessHighWirelessCount", 64.0); - this.wirelessTerminalDrainMultiplier = builder.define("wirelessTerminalDrainMultiplier", 1.0); - builder.pop(); + ConfigSection PowerRatios = root.subsection("PowerRatios"); + powerRatioIc2 = PowerRatios.addDouble("IC2", DEFAULT_IC2_EXCHANGE); + powerRatioForgeEnergy = PowerRatios.addDouble("ForgeEnergy", DEFAULT_RF_EXCHANGE); + powerUsageMultiplier = PowerRatios.addDouble("UsageMultiplier", 1.0, 0.01, Double.MAX_VALUE); - builder.push("PowerRatios"); - powerRatioIc2 = builder.define("IC2", DEFAULT_IC2_EXCHANGE); - powerRatioForgeEnergy = builder.define("ForgeEnergy", DEFAULT_RF_EXCHANGE); - powerUsageMultiplier = builder.defineInRange("UsageMultiplier", 1.0, 0.01, Double.MAX_VALUE); - builder.pop(); + ConfigSection Condenser = root.subsection("Condenser"); + condenserMatterBallsPower = Condenser.addInt("MatterBalls", 256); + condenserSingularityPower = Condenser.addInt("Singularity", 256000); - builder.push("Condenser"); - condenserMatterBallsPower = builder.define("MatterBalls", 256); - condenserSingularityPower = builder.define("Singularity", 256000); - builder.pop(); - - builder.comment( - " Min / Max Tickrates for dynamic ticking, most of these components also use sleeping, to prevent constant ticking, adjust with care, non standard rates are not supported or tested.") - .push("tickRates"); + ConfigSection tickrates = root.subsection("tickRates", " Min / Max Tickrates for dynamic ticking, most of these components also use sleeping, to prevent constant ticking, adjust with care, non standard rates are not supported or tested."); for (TickRates tickRate : TickRates.values()) { - tickRateMin.put(tickRate, builder.define(tickRate.name() + "Min", tickRate.getDefaultMin())); - tickRateMax.put(tickRate, builder.define(tickRate.name() + "Max", tickRate.getDefaultMax())); + tickRateMin.put(tickRate, tickrates.addInt(tickRate.name() + "Min", tickRate.getDefaultMin())); + tickRateMax.put(tickRate, tickrates.addInt(tickRate.name() + "Max", tickRate.getDefaultMax())); } - builder.pop(); } } diff --git a/core/src/main/java/appeng/core/AppEng.java b/core/src/main/java/appeng/core/AppEng.java index 6da100e50..3a5015fbc 100644 --- a/core/src/main/java/appeng/core/AppEng.java +++ b/core/src/main/java/appeng/core/AppEng.java @@ -18,286 +18,260 @@ package appeng.core; -import java.util.concurrent.TimeUnit; -import java.util.function.Supplier; +import appeng.api.parts.CableRenderMode; +import appeng.block.AEBaseBlock; +import appeng.client.ActionKey; +import appeng.client.EffectType; +import appeng.core.sync.BasePacket; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.client.util.InputUtil; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Identifier; +import net.minecraft.util.hit.HitResult; +import net.minecraft.world.World; import javax.annotation.Nonnull; +import java.util.List; +import java.util.Random; -import com.google.common.base.Stopwatch; +public interface AppEng { -import net.fabricmc.api.Environment; -import net.minecraft.block.Block; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.renderer.entity.ItemRenderer; -import net.minecraft.entity.EntityType; -import net.minecraft.inventory.container.ContainerType; -import net.minecraft.item.Item; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.particle.ParticleType; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.util.Identifier; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.feature.Feature; -import net.fabricmc.api.EnvType; -import net.minecraftforge.client.model.ModelLoaderRegistry; -import net.minecraftforge.client.model.geometry.IModelGeometry; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.ModDimension; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.CrashReportExtender; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.client.registry.RenderingRegistry; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.event.server.FMLServerAboutToStartEvent; -import net.minecraftforge.fml.event.server.FMLServerStoppedEvent; -import net.minecraftforge.fml.event.server.FMLServerStoppingEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + String MOD_ID = "appliedenergistics2"; -import appeng.block.paint.PaintSplotchesModel; -import appeng.block.qnb.QnbFormedModel; -import appeng.bootstrap.components.IClientSetupComponent; -import appeng.bootstrap.components.IInitComponent; -import appeng.bootstrap.components.IPostInitComponent; -import appeng.capabilities.Capabilities; -import appeng.client.ClientHelper; -import appeng.client.render.DummyFluidItemModel; -import appeng.client.render.FacadeItemModel; -import appeng.client.render.SimpleModelLoader; -import appeng.client.render.cablebus.CableBusModelLoader; -import appeng.client.render.cablebus.P2PTunnelFrequencyModel; -import appeng.client.render.crafting.CraftingCubeModelLoader; -import appeng.client.render.crafting.EncodedPatternModelLoader; -import appeng.client.render.model.*; -import appeng.client.render.spatial.SpatialPylonModel; -import appeng.core.crash.ModCrashEnhancement; -import appeng.core.features.registries.PartModels; -import appeng.core.stats.AdvancementTriggers; -import appeng.core.sync.network.NetworkHandler; -import appeng.core.worlddata.WorldData; -import appeng.entity.*; -import appeng.hooks.TickHandler; -import appeng.integration.Integrations; -import appeng.parts.PartPlacement; -import appeng.parts.automation.PlaneModelLoader; -import appeng.server.ServerHelper; + AppEng INSTANCE = null; -@Mod(AppEng.MOD_ID) -public final class AppEng { - public static CommonHelper proxy; - - public static final String MOD_ID = "appliedenergistics2"; - public static final String MOD_NAME = "Applied Energistics 2"; - - private static AppEng INSTANCE; - - private final Registration registration; - - public AppEng() { - if (INSTANCE != null) { - throw new IllegalStateException(); - } - INSTANCE = this; - - ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, AEConfig.CLIENT_SPEC); - ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, AEConfig.COMMON_SPEC); - - proxy = DistExecutor.runForDist(() -> ClientHelper::new, () -> ServerHelper::new); - - CrashReportExtender.registerCrashCallable(new ModCrashEnhancement()); - - CreativeTab.init(); - new FacadeItemGroup(); // This call has a side-effect (adding it to the creative screen) - - IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); - registration = new Registration(); - modEventBus.addGenericListener(Block.class, registration::registerBlocks); - modEventBus.addGenericListener(Item.class, registration::registerItems); - modEventBus.addGenericListener(EntityType.class, registration::registerEntities); - modEventBus.addGenericListener(ParticleType.class, registration::registerParticleTypes); - modEventBus.addGenericListener(BlockEntityType.class, registration::registerTileEntities); - modEventBus.addGenericListener(ContainerType.class, registration::registerContainerTypes); - modEventBus.addGenericListener(RecipeSerializer.class, registration::registerRecipeSerializers); - modEventBus.addGenericListener(Feature.class, registration::registerWorldGen); - modEventBus.addGenericListener(Biome.class, registration::registerBiomes); - modEventBus.addGenericListener(ModDimension.class, registration::registerModDimension); - - modEventBus.addListener(Integrations::enqueueIMC); - - modEventBus.addListener(this::commonSetup); - - // Register client-only events - DistExecutor.runWhenOn(EnvType.CLIENT, () -> registration::registerClientEvents); - DistExecutor.runWhenOn(EnvType.CLIENT, () -> () -> modEventBus.addListener(this::clientSetup)); - - MinecraftForge.EVENT_BUS.addListener(TickHandler.INSTANCE::unloadWorld); - MinecraftForge.EVENT_BUS.addListener(TickHandler.INSTANCE::onTick); - MinecraftForge.EVENT_BUS.addListener(this::onServerAboutToStart); - MinecraftForge.EVENT_BUS.addListener(this::serverStopped); - MinecraftForge.EVENT_BUS.addListener(this::serverStopping); - MinecraftForge.EVENT_BUS.addListener(registration::registerCommands); - - MinecraftForge.EVENT_BUS.register(new PartPlacement()); - } - - private void commonSetup(FMLCommonSetupEvent event) { - - ApiDefinitions definitions = Api.INSTANCE.definitions(); - definitions.getRegistry().getBootstrapComponents(IInitComponent.class) - .forEachRemaining(IInitComponent::initialize); - definitions.getRegistry().getBootstrapComponents(IPostInitComponent.class) - .forEachRemaining(IPostInitComponent::postInitialize); - - Capabilities.register(); - Registration.setupInternalRegistries(); - Registration.postInit(); - - registerNetworkHandler(); - - } - - @Environment(EnvType.CLIENT) - private void clientSetup(FMLClientSetupEvent event) { - - ((ClientHelper) proxy).clientInit(); - - RenderingRegistry.registerEntityRenderingHandler(TinyTNTPrimedEntity.TYPE, TinyTNTPrimedRenderer::new); - RenderingRegistry.registerEntityRenderingHandler(SingularityEntity.TYPE, - m -> new ItemRenderer(m, MinecraftClient.getInstance().getItemRenderer())); - RenderingRegistry.registerEntityRenderingHandler(GrowingCrystalEntity.TYPE, - m -> new ItemRenderer(m, MinecraftClient.getInstance().getItemRenderer())); - RenderingRegistry.registerEntityRenderingHandler(ChargedQuartzEntity.TYPE, - m -> new ItemRenderer(m, MinecraftClient.getInstance().getItemRenderer())); - - // TODO: Do not use the internal API - final ApiDefinitions definitions = Api.INSTANCE.definitions(); - definitions.getRegistry().getBootstrapComponents(IClientSetupComponent.class) - .forEachRemaining(IClientSetupComponent::setup); - - addBuiltInModel("glass", GlassModel::new); - addBuiltInModel("sky_compass", SkyCompassModel::new); - addBuiltInModel("dummy_fluid_item", DummyFluidItemModel::new); - addBuiltInModel("memory_card", MemoryCardModel::new); - addBuiltInModel("biometric_card", BiometricCardModel::new); - addBuiltInModel("drive", DriveModel::new); - addBuiltInModel("color_applicator", ColorApplicatorModel::new); - addBuiltInModel("spatial_pylon", SpatialPylonModel::new); - addBuiltInModel("paint_splotches", PaintSplotchesModel::new); - addBuiltInModel("quantum_bridge_formed", QnbFormedModel::new); - addBuiltInModel("p2p_tunnel_frequency", P2PTunnelFrequencyModel::new); - addBuiltInModel("facade", FacadeItemModel::new); - ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "encoded_pattern"), - EncodedPatternModelLoader.INSTANCE); - ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "part_plane"), - PlaneModelLoader.INSTANCE); - ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "crafting_cube"), - CraftingCubeModelLoader.INSTANCE); - ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "uvlightmap"), UVLModelLoader.INSTANCE); - ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "cable_bus"), - new CableBusModelLoader((PartModels) Api.INSTANCE.registries().partModels())); - - } - - @Environment(EnvType.CLIENT) - private static > void addBuiltInModel(String id, Supplier modelFactory) { - ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, id), - new SimpleModelLoader<>(modelFactory)); - } - - @Nonnull - public static AppEng instance() { - if (INSTANCE == null) { - throw new IllegalStateException(); - } - return INSTANCE; - } - - public AdvancementTriggers getAdvancementTriggers() { - return this.registration.advancementTriggers; - } - -// @EventHandler -// private void preInit( final FMLPreInitializationEvent event ) -// { -// final Stopwatch watch = Stopwatch.createStarted(); -// this.configDirectory = new File( event.getModConfigurationDirectory().getPath(), "AppliedEnergistics2" ); -// -// final File configFile = new File( this.configDirectory, "AppliedEnergistics2.cfg" ); -// final File facadeFile = new File( this.configDirectory, "Facades.cfg" ); -// final File versionFile = new File( this.configDirectory, "VersionChecker.cfg" ); -// final File recipeFile = new File( this.configDirectory, "CustomRecipes.cfg" ); -// final Configuration recipeConfiguration = new Configuration( recipeFile ); -// -// AEConfig.init( configFile ); -// FacadeConfig.init( facadeFile ); -// -// AELog.info( "Pre Initialization ( started )" ); -// -// -// for( final IntegrationType type : IntegrationType.values() ) -// { -// IntegrationRegistry.INSTANCE.add( type ); -// } -// -// this.registration.preInitialize( event ); -// -// if( Platform.isClient() ) -// { -// AppEng.proxy.preinit(); -// } -// -// IntegrationRegistry.INSTANCE.preInit(); -// -// AELog.info( "Pre Initialization ( ended after " + watch.elapsed( TimeUnit.MILLISECONDS ) + "ms )" ); -// -// // Instantiate all Plugins -// List injectables = Lists.newArrayList( -// AEApi.instance() ); -// new PluginLoader().loadPlugins( injectables, event.getAsmData() ); -// } - - private void startService(final String serviceName, final Thread thread) { - thread.setName(serviceName); - thread.setPriority(Thread.MIN_PRIORITY); - - AELog.info("Starting " + serviceName); - thread.start(); - } - - private void registerNetworkHandler() { - final Stopwatch start = Stopwatch.createStarted(); - AELog.info("Post Initialization ( started )"); - - // FIXME IntegrationRegistry.INSTANCE.postInit(); - // FIXME CrashReportExtender.registerCrashCallable( new - // IntegrationCrashEnhancement() ); - - AppEng.proxy.postInit(); - AEConfig.instance().save(); - - NetworkHandler.init(new Identifier(MOD_ID, "main")); - - AELog.info("Post Initialization ( ended after " + start.elapsed(TimeUnit.MILLISECONDS) + "ms )"); - } - - private void onServerAboutToStart(final FMLServerAboutToStartEvent evt) { - WorldData.onServerStarting(evt.getServer()); - } - - private void serverStopping(final FMLServerStoppingEvent event) { - WorldData.instance().onServerStopping(); - } - - private void serverStopped(final FMLServerStoppedEvent event) { - WorldData.instance().onServerStoppped(); - TickHandler.INSTANCE.shutdown(); - } - - public static Identifier makeId(String id) { + static Identifier makeId(String id) { return new Identifier(MOD_ID, id); } + void bindTileEntitySpecialRenderer(Class tile, AEBaseBlock blk); + + List getPlayers(); + + void sendToAllNearExcept(PlayerEntity p, double x, double y, double z, double dist, World w, + BasePacket packet); + + void spawnEffect(EffectType effect, World world, double posX, double posY, double posZ, + Object extra); + + boolean shouldAddParticles(Random r); + + HitResult getRTR(); + + void postInit(); + + CableRenderMode getRenderMode(); + + void triggerUpdates(); + + void updateRenderMode(PlayerEntity player); + + boolean isActionKey(@Nonnull final ActionKey key, InputUtil.Key input); + +// public static final String MOD_NAME = "Applied Energistics 2"; +// +// private static AppEng INSTANCE; +// +// private final Registration registration; +// +// public AppEng() { +// if (INSTANCE != null) { +// throw new IllegalStateException(); +// } +// INSTANCE = this; +// ParticleTypes.register(); +// ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, AEConfig.CLIENT_SPEC); +// ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, AEConfig.COMMON_SPEC); +// +// proxy = DistExecutor.runForDist(() -> ClientHelper::new, () -> ServerHelper::new); +// +// CrashReportExtender.registerCrashCallable(new ModCrashEnhancement()); +// +// CreativeTab.init(); +// new FacadeItemGroup(); // This call has a side-effect (adding it to the creative screen) +// +// IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); +// registration = new Registration(); +// modEventBus.addGenericListener(Block.class, registration::registerBlocks); +// modEventBus.addGenericListener(Item.class, registration::registerItems); +// modEventBus.addGenericListener(EntityType.class, registration::registerEntities); +// modEventBus.addGenericListener(ParticleType.class, registration::registerParticleTypes); +// modEventBus.addGenericListener(BlockEntityType.class, registration::registerTileEntities); +// modEventBus.addGenericListener(ScreenHandlerType.class, registration::registerContainerTypes); +// modEventBus.addGenericListener(RecipeSerializer.class, registration::registerRecipeSerializers); +// modEventBus.addGenericListener(Feature.class, registration::registerWorldGen); +// modEventBus.addGenericListener(Biome.class, registration::registerBiomes); +// modEventBus.addGenericListener(ModDimension.class, registration::registerModDimension); +// +// modEventBus.addListener(Integrations::enqueueIMC); +// +// modEventBus.addListener(this::commonSetup); +// +// // Register client-only events +// DistExecutor.runWhenOn(EnvType.CLIENT, () -> registration::registerClientEvents); +// DistExecutor.runWhenOn(EnvType.CLIENT, () -> () -> modEventBus.addListener(this::clientSetup)); +// +// MinecraftForge.EVENT_BUS.addListener(TickHandler.INSTANCE::unloadWorld); +// MinecraftForge.EVENT_BUS.addListener(TickHandler.INSTANCE::onTick); +// MinecraftForge.EVENT_BUS.addListener(this::onServerAboutToStart); +// MinecraftForge.EVENT_BUS.addListener(this::serverStopped); +// MinecraftForge.EVENT_BUS.addListener(this::serverStopping); +// MinecraftForge.EVENT_BUS.addListener(registration::registerCommands); +// +// MinecraftForge.EVENT_BUS.register(new PartPlacement()); +// } +// +// private void commonSetup(FMLCommonSetupEvent event) { +// +// ApiDefinitions definitions = Api.INSTANCE.definitions(); +// definitions.getRegistry().getBootstrapComponents(IInitComponent.class) +// .forEachRemaining(IInitComponent::initialize); +// definitions.getRegistry().getBootstrapComponents(IPostInitComponent.class) +// .forEachRemaining(IPostInitComponent::postInitialize); +// +// Capabilities.register(); +// Registration.setupInternalRegistries(); +// Registration.postInit(); +// +// registerNetworkHandler(); +// +// } +// +// @Environment(EnvType.CLIENT) +// private void clientSetup(FMLClientSetupEvent event) { +// +// ((ClientHelper) proxy).clientInit(); +// +// RenderingRegistry.registerEntityRenderingHandler(TinyTNTPrimedEntity.TYPE, TinyTNTPrimedRenderer::new); +// RenderingRegistry.registerEntityRenderingHandler(SingularityEntity.TYPE, +// m -> new ItemRenderer(m, MinecraftClient.getInstance().getItemRenderer())); +// RenderingRegistry.registerEntityRenderingHandler(GrowingCrystalEntity.TYPE, +// m -> new ItemRenderer(m, MinecraftClient.getInstance().getItemRenderer())); +// RenderingRegistry.registerEntityRenderingHandler(ChargedQuartzEntity.TYPE, +// m -> new ItemRenderer(m, MinecraftClient.getInstance().getItemRenderer())); +// +// // TODO: Do not use the internal API +// final ApiDefinitions definitions = Api.INSTANCE.definitions(); +// definitions.getRegistry().getBootstrapComponents(IClientSetupComponent.class) +// .forEachRemaining(IClientSetupComponent::setup); +// +// addBuiltInModel("glass", GlassModel::new); +// addBuiltInModel("sky_compass", SkyCompassModel::new); +// addBuiltInModel("dummy_fluid_item", DummyFluidItemModel::new); +// addBuiltInModel("memory_card", MemoryCardModel::new); +// addBuiltInModel("biometric_card", BiometricCardModel::new); +// addBuiltInModel("drive", DriveModel::new); +// addBuiltInModel("color_applicator", ColorApplicatorModel::new); +// addBuiltInModel("spatial_pylon", SpatialPylonModel::new); +// addBuiltInModel("paint_splotches", PaintSplotchesModel::new); +// addBuiltInModel("quantum_bridge_formed", QnbFormedModel::new); +// addBuiltInModel("p2p_tunnel_frequency", P2PTunnelFrequencyModel::new); +// addBuiltInModel("facade", FacadeItemModel::new); +// ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "encoded_pattern"), +// EncodedPatternModelLoader.INSTANCE); +// ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "part_plane"), +// PlaneModelLoader.INSTANCE); +// ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "crafting_cube"), +// CraftingCubeModelLoader.INSTANCE); +// ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "uvlightmap"), UVLModelLoader.INSTANCE); +// ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, "cable_bus"), +// new CableBusModelLoader((PartModels) Api.INSTANCE.registries().partModels())); +// +// } +// +// @Environment(EnvType.CLIENT) +// private static > void addBuiltInModel(String id, Supplier modelFactory) { +// ModelLoaderRegistry.registerLoader(new Identifier(AppEng.MOD_ID, id), +// new SimpleModelLoader<>(modelFactory)); +// } +// +// @Nonnull +// public static AppEng instance() { +// if (INSTANCE == null) { +// throw new IllegalStateException(); +// } +// return INSTANCE; +// } +// +// public AdvancementTriggers getAdvancementTriggers() { +// return this.registration.advancementTriggers; +// } +// +//// @EventHandler +//// private void preInit( final FMLPreInitializationEvent event ) +//// { +//// final Stopwatch watch = Stopwatch.createStarted(); +//// this.configDirectory = new File( event.getModConfigurationDirectory().getPath(), "AppliedEnergistics2" ); +//// +//// final File configFile = new File( this.configDirectory, "AppliedEnergistics2.cfg" ); +//// final File facadeFile = new File( this.configDirectory, "Facades.cfg" ); +//// final File versionFile = new File( this.configDirectory, "VersionChecker.cfg" ); +//// final File recipeFile = new File( this.configDirectory, "CustomRecipes.cfg" ); +//// final Configuration recipeConfiguration = new Configuration( recipeFile ); +//// +//// AEConfig.init( configFile ); +//// FacadeConfig.init( facadeFile ); +//// +//// AELog.info( "Pre Initialization ( started )" ); +//// +//// +//// for( final IntegrationType type : IntegrationType.values() ) +//// { +//// IntegrationRegistry.INSTANCE.add( type ); +//// } +//// +//// this.registration.preInitialize( event ); +//// +//// if( Platform.isClient() ) +//// { +//// AppEng.proxy.preinit(); +//// } +//// +//// IntegrationRegistry.INSTANCE.preInit(); +//// +//// AELog.info( "Pre Initialization ( ended after " + watch.elapsed( TimeUnit.MILLISECONDS ) + "ms )" ); +//// +//// // Instantiate all Plugins +//// List injectables = Lists.newArrayList( +//// AEApi.instance() ); +//// new PluginLoader().loadPlugins( injectables, event.getAsmData() ); +//// } +// +// private void startService(final String serviceName, final Thread thread) { +// thread.setName(serviceName); +// thread.setPriority(Thread.MIN_PRIORITY); +// +// AELog.info("Starting " + serviceName); +// thread.start(); +// } +// +// private void registerNetworkHandler() { +// final Stopwatch start = Stopwatch.createStarted(); +// AELog.info("Post Initialization ( started )"); +// +// // FIXME IntegrationRegistry.INSTANCE.postInit(); +// // FIXME CrashReportExtender.registerCrashCallable( new +// // IntegrationCrashEnhancement() ); +// +// AppEng.proxy.postInit(); +// AEConfig.instance().save(); +// +// NetworkHandler.init(new Identifier(MOD_ID, "main")); +// +// AELog.info("Post Initialization ( ended after " + start.elapsed(TimeUnit.MILLISECONDS) + "ms )"); +// } +// +// private void onServerAboutToStart(final FMLServerAboutToStartEvent evt) { +// WorldData.onServerStarting(evt.getServer()); +// } +// +// private void serverStopping(final FMLServerStoppingEvent event) { +// WorldData.instance().onServerStopping(); +// } +// +// private void serverStopped(final FMLServerStoppedEvent event) { +// WorldData.instance().onServerStoppped(); +// TickHandler.INSTANCE.shutdown(); +// } + } diff --git a/core/src/main/java/appeng/core/CreativeTab.java b/core/src/main/java/appeng/core/CreativeTab.java new file mode 100644 index 000000000..8ae0b8594 --- /dev/null +++ b/core/src/main/java/appeng/core/CreativeTab.java @@ -0,0 +1,67 @@ +/* + * 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.core; + +import appeng.api.AEApi; +import appeng.api.definitions.IBlocks; +import appeng.api.definitions.IDefinitions; +import appeng.api.definitions.IItemDefinition; +import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; + +import java.util.ArrayList; +import java.util.List; + +public final class CreativeTab { + + private static final List itemDefs = new ArrayList<>(); + + public static ItemGroup INSTANCE; + + public static void init() { + INSTANCE = FabricItemGroupBuilder.create(AppEng.makeId("main")) + .icon(() -> { + final IDefinitions definitions = AEApi.instance().definitions(); + final IBlocks blocks = definitions.blocks(); + return blocks.controller().stack(1); + }) + .appendItems(CreativeTab::fill) + .build(); + } + + public static void add(IItemDefinition itemDef) { + itemDefs.add(itemDef); + } + + private static void fill(List items) { + for (IItemDefinition itemDef : itemDefs) { + itemDef.item().appendStacks(INSTANCE, new ListWrapper(items)); + } + } + + private static class ListWrapper extends DefaultedList { + + public ListWrapper(List items) { + super(items, ItemStack.EMPTY); + } + } + +} \ No newline at end of file diff --git a/core/src/main/java/appeng/core/config/BaseOption.java b/core/src/main/java/appeng/core/config/BaseOption.java new file mode 100644 index 000000000..51f28dea0 --- /dev/null +++ b/core/src/main/java/appeng/core/config/BaseOption.java @@ -0,0 +1,29 @@ +package appeng.core.config; + +import com.google.gson.JsonElement; + +public abstract class BaseOption { + + protected final ConfigSection parent; + + protected final String id; + + protected final String comment; + + public BaseOption(ConfigSection parent, String id, String comment) { + this.parent = parent; + this.id = id; + this.comment = comment; + } + + protected abstract JsonElement write(); + + protected abstract void read(JsonElement element); + + public abstract boolean isDifferentFromDefault(); + + public abstract String getDefaultAsString(); + + public abstract String getCurrentValueAsString(); + +} diff --git a/core/src/main/java/appeng/core/config/BooleanOption.java b/core/src/main/java/appeng/core/config/BooleanOption.java new file mode 100644 index 000000000..547d9ba7d --- /dev/null +++ b/core/src/main/java/appeng/core/config/BooleanOption.java @@ -0,0 +1,61 @@ +package appeng.core.config; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; + +public class BooleanOption extends BaseOption { + + private final boolean defaultValue; + private boolean currentValue; + + public BooleanOption(ConfigSection parent, String id, String comment, boolean defaultValue) { + super(parent, id, comment); + this.defaultValue = defaultValue; + this.currentValue = defaultValue; + } + + public boolean get() { + return currentValue; + } + + public void set(boolean value) { + if (value == currentValue) { + return; + } + currentValue = value; + parent.markDirty(); + } + + @Override + protected JsonElement write() { + return new JsonPrimitive(currentValue); + } + + @Override + protected void read(JsonElement element) { + if (!element.isJsonPrimitive()) { + throw new ConfigValidationException(this, "Expected a JSON primitive, but found: " + element); + } + JsonPrimitive primitive = element.getAsJsonPrimitive(); + if (!primitive.isBoolean()) { + throw new ConfigValidationException(this, "Expected a JSON boolean, but found: " + primitive); + } + currentValue = primitive.getAsBoolean(); + } + + @Override + public boolean isDifferentFromDefault() { + return currentValue != defaultValue; + } + + @Override + public String getDefaultAsString() { + return String.valueOf(defaultValue); + } + + @Override + public String getCurrentValueAsString() { + return String.valueOf(currentValue); + } + +} diff --git a/core/src/main/java/appeng/core/config/ConfigSection.java b/core/src/main/java/appeng/core/config/ConfigSection.java new file mode 100644 index 000000000..e7cc060cd --- /dev/null +++ b/core/src/main/java/appeng/core/config/ConfigSection.java @@ -0,0 +1,113 @@ +package appeng.core.config; + +import java.util.List; + +public class ConfigSection { + + private final ConfigSection parent; + + private final String id; + + private final String fullId; + + private final String comment; + + private Runnable changeListener; + + private ConfigSection(String id, String comment) { + this.parent = null; + this.id = id; + this.fullId = id; + this.comment = comment; + } + + private ConfigSection(ConfigSection parent, String id, String comment) { + this.parent = parent; + this.id = id; + this.comment = comment; + if (parent.fullId != null) { + this.fullId = parent.fullId + "." + id; + } else { + this.fullId = id; + } + } + + public static ConfigSection createRoot() { + return new ConfigSection(null, null); + } + + public ConfigSection subsection(String id) { + return this.subsection(id, null); + } + + public ConfigSection subsection(String id, String comment) { + return new ConfigSection(this, id, comment); + } + + public IntegerOption addInt(String id, int defaultValue) { + return addInt(id, defaultValue, comment); + } + + public IntegerOption addInt(String id, int defaultValue, String comment) { + return addInt(id, defaultValue, Integer.MIN_VALUE, Integer.MAX_VALUE, comment); + } + + public IntegerOption addInt(String id, int defaultValue, int minValue, int maxValue, String comment) { + return new IntegerOption(this, id, comment, defaultValue, minValue, maxValue); + } + + public DoubleOption addDouble(String id, double defaultValue) { + return addDouble(id, defaultValue, Double.MIN_VALUE, Double.MAX_VALUE); + } + + public DoubleOption addDouble(String id, double defaultValue, String comment) { + return addDouble(id, defaultValue, Double.MIN_VALUE, Double.MAX_VALUE, comment); + } + + public DoubleOption addDouble(String id, double defaultValue, double minValue, double maxValue) { + return addDouble(id, defaultValue, minValue, maxValue, null); + } + + public DoubleOption addDouble(String id, double defaultValue, double minValue, double maxValue, String comment) { + return new DoubleOption(this, id, comment, defaultValue, minValue, maxValue); + } + + public BooleanOption addBoolean(String id, boolean defaultValue) { + return addBoolean(id, defaultValue, null); + } + + public BooleanOption addBoolean(String id, boolean defaultValue, String comment) { + return new BooleanOption(this, id, comment, defaultValue); + } + + public StringListOption addStringList(String id, List defaultValue) { + return addStringList(id, defaultValue, null); + } + + public StringListOption addStringList(String id, List defaultValue, String comment) { + return new StringListOption(this, id, comment, defaultValue); + } + + public > EnumOption addEnum(String id, T defaultValue) { + return addEnum(id, defaultValue, null); + } + + public > EnumOption addEnum(String id, T defaultValue, String comment) { + return new EnumOption<>(this, id, comment, defaultValue); + } + + public void setChangeListener(Runnable changeListener) { + this.changeListener = changeListener; + } + + public void markDirty() { + if (changeListener != null) { + this.changeListener.run(); + } + if (this.parent != null) { + this.parent.markDirty(); + } + } + +} + diff --git a/core/src/main/java/appeng/core/config/ConfigValidationException.java b/core/src/main/java/appeng/core/config/ConfigValidationException.java new file mode 100644 index 000000000..e7a2b399f --- /dev/null +++ b/core/src/main/java/appeng/core/config/ConfigValidationException.java @@ -0,0 +1,8 @@ +package appeng.core.config; + +public class ConfigValidationException extends RuntimeException { + + public ConfigValidationException(BaseOption option, String message) { + } + +} diff --git a/core/src/main/java/appeng/core/config/DoubleOption.java b/core/src/main/java/appeng/core/config/DoubleOption.java new file mode 100644 index 000000000..6abeded86 --- /dev/null +++ b/core/src/main/java/appeng/core/config/DoubleOption.java @@ -0,0 +1,85 @@ +package appeng.core.config; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; + +public class DoubleOption extends BaseOption { + + private final double defaultValue; + private final double minValue; + private final double maxValue; + private double currentValue; + + public DoubleOption(ConfigSection parent, String id, String comment, double defaultValue, double minValue, double maxValue) { + super(parent, id, comment); + this.defaultValue = defaultValue; + this.currentValue = defaultValue; + this.minValue = minValue; + this.maxValue = maxValue; + } + + public double get() { + return currentValue; + } + + public void set(double value) { + if (value == currentValue) { + return; + } + checkValue(value); + currentValue = value; + parent.markDirty(); + } + + private void checkValue(double value) { + if (value < minValue || value > maxValue) { + StringBuilder rangeDescription = new StringBuilder(); + if (minValue != Double.MIN_VALUE) { + rangeDescription.append("min: ").append(minValue); + } + if (maxValue != Double.MAX_VALUE) { + if (rangeDescription.length() > 0) { + rangeDescription.append(", "); + } + rangeDescription.append("max: ").append(maxValue); + } + + throw new ConfigValidationException(this, "Value out of range: " + value + " (" + rangeDescription + ")"); + } + } + + @Override + protected JsonElement write() { + return new JsonPrimitive(currentValue); + } + + @Override + protected void read(JsonElement element) { + if (!element.isJsonPrimitive()) { + throw new ConfigValidationException(this, "Expected a JSON primitive, but found: " + element); + } + JsonPrimitive primitive = element.getAsJsonPrimitive(); + if (!primitive.isNumber()) { + throw new ConfigValidationException(this, "Expected a JSON number, but found: " + primitive); + } + double value = primitive.getAsDouble(); + checkValue(value); + currentValue = value; + } + + @Override + public boolean isDifferentFromDefault() { + return currentValue != defaultValue; + } + + @Override + public String getDefaultAsString() { + return String.valueOf(defaultValue); + } + + @Override + public String getCurrentValueAsString() { + return String.valueOf(currentValue); + } + +} diff --git a/core/src/main/java/appeng/core/config/EnumOption.java b/core/src/main/java/appeng/core/config/EnumOption.java new file mode 100644 index 000000000..b410ef642 --- /dev/null +++ b/core/src/main/java/appeng/core/config/EnumOption.java @@ -0,0 +1,79 @@ +package appeng.core.config; + +import com.google.common.base.Preconditions; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; + +import java.util.Arrays; +import java.util.stream.Collectors; + +public class EnumOption> extends BaseOption { + + private final T defaultValue; + private T currentValue; + + public EnumOption(ConfigSection parent, String id, String comment, T defaultValue) { + super(parent, id, comment); + this.defaultValue = defaultValue; + this.currentValue = defaultValue; + } + + public T get() { + return currentValue; + } + + public void set(T value) { + Preconditions.checkNotNull(value); + if (value == currentValue) { + return; + } + currentValue = value; + parent.markDirty(); + } + + @Override + protected JsonElement write() { + return new JsonPrimitive(currentValue.name().toLowerCase()); + } + + @Override + protected void read(JsonElement element) { + if (!element.isJsonPrimitive()) { + throw new ConfigValidationException(this, "Expected a JSON primitive, but found: " + element); + } + JsonPrimitive primitive = element.getAsJsonPrimitive(); + if (!primitive.isString()) { + throw new ConfigValidationException(this, "Expected a JSON string, but found: " + primitive); + } + String enumName = primitive.getAsString(); + + T[] enumConstants = defaultValue.getDeclaringClass().getEnumConstants(); + for (T enumConstant : enumConstants) { + if (enumConstant.name().equalsIgnoreCase(enumName)) { + currentValue = enumConstant; + return; + } + } + + String allowedValues = Arrays.stream(enumConstants) + .map(e -> e.name().toLowerCase()) + .collect(Collectors.joining(", ")); + throw new ConfigValidationException(this, "Expected one of: " + allowedValues); + } + + @Override + public boolean isDifferentFromDefault() { + return currentValue != defaultValue; + } + + @Override + public String getDefaultAsString() { + return String.valueOf(defaultValue.name().toLowerCase()); + } + + @Override + public String getCurrentValueAsString() { + return String.valueOf(currentValue.name().toLowerCase()); + } + +} diff --git a/core/src/main/java/appeng/core/config/IntegerOption.java b/core/src/main/java/appeng/core/config/IntegerOption.java new file mode 100644 index 000000000..705e50748 --- /dev/null +++ b/core/src/main/java/appeng/core/config/IntegerOption.java @@ -0,0 +1,90 @@ +package appeng.core.config; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; + +public class IntegerOption extends BaseOption { + + private final int defaultValue; + private final int minValue; + private final int maxValue; + private int currentValue; + + public IntegerOption(ConfigSection parent, String id, String comment, int defaultValue, int minValue, int maxValue) { + super(parent, id, comment); + this.defaultValue = defaultValue; + this.currentValue = defaultValue; + this.minValue = minValue; + this.maxValue = maxValue; + } + + public int get() { + return currentValue; + } + + public void set(int value) { + if (value == currentValue) { + return; + } + checkValue(value); + currentValue = value; + parent.markDirty(); + } + + private void checkValue(int value) { + if (value < minValue || value > maxValue) { + StringBuilder rangeDescription = new StringBuilder(); + if (minValue != Integer.MIN_VALUE) { + rangeDescription.append("min: ").append(minValue); + } + if (maxValue != Integer.MAX_VALUE) { + if (rangeDescription.length() > 0) { + rangeDescription.append(", "); + } + rangeDescription.append("max: ").append(maxValue); + } + + throw new ConfigValidationException(this, "Value out of range: " + value + " (" + rangeDescription + ")"); + } + } + + @Override + protected JsonElement write() { + return new JsonPrimitive(currentValue); + } + + @Override + protected void read(JsonElement element) { + if (!element.isJsonPrimitive()) { + throw new ConfigValidationException(this, "Expected a JSON primitive, but found: " + element); + } + JsonPrimitive primitive = element.getAsJsonPrimitive(); + if (!primitive.isNumber()) { + throw new ConfigValidationException(this, "Expected a JSON number, but found: " + primitive); + } + int value; + try { + value = primitive.getAsInt(); + } catch (NumberFormatException ignored) { + throw new ConfigValidationException(this, "Expected an integer value, but found: " + primitive); + } + checkValue(value); + currentValue = value; + } + + @Override + public boolean isDifferentFromDefault() { + return currentValue != defaultValue; + } + + @Override + public String getDefaultAsString() { + return String.valueOf(defaultValue); + } + + @Override + public String getCurrentValueAsString() { + return String.valueOf(currentValue); + } + +} diff --git a/core/src/main/java/appeng/core/config/StringListOption.java b/core/src/main/java/appeng/core/config/StringListOption.java new file mode 100644 index 000000000..4b842291d --- /dev/null +++ b/core/src/main/java/appeng/core/config/StringListOption.java @@ -0,0 +1,80 @@ +package appeng.core.config; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; + +import java.util.ArrayList; +import java.util.List; + +public class StringListOption extends BaseOption { + + private final List defaultValue; + private List currentValue; + + public StringListOption(ConfigSection parent, String id, String comment, List defaultValue) { + super(parent, id, comment); + this.defaultValue = ImmutableList.copyOf(defaultValue); + this.currentValue = this.defaultValue; + } + + public List get() { + return currentValue; + } + + public void set(List value) { + Preconditions.checkNotNull(value); + if (value.equals(currentValue)) { + return; + } + currentValue = ImmutableList.copyOf(value); + parent.markDirty(); + } + + @Override + protected JsonElement write() { + JsonArray arr = new JsonArray(); + for (String s : currentValue) { + arr.add(s); + } + return arr; + } + + @Override + protected void read(JsonElement element) { + if (!element.isJsonArray()) { + throw new ConfigValidationException(this, "Expected a JSON array, but found: " + element); + } + JsonArray array = element.getAsJsonArray(); + List values = new ArrayList<>(array.size()); + for (JsonElement arrEl : array) { + if (!arrEl.isJsonPrimitive()) { + throw new ConfigValidationException(this, "Expected a JSON array of strings, but found: " + arrEl); + } + JsonPrimitive primitive = arrEl.getAsJsonPrimitive(); + if (!primitive.isString()) { + throw new ConfigValidationException(this, "Expected a JSON array of strings, but found: " + arrEl); + } + values.add(primitive.getAsString()); + } + + this.currentValue = ImmutableList.copyOf(values); + } + + @Override + public boolean isDifferentFromDefault() { + return currentValue != defaultValue; + } + + @Override + public String getDefaultAsString() { + return String.join(",", defaultValue); + } + + @Override + public String getCurrentValueAsString() { + return String.join(",", currentValue); + } +} diff --git a/core/src/main/java/appeng/core/features/MaterialStackSrc.java b/core/src/main/java/appeng/core/features/MaterialStackSrc.java deleted file mode 100644 index b0af3ed53..000000000 --- a/core/src/main/java/appeng/core/features/MaterialStackSrc.java +++ /dev/null @@ -1,53 +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.core.features; - -import com.google.common.base.Preconditions; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import appeng.items.materials.MaterialType; - -public class MaterialStackSrc implements IStackSrc { - private final MaterialType src; - private final boolean enabled; - - public MaterialStackSrc(final MaterialType src, boolean enabled) { - Preconditions.checkNotNull(src); - - this.src = src; - this.enabled = enabled; - } - - @Override - public ItemStack stack(final int stackSize) { - return this.src.stack(stackSize); - } - - @Override - public Item getItem() { - return this.src.getItemInstance(); - } - - @Override - public boolean isEnabled() { - return this.enabled; - } -} diff --git a/src/main/java/appeng/core/sync/BasePacket.java b/core/src/main/java/appeng/core/sync/BasePacket.java similarity index 73% rename from src/main/java/appeng/core/sync/BasePacket.java rename to core/src/main/java/appeng/core/sync/BasePacket.java index 8c6178b2b..f7b5924bf 100644 --- a/src/main/java/appeng/core/sync/BasePacket.java +++ b/core/src/main/java/appeng/core/sync/BasePacket.java @@ -18,20 +18,23 @@ package appeng.core.sync; -import net.minecraft.network.PacketByteBuf; -import org.apache.commons.lang3.tuple.Pair; - -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.network.IPacket; -import net.minecraftforge.fml.network.NetworkDirection; - import appeng.api.features.AEFeature; import appeng.core.AEConfig; import appeng.core.AELog; import appeng.core.sync.network.INetworkInfo; -import appeng.core.sync.network.NetworkHandler; +import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; +import net.fabricmc.fabric.api.network.ServerSidePacketRegistry; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.NetworkSide; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.util.Identifier; public abstract class BasePacket { + + // KEEP THIS SHORT. It's serialized as a string! + public static final Identifier CHANNEL = new Identifier("ae2:m"); + private PacketByteBuf p; public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) { @@ -40,7 +43,8 @@ public abstract class BasePacket { } public final int getPacketID() { - return BasePacketHandler.PacketTypes.getID(this.getClass()).ordinal(); + throw new IllegalStateException(); + // FIXME FABRIC return BasePacketHandler.PacketTypes.getID(this.getClass()).ordinal(); } public void clientPacketData(final INetworkInfo network, final PlayerEntity player) { @@ -53,7 +57,7 @@ public abstract class BasePacket { this.p = data; } - public IPacket toPacket(NetworkDirection direction) { + public Packet toPacket(NetworkSide direction) { if (this.p.array().length > 2 * 1024 * 1024) // 2k walking room :) { throw new IllegalArgumentException( @@ -64,6 +68,10 @@ public abstract class BasePacket { AELog.info(this.getClass().getName() + " : " + p.readableBytes()); } - return direction.buildPacket(Pair.of(p, 0), NetworkHandler.instance().getChannel()).getThis(); + if (direction == NetworkSide.SERVERBOUND) { + return ClientSidePacketRegistry.INSTANCE.toPacket(CHANNEL, this.p); + } else { + return ServerSidePacketRegistry.INSTANCE.toPacket(CHANNEL, this.p); + } } } diff --git a/src/main/java/appeng/core/sync/network/INetworkInfo.java b/core/src/main/java/appeng/core/sync/network/INetworkInfo.java similarity index 100% rename from src/main/java/appeng/core/sync/network/INetworkInfo.java rename to core/src/main/java/appeng/core/sync/network/INetworkInfo.java diff --git a/src/main/java/appeng/core/worlddata/CompassData.java b/core/src/main/java/appeng/core/worlddata/CompassData.java similarity index 100% rename from src/main/java/appeng/core/worlddata/CompassData.java rename to core/src/main/java/appeng/core/worlddata/CompassData.java diff --git a/src/main/java/appeng/core/worlddata/IWorldCompassData.java b/core/src/main/java/appeng/core/worlddata/IWorldCompassData.java similarity index 100% rename from src/main/java/appeng/core/worlddata/IWorldCompassData.java rename to core/src/main/java/appeng/core/worlddata/IWorldCompassData.java diff --git a/src/main/java/appeng/core/worlddata/IWorldData.java b/core/src/main/java/appeng/core/worlddata/IWorldData.java similarity index 100% rename from src/main/java/appeng/core/worlddata/IWorldData.java rename to core/src/main/java/appeng/core/worlddata/IWorldData.java diff --git a/src/main/java/appeng/core/worlddata/IWorldGridStorageData.java b/core/src/main/java/appeng/core/worlddata/IWorldGridStorageData.java similarity index 100% rename from src/main/java/appeng/core/worlddata/IWorldGridStorageData.java rename to core/src/main/java/appeng/core/worlddata/IWorldGridStorageData.java diff --git a/src/main/java/appeng/core/worlddata/IWorldPlayerData.java b/core/src/main/java/appeng/core/worlddata/IWorldPlayerData.java similarity index 100% rename from src/main/java/appeng/core/worlddata/IWorldPlayerData.java rename to core/src/main/java/appeng/core/worlddata/IWorldPlayerData.java diff --git a/src/main/java/appeng/core/worlddata/MeteorDataNameEncoder.java b/core/src/main/java/appeng/core/worlddata/MeteorDataNameEncoder.java similarity index 100% rename from src/main/java/appeng/core/worlddata/MeteorDataNameEncoder.java rename to core/src/main/java/appeng/core/worlddata/MeteorDataNameEncoder.java diff --git a/src/main/java/appeng/core/worlddata/PlayerData.java b/core/src/main/java/appeng/core/worlddata/PlayerData.java similarity index 94% rename from src/main/java/appeng/core/worlddata/PlayerData.java rename to core/src/main/java/appeng/core/worlddata/PlayerData.java index 5366e7443..e0df2240a 100644 --- a/src/main/java/appeng/core/worlddata/PlayerData.java +++ b/core/src/main/java/appeng/core/worlddata/PlayerData.java @@ -30,7 +30,7 @@ import com.google.common.collect.HashBiMap; import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.storage.WorldSavedData; +import net.minecraft.world.PersistentState; import appeng.core.AELog; import appeng.core.AppEng; @@ -44,7 +44,7 @@ import appeng.core.AppEng; * @version rv3 - 30.05.2015 * @since rv3 30.05.2015 */ -final class PlayerData extends WorldSavedData implements IWorldPlayerData { +final class PlayerData extends PersistentState implements IWorldPlayerData { public static final String NAME = AppEng.MOD_ID + "_players"; public static final String TAG_PLAYER_IDS = "playerIds"; @@ -85,7 +85,7 @@ final class PlayerData extends WorldSavedData implements IWorldPlayerData { } @Override - public void read(CompoundTag nbt) { + public void fromTag(CompoundTag nbt) { int[] playerIds = nbt.getIntArray(TAG_PLAYER_IDS); long[] profileIds = nbt.getLongArray(TAG_PROFILE_IDS); @@ -107,7 +107,7 @@ final class PlayerData extends WorldSavedData implements IWorldPlayerData { } @Override - public CompoundTag write(CompoundTag compound) { + public CompoundTag toTag(CompoundTag compound) { int index = 0; int[] playerIds = new int[mapping.size()]; long[] profileIds = new long[mapping.size() * 2]; diff --git a/src/main/java/appeng/core/worlddata/StorageData.java b/core/src/main/java/appeng/core/worlddata/StorageData.java similarity index 93% rename from src/main/java/appeng/core/worlddata/StorageData.java rename to core/src/main/java/appeng/core/worlddata/StorageData.java index 27553b1ee..17ff9ece6 100644 --- a/src/main/java/appeng/core/worlddata/StorageData.java +++ b/core/src/main/java/appeng/core/worlddata/StorageData.java @@ -24,7 +24,7 @@ import java.util.Map; import javax.annotation.Nonnull; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.storage.WorldSavedData; +import net.minecraft.world.PersistentState; import appeng.core.AELog; import appeng.core.AppEng; @@ -35,7 +35,7 @@ import appeng.me.GridStorage; * @version rv3 - 30.05.2015 * @since rv3 30.05.2015 */ -final class StorageData extends WorldSavedData implements IWorldGridStorageData { +final class StorageData extends PersistentState implements IWorldGridStorageData { public static final String NAME = AppEng.MOD_ID + "_storage"; @@ -97,13 +97,13 @@ final class StorageData extends WorldSavedData implements IWorldGridStorageData } @Override - public void read(CompoundTag tag) { + public void fromTag(CompoundTag tag) { nextGridId = tag.getLong(TAG_NEXT_ID); // Load serialized grid storage CompoundTag storageTag = tag.getCompound(TAG_STORAGE); - for (String storageIdStr : storageTag.keySet()) { + for (String storageIdStr : storageTag.getKeys()) { long storageId; try { storageId = Long.parseLong(storageIdStr); @@ -117,14 +117,14 @@ final class StorageData extends WorldSavedData implements IWorldGridStorageData // Load ordered values map CompoundTag orderedValuesTag = tag.getCompound(TAG_ORDERED_VALUES); this.orderedValues.clear(); - for (String key : orderedValuesTag.keySet()) { + for (String key : orderedValuesTag.getKeys()) { this.orderedValues.put(key, orderedValuesTag.getInt(key)); } } @Override - public CompoundTag write(CompoundTag tag) { + public CompoundTag toTag(CompoundTag tag) { tag.putLong(TAG_NEXT_ID, nextGridId); diff --git a/src/main/java/appeng/core/worlddata/WorldData.java b/core/src/main/java/appeng/core/worlddata/WorldData.java similarity index 91% rename from src/main/java/appeng/core/worlddata/WorldData.java rename to core/src/main/java/appeng/core/worlddata/WorldData.java index 63728a630..528ccb8d7 100644 --- a/src/main/java/appeng/core/worlddata/WorldData.java +++ b/core/src/main/java/appeng/core/worlddata/WorldData.java @@ -62,13 +62,13 @@ public final class WorldData implements IWorldData { Preconditions.checkNotNull(overworld); // Attach shared data to the server's overworld dimension - if (overworld.getDimension().getType() != DimensionType.OVERWORLD) { + if (overworld.getDimension() != DimensionType.getOverworldDimensionType()) { throw new IllegalStateException( "The server doesn't have an Overworld dimension we could store our data on!"); } - final PlayerData playerData = overworld.getSavedData().getOrCreate(PlayerData::new, PlayerData.NAME); - final StorageData storageData = overworld.getSavedData().getOrCreate(StorageData::new, StorageData.NAME); + final PlayerData playerData = overworld.getPersistentStateManager().getOrCreate(PlayerData::new, PlayerData.NAME); + final StorageData storageData = overworld.getPersistentStateManager().getOrCreate(StorageData::new, StorageData.NAME); final ThreadFactory compassThreadFactory = new CompassThreadFactory(); final CompassService compassService = new CompassService(server, compassThreadFactory); @@ -96,7 +96,7 @@ public final class WorldData implements IWorldData { throw new IllegalStateException("No server set."); } - ServerWorld overworld = server.getWorld(DimensionType.OVERWORLD); + ServerWorld overworld = server.getOverworld(); instance = new WorldData(overworld); } return instance; diff --git a/core/src/main/java/appeng/decorative/solid/ChargedQuartzOreBlock.java b/core/src/main/java/appeng/decorative/solid/ChargedQuartzOreBlock.java index 8073c9c61..6696c6dad 100644 --- a/core/src/main/java/appeng/decorative/solid/ChargedQuartzOreBlock.java +++ b/core/src/main/java/appeng/decorative/solid/ChargedQuartzOreBlock.java @@ -71,7 +71,7 @@ public class ChargedQuartzOreBlock extends QuartzOreBlock { break; } - if (AppEng.proxy.shouldAddParticles(r)) { + if (AppEng.INSTANCE.shouldAddParticles(r)) { MinecraftClient.getInstance().particleManager.addParticle(ParticleTypes.CHARGED_ORE, pos.getX() + xOff, pos.getY() + yOff, pos.getZ() + zOff, 0.0f, 0.0f, 0.0f); } diff --git a/core/src/main/java/appeng/decorative/solid/QuartzLampBlock.java b/core/src/main/java/appeng/decorative/solid/QuartzLampBlock.java index 5cf44ffef..a5cc258aa 100644 --- a/core/src/main/java/appeng/decorative/solid/QuartzLampBlock.java +++ b/core/src/main/java/appeng/decorative/solid/QuartzLampBlock.java @@ -43,7 +43,7 @@ public class QuartzLampBlock extends QuartzGlassBlock { return; } - if (AppEng.proxy.shouldAddParticles(r)) { + if (AppEng.INSTANCE.shouldAddParticles(r)) { final double d0 = (r.nextFloat() - 0.5F) * 0.96D; final double d1 = (r.nextFloat() - 0.5F) * 0.96D; final double d2 = (r.nextFloat() - 0.5F) * 0.96D; diff --git a/core/src/main/java/appeng/decorative/solid/SkyStoneBlock.java b/core/src/main/java/appeng/decorative/solid/SkyStoneBlock.java index 8c645955a..d55ddf852 100644 --- a/core/src/main/java/appeng/decorative/solid/SkyStoneBlock.java +++ b/core/src/main/java/appeng/decorative/solid/SkyStoneBlock.java @@ -18,22 +18,15 @@ package appeng.decorative.solid; -import net.minecraft.block.BlockState; -import net.minecraft.inventory.EquipmentSlotType; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.WorldAccess; -import net.minecraft.world.World; -import net.minecraft.server.world.ServerWorld; -import net.minecraftforge.common.MinecraftForge; -import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; - import appeng.block.AEBaseBlock; import appeng.core.worlddata.WorldData; +import net.minecraft.block.BlockState; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; public class SkyStoneBlock extends AEBaseBlock { private static final float BREAK_SPEAK_SCALAR = 0.1f; @@ -43,47 +36,50 @@ public class SkyStoneBlock extends AEBaseBlock { public SkyStoneBlock(SkystoneType type, Settings props) { super(props); this.type = type; - - MinecraftForge.EVENT_BUS.register(this); } - @SubscribeEvent - public void breakFaster(final PlayerEvent.BreakSpeed event) { - if (event.getState().getBlock() == this && event.getPlayer() != null) { - final ItemStack is = event.getPlayer().getItemStackFromSlot(EquipmentSlotType.MAINHAND); - int level = -1; - - if (!is.isEmpty()) { - level = is.getItem().getHarvestLevel(is, FabricToolTags.PICKAXES, event.getPlayer(), event.getState()); - } - - if (this.type != SkystoneType.STONE || level >= 3 || event.getOriginalSpeed() > BREAK_SPEAK_THRESHOLD) { - event.setNewSpeed(event.getNewSpeed() / BREAK_SPEAK_SCALAR); - } - } - } +// FIXME FABRIC +// @SubscribeEvent +// public void breakFaster(final PlayerEvent.BreakSpeed event) { +// if (event.getState().getBlock() == this && event.getPlayer() != null) { +// final ItemStack is = event.getPlayer().getItemStackFromSlot(EquipmentSlot.MAINHAND); +// int level = -1; +// +// if (!is.isEmpty()) { +// level = is.getItem().getHarvestLevel(is, FabricToolTags.PICKAXES, event.getPlayer(), event.getState()); +// } +// +// if (this.type != SkystoneType.STONE || level >= 3 || event.getOriginalSpeed() > BREAK_SPEAK_THRESHOLD) { +// event.setNewSpeed(event.getNewSpeed() / BREAK_SPEAK_SCALAR); +// } +// } +// } @Override public BlockState getStateForNeighborUpdate(BlockState stateIn, Direction facing, BlockState facingState, WorldAccess worldIn, BlockPos currentPos, BlockPos facingPos) { if (worldIn instanceof ServerWorld) { - WorldData.instance().compassData().service().updateArea(worldIn, new ChunkPos(currentPos), + ServerWorld serverWorld = (ServerWorld) worldIn; + WorldData.instance().compassData().service().updateArea(serverWorld, new ChunkPos(currentPos), currentPos.getY()); } return super.getStateForNeighborUpdate(stateIn, facing, facingState, worldIn, currentPos, facingPos); } + + @Override - public void onReplaced(BlockState state, World w, BlockPos pos, BlockState newState, boolean isMoving) { + public void onStateReplaced(BlockState state, World w, BlockPos pos, BlockState newState, boolean isMoving) { if (newState.getBlock() == state.getBlock()) { return; // Just a block state change } - super.onReplaced(state, w, pos, newState, isMoving); + super.onStateReplaced(state, w, pos, newState, isMoving); if (w instanceof ServerWorld) { - WorldData.instance().compassData().service().updateArea(w, new ChunkPos(pos), pos.getY()); + ServerWorld serverWorld = (ServerWorld) w; + WorldData.instance().compassData().service().updateArea(serverWorld, new ChunkPos(pos), pos.getY()); } } diff --git a/src/main/java/appeng/entity/AEBaseItemEntity.java b/core/src/main/java/appeng/entity/AEBaseItemEntity.java similarity index 77% rename from src/main/java/appeng/entity/AEBaseItemEntity.java rename to core/src/main/java/appeng/entity/AEBaseItemEntity.java index cdd47c629..b05a72b11 100644 --- a/src/main/java/appeng/entity/AEBaseItemEntity.java +++ b/core/src/main/java/appeng/entity/AEBaseItemEntity.java @@ -24,10 +24,8 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.ItemEntity; import net.minecraft.item.ItemStack; -import net.minecraft.network.IPacket; import net.minecraft.util.math.Box; import net.minecraft.world.World; -import net.minecraftforge.fml.network.NetworkHooks; public abstract class AEBaseItemEntity extends ItemEntity { @@ -38,20 +36,15 @@ public abstract class AEBaseItemEntity extends ItemEntity { protected AEBaseItemEntity(EntityType entityType, final World world, final double x, final double y, final double z, final ItemStack stack) { this(entityType, world); - this.setPosition(x, y, z); - this.yaw = this.rand.nextFloat() * 360.0F; - this.setMotion(this.rand.nextDouble() * 0.2D - 0.1D, 0.2D, this.rand.nextDouble() * 0.2D - 0.1D); - this.setItem(stack); - this.lifespan = stack.getEntityLifespan(world); + this.updatePosition(x, y, z); + this.yaw = this.random.nextFloat() * 360.0F; + this.setVelocity(this.random.nextDouble() * 0.2D - 0.1D, 0.2D, this.random.nextDouble() * 0.2D - 0.1D); + this.setStack(stack); + // FIXME FABRIC Needs replacement hook this.lifespan = stack.getEntityLifespan(world); } protected List getCheckedEntitiesWithinAABBExcludingEntity(final Box region) { return this.world.getEntities(this, region); } - @Override - public IPacket createSpawnPacket() { - return NetworkHooks.getEntitySpawningPacket(this); - } - } diff --git a/src/main/java/appeng/entity/ChargedQuartzEntity.java b/core/src/main/java/appeng/entity/ChargedQuartzEntity.java similarity index 85% rename from src/main/java/appeng/entity/ChargedQuartzEntity.java rename to core/src/main/java/appeng/entity/ChargedQuartzEntity.java index c084c4e83..10b4caf4c 100644 --- a/src/main/java/appeng/entity/ChargedQuartzEntity.java +++ b/core/src/main/java/appeng/entity/ChargedQuartzEntity.java @@ -20,8 +20,10 @@ package appeng.entity; import java.util.List; +import appeng.client.render.effects.ParticleTypes; import net.minecraft.block.BlockState; import net.minecraft.block.Material; +import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.ItemEntity; @@ -35,9 +37,7 @@ import net.minecraft.world.World; import appeng.api.AEApi; import appeng.api.definitions.IMaterials; import appeng.api.features.AEFeature; -import appeng.client.EffectType; import appeng.core.AEConfig; -import appeng.core.AppEng; import appeng.util.Platform; public final class ChargedQuartzEntity extends AEBaseItemEntity { @@ -64,16 +64,16 @@ public final class ChargedQuartzEntity extends AEBaseItemEntity { } if (world.isClient && this.delay > 30 && AEConfig.instance().isEnableEffects()) { - AppEng.proxy.spawnEffect(EffectType.Lightning, this.world, this.getX(), this.getY(), this.getZ(), - null); + MinecraftClient.getInstance().particleManager.addParticle(ParticleTypes.LIGHTNING, this.getX(), this.getY() + 0.3f, this.getZ(), 0.0f, 0.0f, + 0.0f); this.delay = 0; } this.delay++; - final int j = MathHelper.floor(this.getPosX()); + final int j = MathHelper.floor(this.getX()); final int i = MathHelper.floor((this.getBoundingBox().minY + this.getBoundingBox().maxY) / 2.0D); - final int k = MathHelper.floor(this.getPosZ()); + final int k = MathHelper.floor(this.getZ()); BlockState state = this.world.getBlockState(new BlockPos(j, i, k)); final Material mat = state.getMaterial(); @@ -91,7 +91,7 @@ public final class ChargedQuartzEntity extends AEBaseItemEntity { } private boolean transform() { - final ItemStack item = this.getItem(); + final ItemStack item = this.getStack(); final IMaterials materials = AEApi.instance().definitions().materials(); if (materials.certusQuartzCrystalCharged().isSameAs(item)) { @@ -104,7 +104,7 @@ public final class ChargedQuartzEntity extends AEBaseItemEntity { for (final Entity e : l) { if (e instanceof ItemEntity && !e.removed) { - final ItemStack other = ((ItemEntity) e).getItem(); + final ItemStack other = ((ItemEntity) e).getStack(); if (!other.isEmpty()) { if (ItemStack.areItemsEqual(other, new ItemStack(Items.REDSTONE))) { redstone = (ItemEntity) e; @@ -118,19 +118,19 @@ public final class ChargedQuartzEntity extends AEBaseItemEntity { } if (redstone != null && netherQuartz != null) { - this.getItem().grow(-1); - redstone.getItem().grow(-1); - netherQuartz.getItem().grow(-1); + this.getStack().increment(-1); + redstone.getStack().increment(-1); + netherQuartz.getStack().increment(-1); - if (this.getItem().getCount() <= 0) { + if (this.getStack().getCount() <= 0) { this.remove(); } - if (redstone.getItem().getCount() <= 0) { + if (redstone.getStack().getCount() <= 0) { redstone.remove(); } - if (netherQuartz.getItem().getCount() <= 0) { + if (netherQuartz.getStack().getCount() <= 0) { netherQuartz.remove(); } diff --git a/src/main/java/appeng/entity/GrowingCrystalEntity.java b/core/src/main/java/appeng/entity/GrowingCrystalEntity.java similarity index 86% rename from src/main/java/appeng/entity/GrowingCrystalEntity.java rename to core/src/main/java/appeng/entity/GrowingCrystalEntity.java index 9bcfd28cf..f6c499c61 100644 --- a/src/main/java/appeng/entity/GrowingCrystalEntity.java +++ b/core/src/main/java/appeng/entity/GrowingCrystalEntity.java @@ -31,10 +31,8 @@ import net.minecraft.world.World; import appeng.api.features.AEFeature; import appeng.api.implementations.items.IGrowableCrystal; import appeng.api.implementations.tiles.ICrystalGrowthAccelerator; -import appeng.client.EffectType; import appeng.core.AEConfig; import appeng.core.AppEng; -import appeng.items.misc.CrystalSeedItem; import appeng.util.Platform; public final class GrowingCrystalEntity extends AEBaseItemEntity { @@ -49,7 +47,8 @@ public final class GrowingCrystalEntity extends AEBaseItemEntity { public GrowingCrystalEntity(final World w, final double x, final double y, final double z, final ItemStack is) { super(TYPE, w, x, y, z, is); - this.setNoDespawn(); + this.setCovetedItem(); + // FIXME FABRIC This does not actually fix despawning, we need to Mixin, probably. } @Override @@ -60,14 +59,14 @@ public final class GrowingCrystalEntity extends AEBaseItemEntity { return; } - final ItemStack is = this.getItem(); + final ItemStack is = this.getStack(); final Item gc = is.getItem(); if (gc instanceof IGrowableCrystal) // if it changes this just stops being an issue... { - final int j = MathHelper.floor(this.getPosX()); + final int j = MathHelper.floor(this.getX()); final int i = MathHelper.floor((this.getBoundingBox().minY + this.getBoundingBox().maxY) / 2.0D); - final int k = MathHelper.floor(this.getPosZ()); + final int k = MathHelper.floor(this.getZ()); final BlockState state = this.world.getBlockState(new BlockPos(j, i, k)); final Material mat = state.getMaterial(); @@ -117,8 +116,8 @@ public final class GrowingCrystalEntity extends AEBaseItemEntity { if (this.progress_1000 >= len) { this.progress_1000 = 0; - AppEng.proxy.spawnEffect(EffectType.Vibrant, this.world, this.getX(), this.getY() + 0.2, - this.getZ(), null); + // FIXME FABRIC AppEng.proxy.spawnEffect(EffectType.Vibrant, this.world, this.getX(), this.getY() + 0.2, + // FIXME FABRIC this.getZ(), null); } } else { if (this.progress_1000 > 1000) { @@ -126,7 +125,7 @@ public final class GrowingCrystalEntity extends AEBaseItemEntity { // We need to copy the stack or the change detection will not work and not sync // this new stack to the client ItemStack newItem = cry.triggerGrowth(is.copy()); - this.setItem(newItem); + this.setStack(newItem); } } } @@ -173,12 +172,13 @@ public final class GrowingCrystalEntity extends AEBaseItemEntity { // Don't let seeds "float" on water surface @Override - protected void applyFloatMotion() { - ItemStack item = getItem(); - if (item.getItem() instanceof CrystalSeedItem) { - return; - } - super.applyFloatMotion(); + public void applyBuoyancy() { + ItemStack item = getStack(); + throw new IllegalStateException(); + // FIXME FABRIC if (item.getItem() instanceof CrystalSeedItem) { + // FIXME FABRIC return; + // FIXME FABRIC } + // FIXME FABRIC super.applyBuoyancy(); } } diff --git a/src/main/java/appeng/entity/ICanDie.java b/core/src/main/java/appeng/entity/ICanDie.java similarity index 100% rename from src/main/java/appeng/entity/ICanDie.java rename to core/src/main/java/appeng/entity/ICanDie.java diff --git a/src/main/java/appeng/entity/SingularityEntity.java b/core/src/main/java/appeng/entity/SingularityEntity.java similarity index 94% rename from src/main/java/appeng/entity/SingularityEntity.java rename to core/src/main/java/appeng/entity/SingularityEntity.java index 5e38400bb..e4f173108 100644 --- a/src/main/java/appeng/entity/SingularityEntity.java +++ b/core/src/main/java/appeng/entity/SingularityEntity.java @@ -24,9 +24,9 @@ import java.util.List; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.damage.DamageSource; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.DamageSource; import net.minecraft.util.math.Box; import net.minecraft.world.World; @@ -51,13 +51,13 @@ public final class SingularityEntity extends AEBaseItemEntity { } @Override - public boolean attackEntityFrom(final DamageSource src, final float dmg) { - if (src.isExplosion()) { + public boolean damage(final DamageSource src, final float dmg) { + if (src.isExplosive()) { this.doExplosion(); return false; } - return super.attackEntityFrom(src, dmg); + return super.damage(src, dmg); } private void doExplosion() { @@ -69,7 +69,7 @@ public final class SingularityEntity extends AEBaseItemEntity { return; } - final ItemStack item = this.getItem(); + final ItemStack item = this.getStack(); final IMaterials materials = AEApi.instance().definitions().materials(); @@ -80,7 +80,7 @@ public final class SingularityEntity extends AEBaseItemEntity { for (final Entity e : l) { if (e instanceof ItemEntity) { - final ItemStack other = ((ItemEntity) e).getItem(); + final ItemStack other = ((ItemEntity) e).getStack(); if (!other.isEmpty()) { boolean matches = false; diff --git a/src/main/java/appeng/entity/TinyTNTPrimedEntity.java b/core/src/main/java/appeng/entity/TinyTNTPrimedEntity.java similarity index 59% rename from src/main/java/appeng/entity/TinyTNTPrimedEntity.java rename to core/src/main/java/appeng/entity/TinyTNTPrimedEntity.java index 44423eb38..05071f8ba 100644 --- a/src/main/java/appeng/entity/TinyTNTPrimedEntity.java +++ b/core/src/main/java/appeng/entity/TinyTNTPrimedEntity.java @@ -18,43 +18,36 @@ package appeng.entity; -import java.util.List; - +import appeng.api.AEApi; +import appeng.api.features.AEFeature; +import appeng.core.AEConfig; +import appeng.util.Platform; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Material; import net.minecraft.entity.*; -import net.minecraft.entity.MoverType; -import net.minecraft.network.PacketByteBuf; +import net.minecraft.entity.damage.DamageSource; import net.minecraft.particle.ParticleTypes; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.DamageSource; import net.minecraft.sound.SoundCategory; -import net.minecraft.util.math.Box; +import net.minecraft.sound.SoundEvents; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.explosion.Explosion; -import net.minecraft.world.explosion.Explosion.Mode; +import net.minecraft.util.math.Box; import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; +import net.minecraft.world.explosion.Explosion; -import appeng.api.AEApi; -import appeng.api.features.AEFeature; -import appeng.core.AEConfig; -import appeng.core.AppEng; -import appeng.core.sync.packets.MockExplosionPacket; -import appeng.util.Platform; +import java.util.List; -public final class TinyTNTPrimedEntity extends TntEntity implements IEntityAdditionalSpawnData { +public final class TinyTNTPrimedEntity extends TntEntity { public static EntityType TYPE; public TinyTNTPrimedEntity(EntityType type, World worldIn) { super(type, worldIn); - this.preventEntitySpawning = true; + this.inanimate = true; } public TinyTNTPrimedEntity(final World w, final double x, final double y, final double z, - final LivingEntity igniter) { + final LivingEntity igniter) { super(w, x, y, z, igniter); } @@ -63,26 +56,26 @@ public final class TinyTNTPrimedEntity extends TntEntity implements IEntityAddit */ @Override public void tick() { - this.handleWaterMovement(); + this.updateWaterState(); this.prevX = this.getX(); this.prevY = this.getY(); this.prevZ = this.getZ(); - this.setMotion(this.getMotion().subtract(0, 0.03999999910593033D, 0)); - this.move(MoverType.SELF, this.getMotion()); - this.setMotion(this.getMotion().mul(0.9800000190734863D, 0.9800000190734863D, 0.9800000190734863D)); + this.setVelocity(this.getVelocity().subtract(0, 0.03999999910593033D, 0)); + this.move(MovementType.SELF, this.getVelocity()); + this.setVelocity(this.getVelocity().multiply(0.9800000190734863D, 0.9800000190734863D, 0.9800000190734863D)); if (this.onGround) { - this.setMotion(this.getMotion().mul(0.699999988079071D, 0.699999988079071D, -0.5D)); + this.setVelocity(this.getVelocity().multiply(0.699999988079071D, 0.699999988079071D, -0.5D)); } - if (this.isInWater() && Platform.isServer()) // put out the fuse. + if (this.isSubmergedInWater() && Platform.isServer()) // put out the fuse. { AEApi.instance().definitions().blocks().tinyTNT().maybeStack(1).ifPresent(tntStack -> { final ItemEntity item = new ItemEntity(this.world, this.getX(), this.getY(), this.getZ(), tntStack); - item.setMotion(this.getMotion()); + item.setVelocity(this.getVelocity()); item.prevX = this.prevX; item.prevY = this.prevY; item.prevZ = this.prevZ; @@ -105,55 +98,53 @@ public final class TinyTNTPrimedEntity extends TntEntity implements IEntityAddit this.setFuse(this.getFuse() - 1); } - // override :P - @Override - protected void explode() { + private void explode() { this.world.playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.BLOCKS, 4.0F, - (1.0F + (this.world.rand.nextFloat() - this.world.rand.nextFloat()) * 0.2F) * 32.9F); + (1.0F + (this.world.random.nextFloat() - this.world.random.nextFloat()) * 0.2F) * 32.9F); - if (this.isInWater()) { + if (this.isSubmergedInWater()) { return; } final Explosion ex = new Explosion(this.world, this, this.getX(), this.getY(), this.getZ(), 0.2f, - false, Mode.BREAK); + false, Explosion.DestructionType.BREAK); + final Box area = new Box(this.getX() - 1.5, this.getY() - 1.5f, this.getZ() - 1.5, this.getX() + 1.5, this.getY() + 1.5, this.getZ() + 1.5); final List list = this.world.getEntities(this, area); - net.minecraftforge.event.ForgeEventFactory.onExplosionDetonate(this.world, ex, list, 0.2f * 2d); - for (final Entity e : list) { - e.attackEntityFrom(DamageSource.causeExplosionDamage(ex), 6); + e.damage(DamageSource.explosion(ex), 6); } if (AEConfig.instance().isFeatureEnabled(AEFeature.TINY_TNT_BLOCK_DAMAGE)) { - this.setPosition(this.getX(), this.getY() - 0.25, this.getPosZ()); + this.updatePosition(this.getX(), this.getY() - 0.25, this.getZ()); + // For reference see Explosion.affectWorld for (int x = (int) (this.getX() - 2); x <= this.getX() + 2; x++) { for (int y = (int) (this.getY() - 2); y <= this.getY() + 2; y++) { for (int z = (int) (this.getZ() - 2); z <= this.getZ() + 2; z++) { - final BlockPos point = new BlockPos(x, y, z); - final BlockState state = this.world.getBlockState(point); + final BlockPos blockPos = new BlockPos(x, y, z); + final BlockState state = this.world.getBlockState(blockPos); final Block block = state.getBlock(); - if (block != null && !block.isAir(state, this.world, point)) { + if (block != null && !state.isAir()) { float strength = (float) (2.3f - - (((x + 0.5f) - this.getPosX()) * ((x + 0.5f) - this.getPosX()) - + ((y + 0.5f) - this.getPosY()) * ((y + 0.5f) - this.getPosY()) - + ((z + 0.5f) - this.getPosZ()) * ((z + 0.5f) - this.getPosZ()))); + - (((x + 0.5f) - this.getX()) * ((x + 0.5f) - this.getX()) + + ((y + 0.5f) - this.getY()) * ((y + 0.5f) - this.getY()) + + ((z + 0.5f) - this.getZ()) * ((z + 0.5f) - this.getZ()))); - final float resistance = block.getExplosionResistance(state, this.world, point, this, ex); + final float resistance = block.getBlastResistance(); strength -= (resistance + 0.3F) * 0.11f; if (strength > 0.01) { - if (block.getMaterial(state) != Material.AIR) { - if (block.canDropFromExplosion(ex)) { - block.spawnDrops(state, this.world, point); + if (state.getMaterial() == Material.AIR) { + if (block.shouldDropItemsOnExplosion(ex)) { + Block.dropStacks(state, this.world, blockPos); } - block.onBlockExploded(null, this.world, point, ex); + block.onDestroyedByExplosion(this.world, blockPos, ex); } } } @@ -162,17 +153,10 @@ public final class TinyTNTPrimedEntity extends TntEntity implements IEntityAddit } } - AppEng.proxy.sendToAllNearExcept(null, this.getX(), this.getY(), this.getZ(), 64, this.world, - new MockExplosionPacket(this.getX(), this.getY(), this.getPosZ())); + throw new IllegalStateException(); +// FIXME FABRIC +// AppEng.proxy.sendToAllNearExcept(null, this.getX(), this.getY(), this.getZ(), 64, this.world, +// new MockExplosionPacket(this.getX(), this.getY(), this.getZ())); } - @Override - public void writeSpawnData(PacketByteBuf buffer) { - buffer.writeByte(this.getFuse()); - } - - @Override - public void readSpawnData(PacketByteBuf additionalData) { - this.setFuse(additionalData.readByte()); - } } diff --git a/src/main/java/appeng/entity/TinyTNTPrimedRenderer.java b/core/src/main/java/appeng/entity/TinyTNTPrimedRenderer.java similarity index 72% rename from src/main/java/appeng/entity/TinyTNTPrimedRenderer.java rename to core/src/main/java/appeng/entity/TinyTNTPrimedRenderer.java index c622c4dba..8d21e65e0 100644 --- a/src/main/java/appeng/entity/TinyTNTPrimedRenderer.java +++ b/core/src/main/java/appeng/entity/TinyTNTPrimedRenderer.java @@ -19,16 +19,16 @@ package appeng.entity; import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.TntMinecartEntityRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.util.math.Vector3f; -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.client.renderer.entity.TNTMinecartRenderer; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.util.Identifier; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -36,15 +36,15 @@ import net.fabricmc.api.Environment; @Environment(EnvType.CLIENT) public class TinyTNTPrimedRenderer extends EntityRenderer { - public TinyTNTPrimedRenderer(final EntityRendererManager manager) { + public TinyTNTPrimedRenderer(final EntityRenderDispatcher manager) { super(manager); - this.shadowSize = 0.5F; + this.shadowRadius = 0.5F; } @Override public void render(TinyTNTPrimedEntity tnt, float entityYaw, float partialTicks, MatrixStack mStack, VertexConsumerProvider buffers, int packedLight) { - final BlockRendererDispatcher blockrendererdispatcher = MinecraftClient.getInstance().getBlockRendererDispatcher(); + final BlockRenderManager blockrendererdispatcher = MinecraftClient.getInstance().getBlockRenderManager(); mStack.push(); mStack.translate(0, 0.25F, 0); float f2; @@ -68,17 +68,17 @@ public class TinyTNTPrimedRenderer extends EntityRenderer { mStack.scale(0.5f, 0.5f, 0.5f); f2 = (1.0F - (tnt.getFuse() - partialTicks + 1.0F) / 100.0F) * 0.8F; - mStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + mStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-90.0F)); mStack.translate(-0.5D, -0.5D, 0.5D); - mStack.rotate(Vector3f.YP.rotationDegrees(90.0F)); - TNTMinecartRenderer.renderTntFlash(Blocks.TNT.getDefaultState(), mStack, buffers, packedLight, + mStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(90.0F)); + TntMinecartEntityRenderer.method_23190(Blocks.TNT.getDefaultState(), mStack, buffers, packedLight, tnt.getFuse() / 5 % 2 == 0); mStack.pop(); super.render(tnt, entityYaw, partialTicks, mStack, buffers, packedLight); } @Override - public Identifier getEntityTexture(final TinyTNTPrimedEntity entity) { - return AtlasTexture.LOCATION_BLOCKS_TEXTURE; + public Identifier getTexture(final TinyTNTPrimedEntity entity) { + return SpriteAtlasTexture.BLOCK_ATLAS_TEX; } } diff --git a/src/main/java/appeng/fluids/items/FluidDummyItem.java b/core/src/main/java/appeng/fluids/items/FluidDummyItem.java similarity index 73% rename from src/main/java/appeng/fluids/items/FluidDummyItem.java rename to core/src/main/java/appeng/fluids/items/FluidDummyItem.java index 77a4e5209..659f4b082 100644 --- a/src/main/java/appeng/fluids/items/FluidDummyItem.java +++ b/core/src/main/java/appeng/fluids/items/FluidDummyItem.java @@ -18,13 +18,14 @@ package appeng.fluids.items; +import alexiil.mc.lib.attributes.fluid.FluidVolumeUtil; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; +import alexiil.mc.lib.attributes.fluid.volume.FluidKeys; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; -import net.minecraft.fluid.Fluids; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.NonNullList; -import net.minecraftforge.fluids.FluidAttributes; +import net.minecraft.util.collection.DefaultedList; import appeng.items.AEBaseItem; @@ -37,7 +38,7 @@ import appeng.items.AEBaseItem; */ public class FluidDummyItem extends AEBaseItem { - public FluidDummyItem(Properties properties) { + public FluidDummyItem(Settings properties) { super(properties); } @@ -45,17 +46,17 @@ public class FluidDummyItem extends AEBaseItem { public String getTranslationKey(ItemStack stack) { FluidVolume fluidStack = this.getFluidStack(stack); if (fluidStack.isEmpty()) { - fluidStack = new FluidVolume(Fluids.WATER, FluidAttributes.BUCKET_VOLUME); + fluidStack = FluidKeys.WATER.withAmount(FluidAmount.BUCKET); } - return fluidStack.getTranslationKey(); + return fluidStack.getName().getString(); } public FluidVolume getFluidStack(ItemStack is) { - if (is.hasTag()) { - CompoundTag tag = is.getTag(); - return FluidVolume.loadFluidStackFromNBT(tag); + CompoundTag tag = is.getTag(); + if (tag != null) { + return FluidVolume.fromTag(tag); } - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } public void setFluidStack(ItemStack is, FluidVolume fs) { @@ -63,13 +64,13 @@ public class FluidDummyItem extends AEBaseItem { is.setTag(null); } else { CompoundTag tag = new CompoundTag(); - fs.writeToNBT(tag); + fs.toTag(tag); is.setTag(tag); } } @Override - public void fillItemGroup(ItemGroup group, NonNullList items) { + public void appendStacks(ItemGroup group, DefaultedList items) { // Don't show this item in CreativeTabs } } diff --git a/src/main/java/appeng/fluids/util/AEFluidStack.java b/core/src/main/java/appeng/fluids/util/AEFluidStack.java similarity index 82% rename from src/main/java/appeng/fluids/util/AEFluidStack.java rename to core/src/main/java/appeng/fluids/util/AEFluidStack.java index 38abd25dd..431eeb70b 100644 --- a/src/main/java/appeng/fluids/util/AEFluidStack.java +++ b/core/src/main/java/appeng/fluids/util/AEFluidStack.java @@ -21,17 +21,16 @@ package appeng.fluids.util; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import alexiil.mc.lib.attributes.fluid.amount.FluidAmount; +import alexiil.mc.lib.attributes.fluid.volume.FluidKey; +import alexiil.mc.lib.attributes.fluid.volume.FluidKeys; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; import com.google.common.base.Preconditions; -import net.minecraft.fluid.Fluid; -import net.minecraft.fluid.Fluids; +import net.fabricmc.fabric.api.util.NbtType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.Identifier; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.registries.ForgeRegistries; import appeng.api.AEApi; import appeng.api.config.FuzzyMode; @@ -49,7 +48,7 @@ public final class AEFluidStack extends AEStack implements IAEFlu private static final String NBT_FLUID_ID = "f"; private static final String NBT_FLUID_TAG = "ft"; - private final Fluid fluid; + private final FluidKey fluid; private CompoundTag tagCompound; private AEFluidStack(final AEFluidStack fluidStack) { @@ -65,10 +64,7 @@ public final class AEFluidStack extends AEStack implements IAEFlu } } - private AEFluidStack(@Nonnull Fluid fluid, long amount, @Nullable CompoundTag tag) { - if (fluid == Fluids.EMPTY) { - System.out.println(); - } + private AEFluidStack(@Nonnull FluidKey fluid, long amount, @Nullable CompoundTag tag) { this.fluid = Preconditions.checkNotNull(fluid); this.setStackSize(amount); this.setCraftable(false); @@ -81,28 +77,31 @@ public final class AEFluidStack extends AEStack implements IAEFlu return null; } - Fluid fluid = input.getFluid(); + FluidKey fluid = input.getFluidKey(); if (fluid == null) { throw new IllegalArgumentException("Fluid is null."); } - long amount = input.getAmount(); - CompoundTag tag = null; - if (input.getTag() != null) { - tag = input.getTag().copy(); + CompoundTag tag = input.toTag(); + if (tag.isEmpty()) { + tag = null; } + + // FIXME FABRIC NOPE NO FRACTIONS YOU FREAKS THIS IS NOT FROG FRACTIONS + long amount = (long)(input.amount().asInexactDouble() * 1000.0); + return new AEFluidStack(fluid, amount, tag); } public static IAEFluidStack fromNBT(final CompoundTag data) { - Identifier fluidId = new Identifier(data.getString(NBT_FLUID_ID)); - Fluid fluid = ForgeRegistries.FLUIDS.getValue(fluidId); - if (fluid == null || fluid == Fluids.EMPTY) { + CompoundTag fluidId = data.getCompound(NBT_FLUID_ID); + FluidKey fluid = FluidKey.fromTag(fluidId); + if (fluid == FluidKeys.EMPTY) { return null; } CompoundTag tag = null; - if (data.contains(NBT_FLUID_TAG, Constants.NBT.TAG_COMPOUND)) { + if (data.contains(NBT_FLUID_TAG, NbtType.COMPOUND)) { tag = data.getCompound(NBT_FLUID_TAG); } @@ -126,7 +125,7 @@ public final class AEFluidStack extends AEStack implements IAEFlu @Override public void writeToNBT(final CompoundTag data) { - data.putString(NBT_FLUID_ID, this.fluid.getRegistryName().toString()); + data.put(NBT_FLUID_ID, this.fluid.toTag()); if (this.hasTagCompound()) { data.put(NBT_FLUID_TAG, this.tagCompound); } @@ -170,7 +169,7 @@ public final class AEFluidStack extends AEStack implements IAEFlu @Override public int compareTo(final AEFluidStack other) { if (this.fluid != other.fluid) { - return this.fluid.getRegistryName().compareTo(other.fluid.getRegistryName()); + return this.fluid.entry.getId().compareTo(other.fluid.entry.getId()); } if (Platform.itemComparisons().isNbtTagEqual(this.tagCompound, other.tagCompound)) { @@ -197,15 +196,15 @@ public final class AEFluidStack extends AEStack implements IAEFlu return is.fluid == this.fluid && Platform.itemComparisons().isNbtTagEqual(this.tagCompound, is.tagCompound); } else if (other instanceof FluidVolume) { final FluidVolume is = (FluidVolume) other; - return is.getFluid() == this.fluid - && Platform.itemComparisons().isNbtTagEqual(this.tagCompound, is.getTag()); + return is.getFluidKey() == this.fluid + && Platform.itemComparisons().isNbtTagEqual(this.tagCompound, is.toTag()); } return false; } @Override public String toString() { - return this.getStackSize() + "x" + this.getFluidStack().getFluid().getRegistryName() + " " + this.tagCompound; + return this.getStackSize() + "x" + this.getFluidStack().getFluidKey().entry.getId() + " " + this.tagCompound; } @Override @@ -215,14 +214,12 @@ public final class AEFluidStack extends AEStack implements IAEFlu @Override public FluidVolume getFluidStack() { - final int amount = (int) Math.min(Integer.MAX_VALUE, this.getStackSize()); - final FluidVolume is = new FluidVolume(this.fluid, amount, this.tagCompound); - - return is; + FluidAmount amount = FluidAmount.of(this.getStackSize(), 1000); + return this.fluid.readVolume(tagCompound).withAmount(amount); } @Override - public Fluid getFluid() { + public FluidKey getFluid() { return this.fluid; } @@ -239,11 +236,15 @@ public final class AEFluidStack extends AEStack implements IAEFlu public static IAEFluidStack fromPacket(final PacketByteBuf buffer) { final boolean isCraftable = buffer.readBoolean(); - final FluidVolume fluidStack = buffer.readFluidStack(); + CompoundTag volumeTag = buffer.readCompoundTag(); final long stackSize = buffer.readVarLong(); final long countRequestable = buffer.readVarLong(); + if (volumeTag == null) { + return null; + } + FluidVolume fluidStack = FluidVolume.fromTag(volumeTag); if (fluidStack.isEmpty()) { return null; } @@ -258,7 +259,7 @@ public final class AEFluidStack extends AEStack implements IAEFlu @Override public void writeToPacket(final PacketByteBuf buffer) { buffer.writeBoolean(this.isCraftable()); - buffer.writeFluidStack(this.getFluidStack()); + buffer.writeCompoundTag(this.getFluidStack().toTag()); buffer.writeVarLong(this.getStackSize()); buffer.writeVarLong(this.getCountRequestable()); } diff --git a/src/main/java/appeng/helpers/IPriorityHost.java b/core/src/main/java/appeng/helpers/IPriorityHost.java similarity index 92% rename from src/main/java/appeng/helpers/IPriorityHost.java rename to core/src/main/java/appeng/helpers/IPriorityHost.java index 25bdd4dda..3167429ec 100644 --- a/src/main/java/appeng/helpers/IPriorityHost.java +++ b/core/src/main/java/appeng/helpers/IPriorityHost.java @@ -18,7 +18,7 @@ package appeng.helpers; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; public interface IPriorityHost { @@ -39,6 +39,6 @@ public interface IPriorityHost { * Used to show the user interface of this part when returning from the priority * GUI. */ - ContainerType getContainerType(); + ScreenHandlerType getContainerType(); } diff --git a/src/main/java/appeng/items/materials/MaterialType.java b/core/src/main/java/appeng/items/materials/MaterialType.java similarity index 96% rename from src/main/java/appeng/items/materials/MaterialType.java rename to core/src/main/java/appeng/items/materials/MaterialType.java index 8624c2cf4..b10b65594 100644 --- a/src/main/java/appeng/items/materials/MaterialType.java +++ b/core/src/main/java/appeng/items/materials/MaterialType.java @@ -28,7 +28,6 @@ import net.minecraft.util.Identifier; import appeng.api.features.AEFeature; import appeng.core.AppEng; -import appeng.core.features.MaterialStackSrc; import appeng.entity.ChargedQuartzEntity; import appeng.entity.SingularityEntity; @@ -122,8 +121,6 @@ public enum MaterialType { private final Set features; private final Identifier registryName; private Item itemInstance; - // stack! - private MaterialStackSrc stackSrc; private String oreName; private Class droppedEntity; private boolean isRegistered = false; @@ -186,14 +183,6 @@ public enum MaterialType { this.itemInstance = itemInstance; } - public MaterialStackSrc getStackSrc() { - return this.stackSrc; - } - - public void setStackSrc(final MaterialStackSrc stackSrc) { - this.stackSrc = stackSrc; - } - public String getId() { return registryName.getPath(); } diff --git a/src/main/java/appeng/me/GridStorage.java b/core/src/main/java/appeng/me/GridStorage.java similarity index 91% rename from src/main/java/appeng/me/GridStorage.java rename to core/src/main/java/appeng/me/GridStorage.java index e08476e1e..f2d1a9ddd 100644 --- a/src/main/java/appeng/me/GridStorage.java +++ b/core/src/main/java/appeng/me/GridStorage.java @@ -64,10 +64,11 @@ public class GridStorage implements IGridStorage { } public void saveState() { - final Grid currentGrid = (Grid) this.getGrid(); - if (currentGrid != null) { - currentGrid.saveState(); - } + throw new IllegalStateException(); + // FIXME FABRIC final Grid currentGrid = (Grid) this.getGrid(); + // FIXME FABRIC if (currentGrid != null) { + // FIXME FABRIC currentGrid.saveState(); + // FIXME FABRIC } } public IGrid getGrid() { diff --git a/src/main/java/appeng/me/helpers/IGridProxyable.java b/core/src/main/java/appeng/me/helpers/IGridProxyable.java similarity index 90% rename from src/main/java/appeng/me/helpers/IGridProxyable.java rename to core/src/main/java/appeng/me/helpers/IGridProxyable.java index 4f47bdb91..02b4833f8 100644 --- a/src/main/java/appeng/me/helpers/IGridProxyable.java +++ b/core/src/main/java/appeng/me/helpers/IGridProxyable.java @@ -18,12 +18,13 @@ package appeng.me.helpers; +import appeng.api.networking.IGridBlock; import appeng.api.networking.IGridHost; import appeng.api.util.DimensionalCoord; public interface IGridProxyable extends IGridHost { - AENetworkProxy getProxy(); + IGridBlock getProxy(); // FIXME AENetworkProxy return type DimensionalCoord getLocation(); diff --git a/src/main/java/appeng/services/CompassService.java b/core/src/main/java/appeng/services/CompassService.java similarity index 84% rename from src/main/java/appeng/services/CompassService.java rename to core/src/main/java/appeng/services/CompassService.java index de316a41f..40edfd4f2 100644 --- a/src/main/java/appeng/services/CompassService.java +++ b/core/src/main/java/appeng/services/CompassService.java @@ -18,8 +18,7 @@ package appeng.services; -import java.util.HashMap; -import java.util.Map; +import java.util.WeakHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -32,24 +31,22 @@ import net.minecraft.block.Block; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; import net.minecraft.world.WorldAccess; -import net.minecraft.world.chunk.IChunk; +import net.minecraft.world.chunk.Chunk; import net.minecraft.world.dimension.DimensionType; import net.minecraft.server.world.ServerWorld; -import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; import appeng.api.AEApi; import appeng.api.util.DimensionalCoord; import appeng.services.compass.CompassReader; import appeng.services.compass.ICompassCallback; -import appeng.util.Platform; public final class CompassService { private static final int CHUNK_SIZE = 16; private final MinecraftServer server; - private final Map worldSet = new HashMap<>(10); + private final WeakHashMap worldSet = new WeakHashMap<>(10); private final ExecutorService executor; private int jobSize; @@ -70,16 +67,16 @@ public final class CompassService { * * @param event the event containing the unloaded world. */ - // FIXME this is never registered - @SubscribeEvent - public void unloadWorld(final WorldEvent.Unload event) { - DimensionType dim = event.getWorld().getDimension().getType(); - - if (Platform.isServer() && this.worldSet.containsKey(dim)) { - final CompassReader compassReader = this.worldSet.remove(dim); - compassReader.close(); - } - } + // FIXME FABRIC this is never registered + // FIXME @SubscribeEvent + // FIXME public void unloadWorld(final WorldEvent.Unload event) { + // FIXME DimensionType dim = event.getWorld().getDimension().getType(); + // FIXME + // FIXME if (Platform.isServer() && this.worldSet.containsKey(dim)) { + // FIXME final CompassReader compassReader = this.worldSet.remove(dim); + // FIXME compassReader.close(); + // FIXME } + // FIXME } private int jobSize() { return this.jobSize; @@ -91,7 +88,17 @@ public final class CompassService { } } - public void updateArea(final WorldAccess w, ChunkPos chunkPos) { + public void tryUpdateArea(final WorldAccess w, ChunkPos chunkPos) { + // If this seems weird: during worldgen, WorldAccess is a specific region, but getWorld is + // still the server world + World world = w.getWorld(); + if (!(world instanceof ServerWorld)) { + return; + } + updateArea((ServerWorld) world, chunkPos); + } + + public void updateArea(final ServerWorld w, ChunkPos chunkPos) { this.updateArea(w, chunkPos, CHUNK_SIZE); this.updateArea(w, chunkPos, CHUNK_SIZE + 32); this.updateArea(w, chunkPos, CHUNK_SIZE + 64); @@ -103,7 +110,7 @@ public final class CompassService { this.updateArea(w, chunkPos, CHUNK_SIZE + 224); } - public Future updateArea(final WorldAccess w, ChunkPos chunkPos, int y) { + public Future updateArea(final ServerWorld w, ChunkPos chunkPos, int y) { this.jobSize++; final int cx = chunkPos.x; @@ -114,9 +121,7 @@ public final class CompassService { final int hi_y = low_y + 32; // lower level... - final IChunk c = w.getChunk(cx, cz); - - DimensionType dim = w.getDimension().getType(); + final Chunk c = w.getChunk(cx, cz); Block skyStoneBlock = AEApi.instance().definitions().blocks().skyStoneBlock().block(); BlockPos.Mutable pos = new BlockPos.Mutable(); @@ -128,13 +133,13 @@ public final class CompassService { pos.setY(k); final Block blk = c.getBlockState(pos).getBlock(); if (blk == skyStoneBlock) { - return this.executor.submit(new CMUpdatePost(dim, cx, cz, cdy, true)); + return this.executor.submit(new CMUpdatePost(w, cx, cz, cdy, true)); } } } } - return this.executor.submit(new CMUpdatePost(dim, cx, cz, cdy, false)); + return this.executor.submit(new CMUpdatePost(w, cx, cz, cdy, false)); } public void kill() { @@ -154,13 +159,12 @@ public final class CompassService { } } - private CompassReader getReader(final DimensionType dim) { - CompassReader cr = this.worldSet.get(dim); + private CompassReader getReader(final ServerWorld world) { + CompassReader cr = this.worldSet.get(world); if (cr == null) { - ServerWorld sw = server.getWorld(dim); - cr = new CompassReader(sw); - this.worldSet.put(dim, cr); + cr = new CompassReader(world); + this.worldSet.put(world, cr); } return cr; @@ -182,15 +186,15 @@ public final class CompassService { private class CMUpdatePost implements Runnable { - public final DimensionType dim; + public final ServerWorld world; public final int chunkX; public final int chunkZ; public final int doubleChunkY; // 32 blocks instead of 16. public final boolean value; - public CMUpdatePost(final DimensionType dim, final int cx, final int cz, final int dcy, final boolean val) { - this.dim = dim; + public CMUpdatePost(final ServerWorld world, final int cx, final int cz, final int dcy, final boolean val) { + this.world = world; this.chunkX = cx; this.doubleChunkY = dcy; this.chunkZ = cz; @@ -201,7 +205,7 @@ public final class CompassService { public void run() { CompassService.this.jobSize--; - final CompassReader cr = CompassService.this.getReader(this.dim); + final CompassReader cr = CompassService.this.getReader(this.world); cr.setHasBeacon(this.chunkX, this.chunkZ, this.doubleChunkY, this.value); if (CompassService.this.jobSize() < 2) { @@ -224,12 +228,15 @@ public final class CompassService { @Override public void run() { + + ServerWorld world = (ServerWorld) this.coord.getWorld(); + CompassService.this.jobSize--; final int cx = this.coord.x >> 4; final int cz = this.coord.z >> 4; - final CompassReader cr = CompassService.this.getReader(this.coord.getWorld().getDimension().getType()); + final CompassReader cr = CompassService.this.getReader(world); // Am I standing on it? if (cr.hasBeacon(cx, cz)) { diff --git a/src/main/java/appeng/services/compass/CompassException.java b/core/src/main/java/appeng/services/compass/CompassException.java similarity index 100% rename from src/main/java/appeng/services/compass/CompassException.java rename to core/src/main/java/appeng/services/compass/CompassException.java diff --git a/src/main/java/appeng/services/compass/CompassReader.java b/core/src/main/java/appeng/services/compass/CompassReader.java similarity index 100% rename from src/main/java/appeng/services/compass/CompassReader.java rename to core/src/main/java/appeng/services/compass/CompassReader.java diff --git a/src/main/java/appeng/services/compass/CompassRegion.java b/core/src/main/java/appeng/services/compass/CompassRegion.java similarity index 89% rename from src/main/java/appeng/services/compass/CompassRegion.java rename to core/src/main/java/appeng/services/compass/CompassRegion.java index 2759e6d6e..f4fc6e621 100644 --- a/src/main/java/appeng/services/compass/CompassRegion.java +++ b/core/src/main/java/appeng/services/compass/CompassRegion.java @@ -22,7 +22,7 @@ import com.google.common.base.Preconditions; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.world.ServerWorld; -import net.minecraft.world.storage.WorldSavedData; +import net.minecraft.world.PersistentState; final class CompassRegion { private final int lowX; @@ -92,12 +92,12 @@ final class CompassRegion { String name = this.lowX + "_" + this.lowZ; if (create) { - this.data = world.getSavedData().getOrCreate(() -> new SaveData(name), name); + this.data = world.getPersistentStateManager().getOrCreate(() -> new SaveData(name), name); if (this.data.bitmap == null) { this.data.bitmap = new byte[SaveData.BITMAP_LENGTH]; } } else { - this.data = world.getSavedData().get(() -> new SaveData(name), name); + this.data = world.getPersistentStateManager().get(() -> new SaveData(name), name); } } @@ -114,7 +114,7 @@ final class CompassRegion { this.data.markDirty(); } - private static class SaveData extends WorldSavedData { + private static class SaveData extends PersistentState { private static final int BITMAP_LENGTH = 0x400 * 0x400; @@ -125,7 +125,7 @@ final class CompassRegion { } @Override - public void read(CompoundTag nbt) { + public void fromTag(CompoundTag nbt) { this.bitmap = nbt.getByteArray("b"); if (this.bitmap.length != BITMAP_LENGTH) { throw new IllegalStateException("Invalid bitmap length: " + bitmap.length); @@ -133,7 +133,7 @@ final class CompassRegion { } @Override - public CompoundTag write(CompoundTag compound) { + public CompoundTag toTag(CompoundTag compound) { compound.putByteArray("b", bitmap); return compound; } diff --git a/src/main/java/appeng/services/compass/CompassThreadFactory.java b/core/src/main/java/appeng/services/compass/CompassThreadFactory.java similarity index 100% rename from src/main/java/appeng/services/compass/CompassThreadFactory.java rename to core/src/main/java/appeng/services/compass/CompassThreadFactory.java diff --git a/src/main/java/appeng/services/compass/ICompassCallback.java b/core/src/main/java/appeng/services/compass/ICompassCallback.java similarity index 100% rename from src/main/java/appeng/services/compass/ICompassCallback.java rename to core/src/main/java/appeng/services/compass/ICompassCallback.java diff --git a/core/src/main/java/appeng/tile/AEBaseBlockEntity.java b/core/src/main/java/appeng/tile/AEBaseBlockEntity.java index 69f4e1486..cbd1f8ee6 100644 --- a/core/src/main/java/appeng/tile/AEBaseBlockEntity.java +++ b/core/src/main/java/appeng/tile/AEBaseBlockEntity.java @@ -18,6 +18,8 @@ package appeng.tile; +import alexiil.mc.lib.attributes.AttributeList; +import alexiil.mc.lib.attributes.AttributeProvider; import alexiil.mc.lib.attributes.item.FixedItemInv; import appeng.api.implementations.tiles.ISegmentedInventory; import appeng.api.util.ICommonTile; @@ -30,10 +32,10 @@ import appeng.core.AELog; import appeng.core.features.IStackSrc; import appeng.helpers.ICustomNameObject; import appeng.helpers.IPriorityHost; -import appeng.hooks.TickHandler; import appeng.tile.inventory.AppEngInternalAEInventory; import appeng.util.Platform; import appeng.util.SettingsFrom; +import com.sun.org.apache.bcel.internal.classfile.AttributeReader; import io.netty.buffer.Unpooled; import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable; import net.fabricmc.fabric.api.rendering.data.v1.RenderAttachmentBlockEntity; @@ -58,7 +60,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class AEBaseBlockEntity extends BlockEntity implements IOrientable, ICommonTile, ICustomNameObject, BlockEntityClientSerializable, RenderAttachmentBlockEntity { +public class AEBaseBlockEntity extends BlockEntity implements IOrientable, ICommonTile, ICustomNameObject, BlockEntityClientSerializable, RenderAttachmentBlockEntity, AttributeProvider { private static final ThreadLocal> DROP_NO_ITEMS = new ThreadLocal<>(); private static final Map, IStackSrc> ITEM_STACKS = new HashMap<>(); @@ -299,10 +301,10 @@ public class AEBaseBlockEntity extends BlockEntity implements IOrientable, IComm final FixedItemInv inv = ((ISegmentedInventory) this).getInventoryByName("config"); if (inv instanceof AppEngInternalAEInventory) { final AppEngInternalAEInventory target = (AppEngInternalAEInventory) inv; - final AppEngInternalAEInventory tmp = new AppEngInternalAEInventory(null, target.getSlots()); + final AppEngInternalAEInventory tmp = new AppEngInternalAEInventory(null, target.getSlotCount()); tmp.readFromNBT(compound, "config"); - for (int x = 0; x < tmp.getSlots(); x++) { - target.setStackInSlot(x, tmp.getStackInSlot(x)); + for (int x = 0; x < tmp.getSlotCount(); x++) { + target.forceSetInvStack(x, tmp.getInvStack(x)); } } } @@ -396,8 +398,9 @@ public class AEBaseBlockEntity extends BlockEntity implements IOrientable, IComm if (this.world != null) { this.world.markDirty(this.pos, this); if (!this.markDirtyQueued) { - TickHandler.INSTANCE.addCallable(null, this::markDirtyAtEndOfTick); + // FIXME FABRIC TickHandler.INSTANCE.addCallable(null, this::markDirtyAtEndOfTick); this.markDirtyQueued = true; + throw new IllegalStateException(); } } } @@ -417,4 +420,8 @@ public class AEBaseBlockEntity extends BlockEntity implements IOrientable, IComm return new AEModelData(up, forward); } + @Override + public void addAllAttributes(World world, BlockPos pos, BlockState state, AttributeList to) { + } + } diff --git a/core/src/main/java/appeng/tile/AEBaseInvBlockEntity.java b/core/src/main/java/appeng/tile/AEBaseInvBlockEntity.java index 6343a407a..b369d58d8 100644 --- a/core/src/main/java/appeng/tile/AEBaseInvBlockEntity.java +++ b/core/src/main/java/appeng/tile/AEBaseInvBlockEntity.java @@ -18,11 +18,12 @@ package appeng.tile; +import java.util.EnumMap; import java.util.List; import javax.annotation.Nonnull; -import alexiil.mc.lib.attributes.item.FixedItemInv; +import alexiil.mc.lib.attributes.AttributeList; import alexiil.mc.lib.attributes.item.FixedItemInv; import alexiil.mc.lib.attributes.item.impl.EmptyFixedItemInv; import net.minecraft.block.BlockState; @@ -31,10 +32,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.math.Direction; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.World; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.CapabilityItemHandler; import appeng.util.helpers.ItemHandlerUtil; import appeng.util.inv.IAEAppEngInventory; @@ -102,18 +102,34 @@ public abstract class AEBaseInvBlockEntity extends AEBaseBlockEntity implements return this.getInternalInventory(); } - @SuppressWarnings("unchecked") - @Nonnull @Override - public LazyOptional getCapability(@Nonnull Capability capability, Direction facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - if (facing == null) { - return (LazyOptional) LazyOptional.of(this::getInternalInventory); - } else { - return (LazyOptional) LazyOptional.of(() -> getItemHandlerForSide(facing)); + public void addAllAttributes(World world, BlockPos pos, BlockState state, AttributeList to) { + super.addAllAttributes(world, pos, state, to); + offerItemInventory(to); + } + + private void offerItemInventory(AttributeList to) { + FixedItemInv internalHandler = getInternalInventory(); + + // Offer up the directional ones first + for (Direction side : Direction.values()) { + FixedItemInv inv = getItemHandlerForSide(side); + if (inv != internalHandler) { + to.offer(inv, FACE_SHAPES.get(side)); } } - return super.getCapability(capability, facing); + + to.offer(internalHandler); + } + + private static final EnumMap FACE_SHAPES = new EnumMap<>(Direction.class); + static { + FACE_SHAPES.put(Direction.UP, VoxelShapes.cuboid(0f, 15f, 0f, 16f, 16f, 16f)); + FACE_SHAPES.put(Direction.DOWN, VoxelShapes.cuboid(0f, 0f, 0f, 16f, 1f, 16f)); + FACE_SHAPES.put(Direction.NORTH, VoxelShapes.cuboid(0f, 0f, 0f, 16f, 16f, 1f)); + FACE_SHAPES.put(Direction.SOUTH, VoxelShapes.cuboid(0f, 0f, 15f, 16f, 16f, 16f)); + FACE_SHAPES.put(Direction.WEST, VoxelShapes.cuboid(0f, 0f, 0f, 1f, 16f, 16f)); + FACE_SHAPES.put(Direction.EAST, VoxelShapes.cuboid(15f, 0f, 0f, 16f, 16f, 16f)); } } diff --git a/src/main/java/appeng/tile/inventory/AppEngInternalAEInventory.java b/core/src/main/java/appeng/tile/inventory/AppEngInternalAEInventory.java similarity index 100% rename from src/main/java/appeng/tile/inventory/AppEngInternalAEInventory.java rename to core/src/main/java/appeng/tile/inventory/AppEngInternalAEInventory.java diff --git a/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java b/core/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java similarity index 100% rename from src/main/java/appeng/tile/inventory/AppEngInternalInventory.java rename to core/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java diff --git a/src/main/java/appeng/tile/storage/SkyChestBlockEntity.java b/core/src/main/java/appeng/tile/storage/SkyChestBlockEntity.java similarity index 92% rename from src/main/java/appeng/tile/storage/SkyChestBlockEntity.java rename to core/src/main/java/appeng/tile/storage/SkyChestBlockEntity.java index 02d8e4bdf..ef23e962e 100644 --- a/src/main/java/appeng/tile/storage/SkyChestBlockEntity.java +++ b/core/src/main/java/appeng/tile/storage/SkyChestBlockEntity.java @@ -21,11 +21,11 @@ package appeng.tile.storage; import java.io.IOException; import net.minecraft.block.Block; +import net.minecraft.client.block.ChestAnimationProgress; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.sound.SoundEvents; -import net.minecraft.tileentity.IChestLid; import net.minecraft.util.Tickable; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.sound.SoundCategory; @@ -37,7 +37,7 @@ import appeng.tile.AEBaseInvBlockEntity; import appeng.tile.inventory.AppEngInternalInventory; import appeng.util.inv.InvOperation; -public class SkyChestBlockEntity extends AEBaseInvBlockEntity implements Tickable, IChestLid { +public class SkyChestBlockEntity extends AEBaseInvBlockEntity implements Tickable, ChestAnimationProgress { private final AppEngInternalInventory inv = new AppEngInternalInventory(this, 9 * 4); @@ -71,11 +71,6 @@ public class SkyChestBlockEntity extends AEBaseInvBlockEntity implements Tickabl return c; // TESR yo! } - @Override - public boolean canRenderBreaking() { - return true; - } - @Override public FixedItemInv getInternalInventory() { return this.inv; @@ -89,7 +84,7 @@ public class SkyChestBlockEntity extends AEBaseInvBlockEntity implements Tickabl if (this.getPlayerOpen() == 1) { this.getWorld().playSound(player, this.pos.getX() + 0.5D, this.pos.getY() + 0.5D, this.pos.getZ() + 0.5D, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, - this.getWorld().rand.nextFloat() * 0.1F + 0.9F); + this.getWorld().random.nextFloat() * 0.1F + 0.9F); this.markForUpdate(); } } @@ -107,7 +102,7 @@ public class SkyChestBlockEntity extends AEBaseInvBlockEntity implements Tickabl if (this.getPlayerOpen() == 0) { this.getWorld().playSound(player, this.pos.getX() + 0.5D, this.pos.getY() + 0.5D, this.pos.getZ() + 0.5D, SoundEvents.BLOCK_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, - this.getWorld().rand.nextFloat() * 0.1F + 0.9F); + this.getWorld().random.nextFloat() * 0.1F + 0.9F); this.markForUpdate(); } } @@ -117,7 +112,7 @@ public class SkyChestBlockEntity extends AEBaseInvBlockEntity implements Tickabl private void onOpenOrClose() { Block block = getCachedState().getBlock(); if (block instanceof SkyChestBlock) { - this.world.addBlockEvent(this.pos, block, 1, this.numPlayersUsing); + this.world.addSyncedBlockEvent(this.pos, block, 1, this.numPlayersUsing); this.world.updateNeighborsAlways(this.pos, block); // FIXME: Uhm, we are we doing this? this.world.updateNeighborsAlways(this.pos.down(), block); @@ -161,7 +156,7 @@ public class SkyChestBlockEntity extends AEBaseInvBlockEntity implements Tickabl } @Override - public float getLidAngle(float partialTicks) { + public float getAnimationProgress(float partialTicks) { return MathHelper.lerp(partialTicks, this.prevLidAngle, this.lidAngle); } diff --git a/core/src/main/java/appeng/util/Platform.java b/core/src/main/java/appeng/util/Platform.java index 833104b71..c5cb215ac 100644 --- a/core/src/main/java/appeng/util/Platform.java +++ b/core/src/main/java/appeng/util/Platform.java @@ -48,11 +48,6 @@ import appeng.core.AEConfig; import appeng.core.AELog; import appeng.core.stats.AeStats; import appeng.fluids.util.AEFluidStack; -import appeng.hooks.TickHandler; -import appeng.integration.abstraction.JEIFacade; -import appeng.me.GridAccessException; -import appeng.me.GridNode; -import appeng.me.helpers.AENetworkProxy; import appeng.util.helpers.ItemComparisonHelper; import appeng.util.helpers.P2PHelper; import appeng.util.item.AEItemStack; @@ -887,43 +882,43 @@ public class Platform { } } - public static boolean securityCheck(final GridNode a, final GridNode b) { - if (a.getLastSecurityKey() == -1 && b.getLastSecurityKey() == -1) { - return true; - } else if (a.getLastSecurityKey() == b.getLastSecurityKey()) { - return true; - } - - final boolean a_isSecure = isPowered(a.getGrid()) && a.getLastSecurityKey() != -1; - final boolean b_isSecure = isPowered(b.getGrid()) && b.getLastSecurityKey() != -1; - - if (AEConfig.instance().isFeatureEnabled(AEFeature.LOG_SECURITY_AUDITS)) { - final String locationA = a.getGridBlock().isWorldAccessible() ? a.getGridBlock().getLocation().toString() - : "notInWorld"; - final String locationB = b.getGridBlock().isWorldAccessible() ? b.getGridBlock().getLocation().toString() - : "notInWorld"; - - AELog.info( - "Audit: Node A [isSecure=%b, key=%d, playerID=%d, location={%s}] vs Node B[isSecure=%b, key=%d, playerID=%d, location={%s}]", - a_isSecure, a.getLastSecurityKey(), a.getPlayerID(), locationA, b_isSecure, b.getLastSecurityKey(), - b.getPlayerID(), locationB); - } - - // can't do that son... - if (a_isSecure && b_isSecure) { - return false; - } - - if (!a_isSecure && b_isSecure) { - return checkPlayerPermissions(b.getGrid(), a.getPlayerID()); - } - - if (a_isSecure && !b_isSecure) { - return checkPlayerPermissions(a.getGrid(), b.getPlayerID()); - } - - return true; - } +// FIXME FABRIC public static boolean securityCheck(final GridNode a, final GridNode b) { +// FIXME FABRIC if (a.getLastSecurityKey() == -1 && b.getLastSecurityKey() == -1) { +// FIXME FABRIC return true; +// FIXME FABRIC } else if (a.getLastSecurityKey() == b.getLastSecurityKey()) { +// FIXME FABRIC return true; +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC final boolean a_isSecure = isPowered(a.getGrid()) && a.getLastSecurityKey() != -1; +// FIXME FABRIC final boolean b_isSecure = isPowered(b.getGrid()) && b.getLastSecurityKey() != -1; +// FIXME FABRIC +// FIXME FABRIC if (AEConfig.instance().isFeatureEnabled(AEFeature.LOG_SECURITY_AUDITS)) { +// FIXME FABRIC final String locationA = a.getGridBlock().isWorldAccessible() ? a.getGridBlock().getLocation().toString() +// FIXME FABRIC : "notInWorld"; +// FIXME FABRIC final String locationB = b.getGridBlock().isWorldAccessible() ? b.getGridBlock().getLocation().toString() +// FIXME FABRIC : "notInWorld"; +// FIXME FABRIC +// FIXME FABRIC AELog.info( +// FIXME FABRIC "Audit: Node A [isSecure=%b, key=%d, playerID=%d, location={%s}] vs Node B[isSecure=%b, key=%d, playerID=%d, location={%s}]", +// FIXME FABRIC a_isSecure, a.getLastSecurityKey(), a.getPlayerID(), locationA, b_isSecure, b.getLastSecurityKey(), +// FIXME FABRIC b.getPlayerID(), locationB); +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC // can't do that son... +// FIXME FABRIC if (a_isSecure && b_isSecure) { +// FIXME FABRIC return false; +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC if (!a_isSecure && b_isSecure) { +// FIXME FABRIC return checkPlayerPermissions(b.getGrid(), a.getPlayerID()); +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC if (a_isSecure && !b_isSecure) { +// FIXME FABRIC return checkPlayerPermissions(a.getGrid(), b.getPlayerID()); +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC return true; +// FIXME FABRIC } private static boolean isPowered(final IGrid grid) { if (grid == null) { @@ -985,26 +980,26 @@ public class Platform { yaw, pitch); } - public static boolean canAccess(final AENetworkProxy gridProxy, final IActionSource src) { - try { - if (src.player().isPresent()) { - return gridProxy.getSecurity().hasPermission(src.player().get(), SecurityPermissions.BUILD); - } else if (src.machine().isPresent()) { - final IActionHost te = src.machine().get(); - final IGridNode n = te.getActionableNode(); - if (n == null) { - return false; - } - - final int playerID = n.getPlayerID(); - return gridProxy.getSecurity().hasPermission(playerID, SecurityPermissions.BUILD); - } else { - return false; - } - } catch (final GridAccessException gae) { - return false; - } - } +// FIXME FABRIC public static boolean canAccess(final AENetworkProxy gridProxy, final IActionSource src) { +// FIXME FABRIC try { +// FIXME FABRIC if (src.player().isPresent()) { +// FIXME FABRIC return gridProxy.getSecurity().hasPermission(src.player().get(), SecurityPermissions.BUILD); +// FIXME FABRIC } else if (src.machine().isPresent()) { +// FIXME FABRIC final IActionHost te = src.machine().get(); +// FIXME FABRIC final IGridNode n = te.getActionableNode(); +// FIXME FABRIC if (n == null) { +// FIXME FABRIC return false; +// FIXME FABRIC } +// FIXME FABRIC +// FIXME FABRIC final int playerID = n.getPlayerID(); +// FIXME FABRIC return gridProxy.getSecurity().hasPermission(playerID, SecurityPermissions.BUILD); +// FIXME FABRIC } else { +// FIXME FABRIC return false; +// FIXME FABRIC } +// FIXME FABRIC } catch (final GridAccessException gae) { +// FIXME FABRIC return false; +// FIXME FABRIC } +// FIXME FABRIC } public static ItemStack extractItemsByRecipe(final IEnergySource energySrc, final IActionSource mySrc, final IMEMonitor src, final World w, final Recipe r, @@ -1094,7 +1089,8 @@ public class Platform { public static void notifyBlocksOfNeighbors(final World world, final BlockPos pos) { if (!world.isClient) { - TickHandler.INSTANCE.addCallable(world, new BlockUpdate(pos)); + throw new IllegalStateException(); + // FIXME FABRIC TickHandler.INSTANCE.addCallable(world, new BlockUpdate(pos)); } } @@ -1139,7 +1135,8 @@ public class Platform { public static boolean isSearchModeAvailable(SearchBoxMode mode) { if (mode.isRequiresJei()) { - return JEIFacade.instance().isEnabled(); + throw new IllegalStateException(); +// FIXME FABRIC return JEIFacade.instance().isEnabled(); } return true; } diff --git a/core/src/main/resources/appliedenergistics2.accesswidener b/core/src/main/resources/appliedenergistics2.accesswidener new file mode 100644 index 000000000..262127ca9 --- /dev/null +++ b/core/src/main/resources/appliedenergistics2.accesswidener @@ -0,0 +1,5 @@ +accessWidener v1 named +accessible method net/minecraft/client/particle/RedDustParticle (Lnet/minecraft/client/world/ClientWorld;DDDDDDLnet/minecraft/particle/DustParticleEffect;Lnet/minecraft/client/particle/SpriteProvider;)V + +# To disable water-bobbing of item entities (for growing crystals) +extendable method net/minecraft/entity/ItemEntity applyBuoyancy ()V diff --git a/core/src/main/resources/fabric.mod.json b/core/src/main/resources/fabric.mod.json index 5dc572b0d..d926743b2 100644 --- a/core/src/main/resources/fabric.mod.json +++ b/core/src/main/resources/fabric.mod.json @@ -32,5 +32,6 @@ }, "suggests": { "flamingo": "*" - } + }, + "accessWidener" : "appliedenergistics2.accesswidener" } diff --git a/src/main/java/appeng/block/networking/CableBusBlock.java b/src/main/java/appeng/block/networking/CableBusBlock.java index 07458bffc..5d7a8ace1 100644 --- a/src/main/java/appeng/block/networking/CableBusBlock.java +++ b/src/main/java/appeng/block/networking/CableBusBlock.java @@ -43,10 +43,10 @@ import net.minecraft.util.DyeColor; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.Direction; import net.minecraft.util.Hand; -import net.minecraft.util.NonNullList; import net.minecraft.util.math.*; import net.minecraft.util.hit.HitResult.Type; import net.minecraft.block.ShapeContext; @@ -87,7 +87,7 @@ public class CableBusBlock extends AEBaseTileBlock implemen } @Override - public boolean propagatesSkylightDown(BlockState state, BlockView reader, BlockPos pos) { + public boolean isTranslucent(BlockState state, BlockView reader, BlockPos pos) { return true; } @@ -201,7 +201,7 @@ public class CableBusBlock extends AEBaseTileBlock implemen ICableBusContainer cb = this.cb(world, blockPos); // Our built-in model has the actual baked sprites we need - BakedModel model = MinecraftClient.getInstance().getBlockRendererDispatcher() + BakedModel model = MinecraftClient.getInstance().getBlockRenderManager() .getModelForState(this.getDefaultState()); // We cannot add the effect if we don't have the model @@ -234,7 +234,7 @@ public class CableBusBlock extends AEBaseTileBlock implemen ICableBusContainer cb = this.cb(world, pos); // Our built-in model has the actual baked sprites we need - BakedModel model = MinecraftClient.getInstance().getBlockRendererDispatcher() + BakedModel model = MinecraftClient.getInstance().getBlockRenderManager() .getModelForState(this.getDefaultState()); // We cannot add the effect if we dont have the model @@ -347,7 +347,7 @@ public class CableBusBlock extends AEBaseTileBlock implemen @Override @Environment(EnvType.CLIENT) - public void fillItemGroup(ItemGroup group, NonNullList itemStacks) { + public void appendStacks(ItemGroup group, DefaultedList itemStacks) { // do nothing } diff --git a/src/main/java/appeng/block/networking/EnergyCellBlock.java b/src/main/java/appeng/block/networking/EnergyCellBlock.java index 05229bde9..d4cdde871 100644 --- a/src/main/java/appeng/block/networking/EnergyCellBlock.java +++ b/src/main/java/appeng/block/networking/EnergyCellBlock.java @@ -27,7 +27,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.state.IntegerProperty; import net.minecraft.state.StateManager; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import appeng.block.AEBaseTileBlock; import appeng.helpers.AEGlassMaterial; @@ -43,8 +43,8 @@ public class EnergyCellBlock extends AEBaseTileBlock { @Override @Environment(EnvType.CLIENT) - public void fillItemGroup(ItemGroup group, NonNullList itemStacks) { - super.fillItemGroup(group, itemStacks); + public void appendStacks(ItemGroup group, DefaultedList itemStacks) { + super.appendStacks(group, itemStacks); final ItemStack charged = new ItemStack(this, 1); final CompoundTag tag = charged.getOrCreateTag(); diff --git a/src/main/java/appeng/block/networking/WirelessBlock.java b/src/main/java/appeng/block/networking/WirelessBlock.java index f8a11a215..3a173baae 100644 --- a/src/main/java/appeng/block/networking/WirelessBlock.java +++ b/src/main/java/appeng/block/networking/WirelessBlock.java @@ -221,7 +221,7 @@ public class WirelessBlock extends AEBaseTileBlock { } @Override - public boolean propagatesSkylightDown(BlockState state, BlockView reader, BlockPos pos) { + public boolean isTranslucent(BlockState state, BlockView reader, BlockPos pos) { return true; } diff --git a/src/main/java/appeng/block/paint/PaintSplotchesBakedModel.java b/src/main/java/appeng/block/paint/PaintSplotchesBakedModel.java index 69351d58e..b3e1f1dd2 100644 --- a/src/main/java/appeng/block/paint/PaintSplotchesBakedModel.java +++ b/src/main/java/appeng/block/paint/PaintSplotchesBakedModel.java @@ -16,7 +16,7 @@ import net.minecraft.block.BlockState; import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.Material; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; import net.minecraft.util.math.Direction; @@ -35,11 +35,11 @@ import appeng.tile.misc.PaintSplotchesBlockEntity; */ class PaintSplotchesBakedModel implements IDynamicBakedModel { - private static final Material TEXTURE_PAINT1 = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE_PAINT1 = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/paint1")); - private static final Material TEXTURE_PAINT2 = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE_PAINT2 = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/paint2")); - private static final Material TEXTURE_PAINT3 = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE_PAINT3 = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/paint3")); private final Sprite[] textures; diff --git a/src/main/java/appeng/block/paint/PaintSplotchesBlock.java b/src/main/java/appeng/block/paint/PaintSplotchesBlock.java index 2f330cc8d..cbe16e578 100644 --- a/src/main/java/appeng/block/paint/PaintSplotchesBlock.java +++ b/src/main/java/appeng/block/paint/PaintSplotchesBlock.java @@ -26,7 +26,7 @@ import net.minecraft.fluid.Fluid; import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.block.ShapeContext; import net.minecraft.util.shape.VoxelShape; @@ -49,7 +49,7 @@ public class PaintSplotchesBlock extends AEBaseTileBlock itemStacks) { + public void appendStacks(ItemGroup group, DefaultedList itemStacks) { // do nothing } diff --git a/src/main/java/appeng/block/qnb/QnbFormedBakedModel.java b/src/main/java/appeng/block/qnb/QnbFormedBakedModel.java index bb770f171..807d10173 100644 --- a/src/main/java/appeng/block/qnb/QnbFormedBakedModel.java +++ b/src/main/java/appeng/block/qnb/QnbFormedBakedModel.java @@ -18,7 +18,7 @@ import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.Material; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; import net.minecraft.util.math.Direction; @@ -32,17 +32,17 @@ import appeng.tile.qnb.QuantumBridgeBlockEntity; class QnbFormedBakedModel implements IDynamicBakedModel { - private static final Material TEXTURE_LINK = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE_LINK = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/quantum_link")); - private static final Material TEXTURE_RING = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE_RING = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/quantum_ring")); - private static final Material TEXTURE_RING_LIGHT = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE_RING_LIGHT = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/quantum_ring_light")); - private static final Material TEXTURE_RING_LIGHT_CORNER = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE_RING_LIGHT_CORNER = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/quantum_ring_light_corner")); - private static final Material TEXTURE_CABLE_GLASS = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE_CABLE_GLASS = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "parts/cable/glass/transparent")); - private static final Material TEXTURE_COVERED_CABLE = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE_COVERED_CABLE = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "parts/cable/covered/transparent")); private static final float DEFAULT_RENDER_MIN = 2.0f; diff --git a/src/main/java/appeng/block/spatial/MatrixFrameBlock.java b/src/main/java/appeng/block/spatial/MatrixFrameBlock.java index dcaf4ec74..c27deb176 100644 --- a/src/main/java/appeng/block/spatial/MatrixFrameBlock.java +++ b/src/main/java/appeng/block/spatial/MatrixFrameBlock.java @@ -27,7 +27,7 @@ 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.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.block.ShapeContext; import net.minecraft.util.shape.VoxelShape; @@ -60,7 +60,7 @@ public class MatrixFrameBlock extends AEBaseBlock { @Override @Environment(EnvType.CLIENT) - public void fillItemGroup(ItemGroup group, NonNullList itemStacks) { + public void appendStacks(ItemGroup group, DefaultedList itemStacks) { // do nothing } @@ -87,7 +87,7 @@ public class MatrixFrameBlock extends AEBaseBlock { } @Override - public boolean propagatesSkylightDown(BlockState state, BlockView reader, BlockPos pos) { + public boolean isTranslucent(BlockState state, BlockView reader, BlockPos pos) { return true; } diff --git a/src/main/java/appeng/client/ClientHelper.java b/src/main/java/appeng/client/ClientHelper.java index 98d610b84..cc1b8d67c 100644 --- a/src/main/java/appeng/client/ClientHelper.java +++ b/src/main/java/appeng/client/ClientHelper.java @@ -26,6 +26,7 @@ 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; @@ -91,9 +92,6 @@ public class ClientHelper extends ServerHelper { case Energy: this.spawnEnergy(world, posX, posY, posZ); return; - case Lightning: - this.spawnLightning(world, posX, posY, posZ); - return; case LightningArc: this.spawnLightningArc(world, posX, posY, posZ, (Vec3d) o); return; @@ -188,11 +186,6 @@ public class ClientHelper extends ServerHelper { -x * 0.1, -y * 0.1, -z * 0.1); } - private void spawnLightning(final World world, final double posX, final double posY, final double posZ) { - MinecraftClient.getInstance().particleManager.addParticle(ParticleTypes.LIGHTNING, posX, posY + 0.3f, posZ, 0.0f, 0.0f, - 0.0f); - } - private void spawnLightningArc(final World world, final double posX, final double posY, final double posZ, final Vec3d second) { final LightningFX fx = new LightningArcFX(world, posX, posY, posZ, second.x, second.y, second.z, 0.0f, 0.0f, @@ -220,7 +213,7 @@ public class ClientHelper extends ServerHelper { } @Override - public boolean isActionKey(ActionKey key, InputMappings.Input pressedKey) { + 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/main/java/appeng/client/gui/AEBaseScreen.java b/src/main/java/appeng/client/gui/AEBaseScreen.java index 1a5f0d4f5..22a76916d 100644 --- a/src/main/java/appeng/client/gui/AEBaseScreen.java +++ b/src/main/java/appeng/client/gui/AEBaseScreen.java @@ -32,6 +32,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.texture.Sprite; +import net.minecraft.client.util.InputUtil; import net.minecraft.util.Formatting; import org.lwjgl.glfw.GLFW; import org.lwjgl.opengl.GL11; @@ -42,7 +43,7 @@ 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.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerEntity; @@ -499,7 +500,7 @@ public abstract class AEBaseScreen extends ContainerS return Preconditions.checkNotNull(getMinecraft().player); } - protected boolean checkHotbarKeys(final InputMappings.Input input) { + protected boolean checkHotbarKeys(final InputUtil.Key input) { final Slot theSlot = this.getSlotUnderMouse(); if (getPlayer().inventory.getItemStack().isEmpty() && theSlot != null) { @@ -645,10 +646,10 @@ public abstract class AEBaseScreen extends ContainerS RenderSystem.disableBlend(); final Fluid fluid = fs.getFluid(); FluidAttributes fluidAttributes = fluid.getAttributes(); - bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE); + bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX); Identifier fluidStillTexture = fluidAttributes.getStillTexture(fs.getFluidStack()); final Sprite sprite = getMinecraft() - .getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE).apply(fluidStillTexture); + .getAtlasSpriteGetter(SpriteAtlasTexture.BLOCK_ATLAS_TEX).apply(fluidStillTexture); // Set color for dynamic fluids // Convert int color to RGB diff --git a/src/main/java/appeng/client/gui/implementations/AESubScreen.java b/src/main/java/appeng/client/gui/implementations/AESubScreen.java index 9f5018eaf..d463b2d6b 100644 --- a/src/main/java/appeng/client/gui/implementations/AESubScreen.java +++ b/src/main/java/appeng/client/gui/implementations/AESubScreen.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import javax.annotation.Nullable; import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import appeng.api.AEApi; @@ -34,7 +34,7 @@ import appeng.tile.storage.ChestBlockEntity; final class AESubScreen { private final AEBaseScreen gui; - private final ContainerType previousContainerType; + private final ScreenHandlerType previousContainerType; private final ItemStack previousContainerIcon; /** diff --git a/src/main/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java b/src/main/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java index 3e911e8d0..bdd98f5d2 100644 --- a/src/main/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java +++ b/src/main/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java @@ -30,6 +30,7 @@ import java.util.WeakHashMap; import com.google.common.collect.HashMultimap; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.util.InputUtil; import org.lwjgl.glfw.GLFW; import net.minecraft.client.util.InputMappings; @@ -106,7 +107,7 @@ public class InterfaceTerminalScreen extends AEBaseScreen extends AEBas @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - InputMappings.Input input = InputMappings.getInputByCode(keyCode, scanCode); + InputUtil.Key input = InputMappings.getInputByCode(keyCode, scanCode); if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(input)) { if (AppEng.proxy.isActionKey(ActionKey.TOGGLE_FOCUS, input)) { diff --git a/src/main/java/appeng/client/gui/implementations/QuartzKnifeScreen.java b/src/main/java/appeng/client/gui/implementations/QuartzKnifeScreen.java index 0949bab80..01c7ce542 100644 --- a/src/main/java/appeng/client/gui/implementations/QuartzKnifeScreen.java +++ b/src/main/java/appeng/client/gui/implementations/QuartzKnifeScreen.java @@ -18,6 +18,7 @@ package appeng.client.gui.implementations; +import net.minecraft.client.util.InputUtil; import org.lwjgl.glfw.GLFW; import net.minecraft.client.gui.widget.TextFieldWidget; @@ -83,7 +84,7 @@ public class QuartzKnifeScreen extends AEBaseScreen { @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - InputMappings.Input input = InputMappings.getInputByCode(keyCode, scanCode); + InputUtil.Key input = InputMappings.getInputByCode(keyCode, scanCode); if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(input)) { if (AppEng.proxy.isActionKey(ActionKey.TOGGLE_FOCUS, input)) { diff --git a/src/main/java/appeng/client/render/DummyFluidDispatcherBakedModel.java b/src/main/java/appeng/client/render/DummyFluidDispatcherBakedModel.java index 282272ef0..691e4e00d 100644 --- a/src/main/java/appeng/client/render/DummyFluidDispatcherBakedModel.java +++ b/src/main/java/appeng/client/render/DummyFluidDispatcherBakedModel.java @@ -30,11 +30,11 @@ import com.google.common.collect.ImmutableList; import net.minecraft.block.BlockState; import net.minecraft.client.render.model.json.ModelOverrideList; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.util.math.AffineTransformation; import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.Material; -import net.minecraft.client.renderer.texture.AtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.entity.LivingEntity; import net.minecraft.fluid.Fluids; @@ -99,9 +99,9 @@ public class DummyFluidDispatcherBakedModel extends DelegateBakedModel { fluidStack = new FluidVolume(Fluids.WATER, FluidAttributes.BUCKET_VOLUME); } - FluidAttributes attributes = fluidStack.getFluid().getAttributes(); + FluidAttributes attributes = fluidStack.getFluidKey().getAttributes(); Identifier stillTexture = attributes.getStillTexture(fluidStack); - Material stillMaterial = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, stillTexture); + Material stillMaterial = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, stillTexture); Sprite sprite = DummyFluidDispatcherBakedModel.this.bakedTextureGetter.apply(stillMaterial); if (sprite == null) { return new DummyFluidBakedModel(ImmutableList.of()); diff --git a/src/main/java/appeng/client/render/FacingToRotation.java b/src/main/java/appeng/client/render/FacingToRotation.java index 799844cc4..1903d1aa0 100644 --- a/src/main/java/appeng/client/render/FacingToRotation.java +++ b/src/main/java/appeng/client/render/FacingToRotation.java @@ -20,7 +20,7 @@ package appeng.client.render; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.renderer.Matrix4f; +import net.minecraft.util.math.Matrix4f; import net.minecraft.client.renderer.Quaternion; import net.minecraft.client.util.math.Vector3f; import net.minecraft.client.renderer.Vector4f; @@ -66,9 +66,9 @@ public enum FacingToRotation implements StringIdentifiable { this.rot = rot; this.mat = new Matrix4f(); this.mat.setIdentity(); - this.mat.mul(xRot = Vector3f.XP.rotationDegrees(rot.getX())); - this.mat.mul(yRot = Vector3f.YP.rotationDegrees(rot.getY())); - this.mat.mul(zRot = Vector3f.ZP.rotationDegrees(rot.getZ())); + this.mat.mul(xRot = Vector3f.POSITIVE_X.getDegreesQuaternion(rot.getX())); + this.mat.mul(yRot = Vector3f.POSITIVE_Y.getDegreesQuaternion(rot.getY())); + this.mat.mul(zRot = Vector3f.POSITIVE_Z.getDegreesQuaternion(rot.getZ())); } public boolean isRedundant() { @@ -84,9 +84,9 @@ public enum FacingToRotation implements StringIdentifiable { } public void push(MatrixStack mStack) { - mStack.rotate(xRot); - mStack.rotate(yRot); - mStack.rotate(zRot); + mStack.multiply(xRot); + mStack.multiply(yRot); + mStack.multiply(zRot); } public Direction rotate(Direction facing) { diff --git a/src/main/java/appeng/client/render/SpatialSkyRender.java b/src/main/java/appeng/client/render/SpatialSkyRender.java index 0ec7a4ece..a1ab5ca84 100644 --- a/src/main/java/appeng/client/render/SpatialSkyRender.java +++ b/src/main/java/appeng/client/render/SpatialSkyRender.java @@ -82,7 +82,7 @@ public class SpatialSkyRender implements SkyRenderHandler { // The skybox is pitch black and untextured for (Quaternion rotation : SKYBOX_SIDE_ROTATIONS) { matrixStack.push(); - matrixStack.rotate(rotation); + matrixStack.multiply(rotation); RenderSystem.disableTexture(); VertexBuffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); diff --git a/src/main/java/appeng/client/render/TesrRenderHelper.java b/src/main/java/appeng/client/render/TesrRenderHelper.java index 1b044a560..31d2c72f8 100644 --- a/src/main/java/appeng/client/render/TesrRenderHelper.java +++ b/src/main/java/appeng/client/render/TesrRenderHelper.java @@ -47,25 +47,25 @@ public class TesrRenderHelper { public static void rotateToFace(MatrixStack mStack, Direction face, byte spin) { switch (face) { case UP: - mStack.rotate(Vector3f.XP.rotationDegrees(270)); - mStack.rotate(Vector3f.ZP.rotationDegrees(-spin * 90.0F)); + mStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(270)); + mStack.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(-spin * 90.0F)); break; case DOWN: - mStack.rotate(Vector3f.XP.rotationDegrees(90.0F)); - mStack.rotate(Vector3f.ZP.rotationDegrees(spin * -90.0F)); + mStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(90.0F)); + mStack.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(spin * -90.0F)); break; case EAST: - mStack.rotate(Vector3f.YP.rotationDegrees(90.0F)); + mStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(90.0F)); break; case WEST: - mStack.rotate(Vector3f.YP.rotationDegrees(-90.0F)); + mStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-90.0F)); break; case NORTH: - mStack.rotate(Vector3f.YP.rotationDegrees(180.0F)); + mStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(180.0F)); break; case SOUTH: diff --git a/src/main/java/appeng/client/render/cablebus/CableBuilder.java b/src/main/java/appeng/client/render/cablebus/CableBuilder.java index 3ea96a9fb..b12a0da2f 100644 --- a/src/main/java/appeng/client/render/cablebus/CableBuilder.java +++ b/src/main/java/appeng/client/render/cablebus/CableBuilder.java @@ -27,7 +27,7 @@ import java.util.function.Function; import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.Material; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.math.Direction; import net.minecraft.util.Identifier; @@ -99,7 +99,7 @@ class CableBuilder { throw new IllegalStateException("Cable type " + cableType + " does not support connections."); } - return new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + return new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, textureFolder + color.name().toLowerCase())); } diff --git a/src/main/java/appeng/client/render/cablebus/CableBusBreakingParticle.java b/src/main/java/appeng/client/render/cablebus/CableBusBreakingParticle.java index 0a8b1b4fc..716306b49 100644 --- a/src/main/java/appeng/client/render/cablebus/CableBusBreakingParticle.java +++ b/src/main/java/appeng/client/render/cablebus/CableBusBreakingParticle.java @@ -1,6 +1,6 @@ package appeng.client.render.cablebus; -import net.minecraft.client.particle.IParticleRenderType; +import net.minecraft.client.particle.ParticleTextureSheet; import net.minecraft.client.particle.SpriteBillboardParticle; import net.minecraft.client.texture.Sprite; import net.minecraft.world.World; @@ -19,7 +19,7 @@ public class CableBusBreakingParticle extends SpriteBillboardParticle { double speedZ, Sprite sprite) { super(world, x, y, z, speedX, speedY, speedZ); this.setSprite(sprite); - this.particleGravity = 1.0F; + this.gravityStrength = 1.0F; this.particleScale /= 2.0F; this.field_217571_C = this.rand.nextFloat() * 3.0F; this.field_217572_F = this.rand.nextFloat() * 3.0F; @@ -30,8 +30,8 @@ public class CableBusBreakingParticle extends SpriteBillboardParticle { } @Override - public IParticleRenderType getRenderType() { - return IParticleRenderType.TERRAIN_SHEET; + public ParticleTextureSheet getRenderType() { + return ParticleTextureSheet.TERRAIN_SHEET; } @Override diff --git a/src/main/java/appeng/client/render/cablebus/CableCoreType.java b/src/main/java/appeng/client/render/cablebus/CableCoreType.java index d4e291898..13cc76306 100644 --- a/src/main/java/appeng/client/render/cablebus/CableCoreType.java +++ b/src/main/java/appeng/client/render/cablebus/CableCoreType.java @@ -24,7 +24,7 @@ import java.util.Map; import com.google.common.collect.ImmutableMap; import net.minecraft.client.render.model.Material; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.util.Identifier; import appeng.api.util.AECableType; @@ -73,7 +73,7 @@ public enum CableCoreType { } public Material getTexture(AEColor color) { - return new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + return new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, this.textureFolder + "/" + color.name().toLowerCase())); } diff --git a/src/main/java/appeng/client/render/cablebus/FacadeBuilder.java b/src/main/java/appeng/client/render/cablebus/FacadeBuilder.java index 07f1b02e0..5969c9b95 100644 --- a/src/main/java/appeng/client/render/cablebus/FacadeBuilder.java +++ b/src/main/java/appeng/client/render/cablebus/FacadeBuilder.java @@ -33,7 +33,7 @@ import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.renderer.RenderTypeLookup; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.render.model.BakedQuad; @@ -191,7 +191,7 @@ public class FacadeBuilder { List holeStrips = getBoxes(facadeBox, cutOutBox, side.getAxis()); ILightReader facadeAccess = new FacadeBlockAccess(parentWorld, pos, side, blockState); - BlockRendererDispatcher dispatcher = MinecraftClient.getInstance().getBlockRendererDispatcher(); + BlockRenderManager dispatcher = MinecraftClient.getInstance().getBlockRenderManager(); BakedModel model = dispatcher.getModelForState(blockState); IModelData modelData = model.getModelData(facadeAccess, pos, blockState, EmptyModelData.INSTANCE); diff --git a/src/main/java/appeng/client/render/cablebus/P2PTunnelFrequencyModel.java b/src/main/java/appeng/client/render/cablebus/P2PTunnelFrequencyModel.java index 7a31759f8..0363493d1 100644 --- a/src/main/java/appeng/client/render/cablebus/P2PTunnelFrequencyModel.java +++ b/src/main/java/appeng/client/render/cablebus/P2PTunnelFrequencyModel.java @@ -13,7 +13,7 @@ import net.minecraft.client.render.model.IUnbakedModel; import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.Material; import net.minecraft.client.render.model.ModelLoader; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; import net.minecraftforge.client.model.IModelConfiguration; @@ -22,7 +22,7 @@ import net.minecraftforge.client.model.geometry.IModelGeometry; import appeng.core.AppEng; public class P2PTunnelFrequencyModel implements IModelGeometry { - private static final Material TEXTURE = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "parts/p2p_tunnel_frequency")); @Override diff --git a/src/main/java/appeng/client/render/cablebus/QuadRotator.java b/src/main/java/appeng/client/render/cablebus/QuadRotator.java index 7cb01b540..ffe81c432 100644 --- a/src/main/java/appeng/client/render/cablebus/QuadRotator.java +++ b/src/main/java/appeng/client/render/cablebus/QuadRotator.java @@ -21,7 +21,7 @@ package appeng.client.render.cablebus; import java.util.ArrayList; import java.util.List; -import net.minecraft.client.renderer.Matrix4f; +import net.minecraft.util.math.Matrix4f; import net.minecraft.client.util.math.Vector3f; import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; diff --git a/src/main/java/appeng/client/render/cablebus/SmartCableTextures.java b/src/main/java/appeng/client/render/cablebus/SmartCableTextures.java index 2e4a7caf0..7915271ca 100644 --- a/src/main/java/appeng/client/render/cablebus/SmartCableTextures.java +++ b/src/main/java/appeng/client/render/cablebus/SmartCableTextures.java @@ -22,7 +22,7 @@ import java.util.Arrays; import java.util.function.Function; import net.minecraft.client.render.model.Material; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; @@ -44,7 +44,7 @@ public class SmartCableTextures { new Identifier(AppEng.MOD_ID, "parts/cable/smart/channels_12"), // new Identifier(AppEng.MOD_ID, "parts/cable/smart/channels_13"), // new Identifier(AppEng.MOD_ID, "parts/cable/smart/channels_14")// - }).map(e -> new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, e)).toArray(Material[]::new); + }).map(e -> new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, e)).toArray(Material[]::new); // Textures used to display channels on smart cables. There's two sets of 5 // textures each, and diff --git a/src/main/java/appeng/client/render/crafting/CraftingCubeModel.java b/src/main/java/appeng/client/render/crafting/CraftingCubeModel.java index f26d8f6d4..9bc7d1eb7 100644 --- a/src/main/java/appeng/client/render/crafting/CraftingCubeModel.java +++ b/src/main/java/appeng/client/render/crafting/CraftingCubeModel.java @@ -31,7 +31,7 @@ import net.minecraft.client.render.model.IUnbakedModel; import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.Material; import net.minecraft.client.render.model.ModelLoader; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; import net.minecraftforge.client.model.IModelConfiguration; @@ -121,7 +121,7 @@ class CraftingCubeModel implements IModelGeometry { } private static Material texture(String name) { - return new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + return new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/crafting/" + name)); } } diff --git a/src/main/java/appeng/client/render/model/BiometricCardModel.java b/src/main/java/appeng/client/render/model/BiometricCardModel.java index deeab0c11..ea82c496b 100644 --- a/src/main/java/appeng/client/render/model/BiometricCardModel.java +++ b/src/main/java/appeng/client/render/model/BiometricCardModel.java @@ -15,7 +15,7 @@ import net.minecraft.client.render.model.IUnbakedModel; import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.Material; import net.minecraft.client.render.model.ModelLoader; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; import net.minecraftforge.client.model.IModelConfiguration; @@ -30,7 +30,7 @@ import appeng.core.AppEng; public class BiometricCardModel implements IModelGeometry { public static final Identifier MODEL_BASE = new Identifier(AppEng.MOD_ID, "item/biometric_card_base"); - private static final Material TEXTURE = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "item/biometric_card_hash")); @Override diff --git a/src/main/java/appeng/client/render/model/ColorApplicatorModel.java b/src/main/java/appeng/client/render/model/ColorApplicatorModel.java index 6f62075af..a07ac85ec 100644 --- a/src/main/java/appeng/client/render/model/ColorApplicatorModel.java +++ b/src/main/java/appeng/client/render/model/ColorApplicatorModel.java @@ -13,7 +13,7 @@ import net.minecraft.client.render.model.IUnbakedModel; import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.Material; import net.minecraft.client.render.model.ModelLoader; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; import net.minecraftforge.client.model.IModelConfiguration; @@ -30,11 +30,11 @@ public class ColorApplicatorModel implements IModelGeometry Strings.padStart(s, 4, '0')) .map(s -> new Identifier("appliedenergistics2:block/glass/quartz_glass_frame" + s)) - .map(rl -> new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, rl)).toArray(Material[]::new); + .map(rl -> new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, rl)).toArray(Material[]::new); } private final Sprite[] glassTextures; diff --git a/src/main/java/appeng/client/render/model/MatrixVertexTransformer.java b/src/main/java/appeng/client/render/model/MatrixVertexTransformer.java index a49cc3119..7c6581343 100644 --- a/src/main/java/appeng/client/render/model/MatrixVertexTransformer.java +++ b/src/main/java/appeng/client/render/model/MatrixVertexTransformer.java @@ -20,7 +20,7 @@ package appeng.client.render.model; import java.util.List; -import net.minecraft.client.renderer.Matrix4f; +import net.minecraft.util.math.Matrix4f; import net.minecraft.client.renderer.Vector4f; import net.minecraft.client.texture.Sprite; import net.minecraft.client.renderer.vertex.VertexFormat; diff --git a/src/main/java/appeng/client/render/model/MemoryCardModel.java b/src/main/java/appeng/client/render/model/MemoryCardModel.java index 8feb7b2cf..eb632dea1 100644 --- a/src/main/java/appeng/client/render/model/MemoryCardModel.java +++ b/src/main/java/appeng/client/render/model/MemoryCardModel.java @@ -15,7 +15,7 @@ import net.minecraft.client.render.model.IUnbakedModel; import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.Material; import net.minecraft.client.render.model.ModelLoader; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; import net.minecraftforge.client.model.IModelConfiguration; @@ -30,7 +30,7 @@ import appeng.core.AppEng; public class MemoryCardModel implements IModelGeometry { public static final Identifier MODEL_BASE = new Identifier(AppEng.MOD_ID, "item/memory_card_base"); - private static final Material TEXTURE = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final Material TEXTURE = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "item/memory_card_hash")); @Override diff --git a/src/main/java/appeng/client/render/model/SkyCompassBakedModel.java b/src/main/java/appeng/client/render/model/SkyCompassBakedModel.java index d90bae14c..9128989b5 100644 --- a/src/main/java/appeng/client/render/model/SkyCompassBakedModel.java +++ b/src/main/java/appeng/client/render/model/SkyCompassBakedModel.java @@ -28,7 +28,7 @@ import net.minecraft.block.BlockState; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.renderer.Matrix4f; +import net.minecraft.util.math.Matrix4f; import net.minecraft.client.renderer.Quaternion; import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.json.ModelOverrideList; diff --git a/src/main/java/appeng/client/render/spatial/SpatialPylonModel.java b/src/main/java/appeng/client/render/spatial/SpatialPylonModel.java index 9910f3627..bc42a9ec9 100644 --- a/src/main/java/appeng/client/render/spatial/SpatialPylonModel.java +++ b/src/main/java/appeng/client/render/spatial/SpatialPylonModel.java @@ -34,7 +34,7 @@ import net.minecraft.client.render.model.IUnbakedModel; import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.Material; import net.minecraft.client.render.model.ModelLoader; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; import net.minecraftforge.client.model.IModelConfiguration; @@ -65,7 +65,7 @@ public class SpatialPylonModel implements IModelGeometry { } private static Material getTexturePath(SpatialPylonTextureType type) { - return new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + return new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, new Identifier(AppEng.MOD_ID, "block/spatial_pylon/" + type.name().toLowerCase())); } diff --git a/src/main/java/appeng/client/render/tesr/CrankTESR.java b/src/main/java/appeng/client/render/tesr/CrankTESR.java index a5aa8e6da..56285b670 100644 --- a/src/main/java/appeng/client/render/tesr/CrankTESR.java +++ b/src/main/java/appeng/client/render/tesr/CrankTESR.java @@ -24,11 +24,11 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.util.math.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.minecraft.client.render.VertexConsumer; import net.minecraft.block.BlockState; import net.minecraft.client.renderer.Atlases; -import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.renderer.Quaternion; import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; @@ -56,13 +56,13 @@ public class CrankTESR extends BlockEntityRenderer { ms.push(); ms.translate(0.5, 0.5, 0.5); FacingToRotation.get(te.getForward(), te.getUp()).push(ms); - ms.rotate(new Quaternion(0, te.getVisibleRotation(), 0, true)); + ms.multiply(new Quaternion(0, te.getVisibleRotation(), 0, true)); ms.translate(-0.5, -0.5, -0.5); BlockState blockState = te.getCachedState(); - BlockRendererDispatcher dispatcher = MinecraftClient.getInstance().getBlockRendererDispatcher(); + BlockRenderManager dispatcher = MinecraftClient.getInstance().getBlockRenderManager(); BakedModel model = dispatcher.getModelForState(blockState); - IVertexBuilder buffer = buffers.getBuffer(Atlases.getTranslucentBlockType()); + VertexConsumer buffer = buffers.getBuffer(Atlases.getTranslucentBlockType()); dispatcher.getBlockModelRenderer().renderModelBrightnessColor(ms.getLast(), buffer, null, model, 1, 1, 1, combinedLightIn, combinedOverlayIn); ms.pop(); diff --git a/src/main/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java b/src/main/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java index 285879ba6..87c970a6b 100644 --- a/src/main/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java +++ b/src/main/java/appeng/client/render/tesr/DriveLedTileEntityRenderer.java @@ -3,10 +3,10 @@ package appeng.client.render.tesr; import java.util.EnumMap; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; 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.vertex.IVertexBuilder; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.renderer.RenderState; @@ -84,7 +84,7 @@ public class DriveLedTileEntityRenderer extends BlockEntityRenderer { matrixStackIn.push(); float f = tileEntityIn.getForward().getHorizontalAngle(); matrixStackIn.translate(0.5D, 0.5D, 0.5D); - matrixStackIn.rotate(Vector3f.YP.rotationDegrees(-f)); + matrixStackIn.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-f)); matrixStackIn.translate(-0.5D, -0.5D, -0.5D); float f1 = tileEntityIn.getLidAngle(partialTicks); f1 = 1.0F - f1; f1 = 1.0F - f1 * f1 * f1; Material material = this.getMaterial(tileEntityIn); - IVertexBuilder ivertexbuilder = material.getBuffer(bufferIn, RenderLayer::getEntityCutout); + VertexConsumer ivertexbuilder = material.getBuffer(bufferIn, RenderLayer::getEntityCutout); this.renderModels(matrixStackIn, ivertexbuilder, this.singleLid, this.singleLatch, this.singleBottom, f1, combinedLightIn, combinedOverlayIn); matrixStackIn.pop(); } - private void renderModels(MatrixStack matrixStackIn, IVertexBuilder bufferIn, ModelRenderer chestLid, - ModelRenderer chestLatch, ModelRenderer chestBottom, float lidAngle, int combinedLightIn, - int combinedOverlayIn) { + private void renderModels(MatrixStack matrixStackIn, VertexConsumer bufferIn, ModelRenderer chestLid, + ModelRenderer chestLatch, ModelRenderer chestBottom, float lidAngle, int combinedLightIn, + int combinedOverlayIn) { chestLid.rotateAngleX = -(lidAngle * 1.5707964F); chestLatch.rotateAngleX = chestLid.rotateAngleX; chestLid.render(matrixStackIn, bufferIn, combinedLightIn, combinedOverlayIn); diff --git a/src/main/java/appeng/client/render/tesr/SkyCompassTESR.java b/src/main/java/appeng/client/render/tesr/SkyCompassTESR.java index dc7968262..58f0dedf6 100644 --- a/src/main/java/appeng/client/render/tesr/SkyCompassTESR.java +++ b/src/main/java/appeng/client/render/tesr/SkyCompassTESR.java @@ -19,15 +19,15 @@ package appeng.client.render.tesr; import net.fabricmc.api.EnvType; +import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.util.math.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.renderer.Atlases; -import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.util.math.Direction; @@ -41,7 +41,7 @@ import appeng.tile.misc.SkyCompassBlockEntity; @Environment(EnvType.CLIENT) public class SkyCompassTESR extends BlockEntityRenderer { - private static BlockRendererDispatcher blockRenderer; + private static BlockRenderManager blockRenderer; public SkyCompassTESR(BlockEntityRenderDispatcher rendererDispatcherIn) { super(rendererDispatcherIn); @@ -52,10 +52,10 @@ public class SkyCompassTESR extends BlockEntityRenderer { int combinedLightIn, int combinedOverlayIn) { if (blockRenderer == null) { - blockRenderer = MinecraftClient.getInstance().getBlockRendererDispatcher(); + blockRenderer = MinecraftClient.getInstance().getBlockRenderManager(); } - IVertexBuilder buffer = buffers.getBuffer(Atlases.getTranslucentBlockType()); + VertexConsumer buffer = buffers.getBuffer(Atlases.getTranslucentBlockType()); BlockState blockState = te.getCachedState(); BakedModel model = blockRenderer.getBlockModelShapes().getModel(blockState); diff --git a/src/main/java/appeng/container/AEBaseContainer.java b/src/main/java/appeng/container/AEBaseContainer.java index ef8019d66..0fa2ac4ee 100644 --- a/src/main/java/appeng/container/AEBaseContainer.java +++ b/src/main/java/appeng/container/AEBaseContainer.java @@ -28,10 +28,10 @@ import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.inventory.Inventory; import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; @@ -96,13 +96,13 @@ public abstract class AEBaseContainer extends Container { // Slots that were created to represent the player inventory private List playerInventorySlots = null; - public AEBaseContainer(ContainerType containerType, int id, final PlayerInventory ip, final BlockEntity myTile, - final IPart myPart) { + public AEBaseContainer(ScreenHandlerType containerType, int id, final PlayerInventory ip, final BlockEntity myTile, + final IPart myPart) { this(containerType, id, ip, myTile, myPart, null); } - public AEBaseContainer(ContainerType containerType, int id, final PlayerInventory ip, final BlockEntity myTile, - final IPart myPart, final IGuiItemObject gio) { + public AEBaseContainer(ScreenHandlerType containerType, int id, final PlayerInventory ip, final BlockEntity myTile, + final IPart myPart, final IGuiItemObject gio) { super(containerType, id); this.invPlayer = ip; this.tileEntity = myTile; @@ -112,7 +112,7 @@ public abstract class AEBaseContainer extends Container { this.prepareSync(); } - public AEBaseContainer(ContainerType containerType, int id, final PlayerInventory ip, final Object anchor) { + public AEBaseContainer(ScreenHandlerType containerType, int id, final PlayerInventory ip, final Object anchor) { super(containerType, id); this.invPlayer = ip; this.tileEntity = anchor instanceof BlockEntity ? (BlockEntity) anchor : null; diff --git a/src/main/java/appeng/container/ContainerOpener.java b/src/main/java/appeng/container/ContainerOpener.java index c677f0144..1e740ee20 100644 --- a/src/main/java/appeng/container/ContainerOpener.java +++ b/src/main/java/appeng/container/ContainerOpener.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.Map; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import appeng.core.AELog; @@ -16,13 +16,13 @@ public final class ContainerOpener { private ContainerOpener() { } - private static final Map, Opener> registry = new HashMap<>(); + private static final Map, Opener> registry = new HashMap<>(); - public static void addOpener(ContainerType type, Opener opener) { + public static void addOpener(ScreenHandlerType type, Opener opener) { registry.put(type, opener); } - public static boolean openContainer(ContainerType type, PlayerEntity player, ContainerLocator locator) { + public static boolean openContainer(ScreenHandlerType type, PlayerEntity player, ContainerLocator locator) { Opener opener = registry.get(type); if (opener == null) { AELog.warn("Trying to open container for unknown container type {}", type); diff --git a/src/main/java/appeng/container/implementations/CellWorkbenchContainer.java b/src/main/java/appeng/container/implementations/CellWorkbenchContainer.java index 5f4ef1f56..6fb27ceb3 100644 --- a/src/main/java/appeng/container/implementations/CellWorkbenchContainer.java +++ b/src/main/java/appeng/container/implementations/CellWorkbenchContainer.java @@ -23,8 +23,8 @@ import java.util.Iterator; 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.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; @@ -56,7 +56,7 @@ import appeng.util.iterators.NullIterator; public class CellWorkbenchContainer extends UpgradeableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( CellWorkbenchContainer::new, CellWorkbenchBlockEntity.class); diff --git a/src/main/java/appeng/container/implementations/ChestContainer.java b/src/main/java/appeng/container/implementations/ChestContainer.java index e06143cb9..e94d2aae3 100644 --- a/src/main/java/appeng/container/implementations/ChestContainer.java +++ b/src/main/java/appeng/container/implementations/ChestContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.SecurityPermissions; @@ -31,7 +31,7 @@ import appeng.tile.storage.ChestBlockEntity; public class ChestContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( ChestContainer::new, ChestBlockEntity.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/CondenserContainer.java b/src/main/java/appeng/container/implementations/CondenserContainer.java index dfdc0c404..0dd995c20 100644 --- a/src/main/java/appeng/container/implementations/CondenserContainer.java +++ b/src/main/java/appeng/container/implementations/CondenserContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import alexiil.mc.lib.attributes.item.FixedItemInv; @@ -37,7 +37,7 @@ import appeng.util.Platform; public class CondenserContainer extends AEBaseContainer implements IProgressProvider { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( CondenserContainer::new, CondenserBlockEntity.class); diff --git a/src/main/java/appeng/container/implementations/CraftAmountContainer.java b/src/main/java/appeng/container/implementations/CraftAmountContainer.java index ece0c87a6..aa6257d2c 100644 --- a/src/main/java/appeng/container/implementations/CraftAmountContainer.java +++ b/src/main/java/appeng/container/implementations/CraftAmountContainer.java @@ -22,7 +22,7 @@ import javax.annotation.Nonnull; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.inventory.container.Slot; import net.minecraft.network.PacketByteBuf; import net.minecraft.world.World; @@ -41,7 +41,7 @@ import appeng.tile.inventory.AppEngInternalInventory; public class CraftAmountContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( CraftAmountContainer::new, ITerminalHost.class, SecurityPermissions.CRAFT); diff --git a/src/main/java/appeng/container/implementations/CraftConfirmContainer.java b/src/main/java/appeng/container/implementations/CraftConfirmContainer.java index 1466a4a3b..5c13e05ca 100644 --- a/src/main/java/appeng/container/implementations/CraftConfirmContainer.java +++ b/src/main/java/appeng/container/implementations/CraftConfirmContainer.java @@ -29,8 +29,8 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.network.PacketByteBuf; import net.minecraft.text.Text; @@ -69,7 +69,7 @@ import appeng.util.Platform; public class CraftConfirmContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( CraftConfirmContainer::new, ITerminalHost.class, SecurityPermissions.CRAFT); @@ -293,7 +293,7 @@ public class CraftConfirmContainer extends AEBaseContainer { } public void startJob() { - ContainerType originalGui = null; + ScreenHandlerType originalGui = null; final IActionHost ah = this.getActionHost(); if (ah instanceof WirelessTerminalGuiObject) { diff --git a/src/main/java/appeng/container/implementations/CraftingCPUContainer.java b/src/main/java/appeng/container/implementations/CraftingCPUContainer.java index 923d023ee..2e0848ae1 100644 --- a/src/main/java/appeng/container/implementations/CraftingCPUContainer.java +++ b/src/main/java/appeng/container/implementations/CraftingCPUContainer.java @@ -22,8 +22,8 @@ import java.io.IOException; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.network.PacketByteBuf; import net.minecraft.text.Text; @@ -55,7 +55,7 @@ import appeng.util.Platform; public class CraftingCPUContainer extends AEBaseContainer implements IMEMonitorHandlerReceiver, ICustomNameObject { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( CraftingCPUContainer::new, CraftingBlockEntity.class, SecurityPermissions.CRAFT); @@ -73,7 +73,7 @@ public class CraftingCPUContainer extends AEBaseContainer this(TYPE, id, ip, te); } - public CraftingCPUContainer(ContainerType containerType, int id, final PlayerInventory ip, final Object te) { + public CraftingCPUContainer(ScreenHandlerType containerType, int id, final PlayerInventory ip, final Object te) { super(containerType, id, ip, te); final IActionHost host = (IActionHost) (te instanceof IActionHost ? te : null); diff --git a/src/main/java/appeng/container/implementations/CraftingStatusContainer.java b/src/main/java/appeng/container/implementations/CraftingStatusContainer.java index 534e276e3..c8f5e996c 100644 --- a/src/main/java/appeng/container/implementations/CraftingStatusContainer.java +++ b/src/main/java/appeng/container/implementations/CraftingStatusContainer.java @@ -26,7 +26,7 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import net.minecraft.text.Text; @@ -40,7 +40,7 @@ import appeng.util.Platform; public class CraftingStatusContainer extends CraftingCPUContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( CraftingStatusContainer::new, ITerminalHost.class, SecurityPermissions.CRAFT); diff --git a/src/main/java/appeng/container/implementations/CraftingTermContainer.java b/src/main/java/appeng/container/implementations/CraftingTermContainer.java index ab78537e1..f095a951e 100644 --- a/src/main/java/appeng/container/implementations/CraftingTermContainer.java +++ b/src/main/java/appeng/container/implementations/CraftingTermContainer.java @@ -23,7 +23,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.CraftingInventory; import net.minecraft.inventory.Inventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeType; @@ -47,7 +47,7 @@ import appeng.util.inv.WrapperInvItemHandler; public class CraftingTermContainer extends MEMonitorableContainer implements IAEAppEngInventory, IContainerCraftingPacket { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( CraftingTermContainer::new, ITerminalHost.class, SecurityPermissions.CRAFT); diff --git a/src/main/java/appeng/container/implementations/DriveContainer.java b/src/main/java/appeng/container/implementations/DriveContainer.java index b1d83b084..d590b2d61 100644 --- a/src/main/java/appeng/container/implementations/DriveContainer.java +++ b/src/main/java/appeng/container/implementations/DriveContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.container.AEBaseContainer; @@ -30,7 +30,7 @@ import appeng.tile.storage.DriveBlockEntity; public class DriveContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( DriveContainer::new, DriveBlockEntity.class); diff --git a/src/main/java/appeng/container/implementations/FormationPlaneContainer.java b/src/main/java/appeng/container/implementations/FormationPlaneContainer.java index 2e8d70250..5d49d8e98 100644 --- a/src/main/java/appeng/container/implementations/FormationPlaneContainer.java +++ b/src/main/java/appeng/container/implementations/FormationPlaneContainer.java @@ -21,7 +21,7 @@ package appeng.container.implementations; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.FuzzyMode; @@ -39,7 +39,7 @@ import appeng.util.Platform; public class FormationPlaneContainer extends UpgradeableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( FormationPlaneContainer::new, FormationPlanePart.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/GrinderContainer.java b/src/main/java/appeng/container/implementations/GrinderContainer.java index 9c9c617ec..9c08406ea 100644 --- a/src/main/java/appeng/container/implementations/GrinderContainer.java +++ b/src/main/java/appeng/container/implementations/GrinderContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import alexiil.mc.lib.attributes.item.FixedItemInv; @@ -33,7 +33,7 @@ import appeng.tile.grindstone.GrinderBlockEntity; public class GrinderContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( GrinderContainer::new, GrinderBlockEntity.class); diff --git a/src/main/java/appeng/container/implementations/IOPortContainer.java b/src/main/java/appeng/container/implementations/IOPortContainer.java index aaf57f74e..1bdf61fd3 100644 --- a/src/main/java/appeng/container/implementations/IOPortContainer.java +++ b/src/main/java/appeng/container/implementations/IOPortContainer.java @@ -21,7 +21,7 @@ package appeng.container.implementations; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.FullnessMode; @@ -38,7 +38,7 @@ import appeng.util.Platform; public class IOPortContainer extends UpgradeableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( IOPortContainer::new, IOPortBlockEntity.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/InscriberContainer.java b/src/main/java/appeng/container/implementations/InscriberContainer.java index a0a030a12..7634386dd 100644 --- a/src/main/java/appeng/container/implementations/InscriberContainer.java +++ b/src/main/java/appeng/container/implementations/InscriberContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; @@ -45,7 +45,7 @@ import appeng.util.Platform; */ public class InscriberContainer extends UpgradeableContainer implements IProgressProvider { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( InscriberContainer::new, InscriberBlockEntity.class); diff --git a/src/main/java/appeng/container/implementations/InterfaceContainer.java b/src/main/java/appeng/container/implementations/InterfaceContainer.java index c4319f0c9..63408342a 100644 --- a/src/main/java/appeng/container/implementations/InterfaceContainer.java +++ b/src/main/java/appeng/container/implementations/InterfaceContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.SecurityPermissions; @@ -37,7 +37,7 @@ import appeng.helpers.IInterfaceHost; public class InterfaceContainer extends UpgradeableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( InterfaceContainer::new, IInterfaceHost.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/InterfaceTerminalContainer.java b/src/main/java/appeng/container/implementations/InterfaceTerminalContainer.java index 292287213..28a3f5a4e 100644 --- a/src/main/java/appeng/container/implementations/InterfaceTerminalContainer.java +++ b/src/main/java/appeng/container/implementations/InterfaceTerminalContainer.java @@ -25,8 +25,8 @@ import java.util.Map.Entry; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; @@ -61,7 +61,7 @@ import appeng.util.inv.filter.IAEItemFilter; public final class InterfaceTerminalContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( InterfaceTerminalContainer::new, InterfaceTerminalPart.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/LevelEmitterContainer.java b/src/main/java/appeng/container/implementations/LevelEmitterContainer.java index 0fead36c8..96df835bb 100644 --- a/src/main/java/appeng/container/implementations/LevelEmitterContainer.java +++ b/src/main/java/appeng/container/implementations/LevelEmitterContainer.java @@ -24,7 +24,7 @@ import net.fabricmc.api.Environment; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.FuzzyMode; @@ -42,7 +42,7 @@ import appeng.util.Platform; public class LevelEmitterContainer extends UpgradeableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( LevelEmitterContainer::new, LevelEmitterPart.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/MEMonitorableContainer.java b/src/main/java/appeng/container/implementations/MEMonitorableContainer.java index 8357f5b73..4a33dfd03 100644 --- a/src/main/java/appeng/container/implementations/MEMonitorableContainer.java +++ b/src/main/java/appeng/container/implementations/MEMonitorableContainer.java @@ -25,8 +25,8 @@ import javax.annotation.Nonnull; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; @@ -78,7 +78,7 @@ import appeng.util.Platform; public class MEMonitorableContainer extends AEBaseContainer implements IConfigManagerHost, IConfigurableObject, IMEMonitorHandlerReceiver { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( MEMonitorableContainer::new, ITerminalHost.class); @@ -109,8 +109,8 @@ public class MEMonitorableContainer extends AEBaseContainer this(TYPE, id, ip, monitorable, true); } - public MEMonitorableContainer(ContainerType containerType, int id, PlayerInventory ip, - final ITerminalHost monitorable, final boolean bindInventory) { + public MEMonitorableContainer(ScreenHandlerType containerType, int id, PlayerInventory ip, + final ITerminalHost monitorable, final boolean bindInventory) { super(containerType, id, ip, monitorable instanceof BlockEntity ? (BlockEntity) monitorable : null, monitorable instanceof IPart ? (IPart) monitorable : null, monitorable instanceof IGuiItemObject ? (IGuiItemObject) monitorable : null); diff --git a/src/main/java/appeng/container/implementations/MEPortableCellContainer.java b/src/main/java/appeng/container/implementations/MEPortableCellContainer.java index fd6223210..c2b19bfe8 100644 --- a/src/main/java/appeng/container/implementations/MEPortableCellContainer.java +++ b/src/main/java/appeng/container/implementations/MEPortableCellContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; @@ -32,7 +32,7 @@ import appeng.container.interfaces.IInventorySlotAware; public class MEPortableCellContainer extends MEMonitorableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( MEPortableCellContainer::new, IPortableCell.class); @@ -55,8 +55,8 @@ public class MEPortableCellContainer extends MEMonitorableContainer { this(TYPE, id, ip, monitorable); } - protected MEPortableCellContainer(ContainerType type, int id, - final PlayerInventory ip, final IPortableCell monitorable) { + protected MEPortableCellContainer(ScreenHandlerType type, int id, + final PlayerInventory ip, final IPortableCell monitorable) { super(type, id, ip, monitorable, false); if (monitorable instanceof IInventorySlotAware) { final int slotIndex = ((IInventorySlotAware) monitorable).getInventorySlot(); diff --git a/src/main/java/appeng/container/implementations/MolecularAssemblerContainer.java b/src/main/java/appeng/container/implementations/MolecularAssemblerContainer.java index d81e70bbc..c919e66b7 100644 --- a/src/main/java/appeng/container/implementations/MolecularAssemblerContainer.java +++ b/src/main/java/appeng/container/implementations/MolecularAssemblerContainer.java @@ -21,7 +21,7 @@ package appeng.container.implementations; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; @@ -44,7 +44,7 @@ import appeng.util.Platform; public class MolecularAssemblerContainer extends UpgradeableContainer implements IProgressProvider { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( MolecularAssemblerContainer::new, MolecularAssemblerBlockEntity.class); diff --git a/src/main/java/appeng/container/implementations/NetworkStatusContainer.java b/src/main/java/appeng/container/implementations/NetworkStatusContainer.java index 3494474e3..b34018400 100644 --- a/src/main/java/appeng/container/implementations/NetworkStatusContainer.java +++ b/src/main/java/appeng/container/implementations/NetworkStatusContainer.java @@ -22,8 +22,8 @@ import java.io.IOException; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; @@ -48,7 +48,7 @@ import appeng.util.item.AEItemStack; public class NetworkStatusContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( NetworkStatusContainer::new, INetworkTool.class); diff --git a/src/main/java/appeng/container/implementations/NetworkToolContainer.java b/src/main/java/appeng/container/implementations/NetworkToolContainer.java index 2e0d286cf..e7263e02a 100644 --- a/src/main/java/appeng/container/implementations/NetworkToolContainer.java +++ b/src/main/java/appeng/container/implementations/NetworkToolContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; @@ -33,7 +33,7 @@ import appeng.container.slot.RestrictedInputSlot; public class NetworkToolContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( NetworkToolContainer::new, INetworkTool.class); diff --git a/src/main/java/appeng/container/implementations/PatternTermContainer.java b/src/main/java/appeng/container/implementations/PatternTermContainer.java index e3d72edd2..4e1d9d5a7 100644 --- a/src/main/java/appeng/container/implementations/PatternTermContainer.java +++ b/src/main/java/appeng/container/implementations/PatternTermContainer.java @@ -30,7 +30,7 @@ import net.minecraft.recipe.RecipeType; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.inventory.CraftResultInventory; import net.minecraft.inventory.CraftingInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.inventory.container.CraftingResultSlot; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.inventory.container.Slot; @@ -77,7 +77,7 @@ import appeng.util.item.AEItemStack; public class PatternTermContainer extends MEMonitorableContainer implements IAEAppEngInventory, IOptionalSlotHost, IContainerCraftingPacket { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( PatternTermContainer::new, ITerminalHost.class, SecurityPermissions.CRAFT); @@ -184,7 +184,7 @@ public class PatternTermContainer extends MEMonitorableContainer is = this.currentRecipe.craft(ic); } - this.cOut.setStackInSlot(0, is); + this.cOut.setInvStack(0, is); return is; } diff --git a/src/main/java/appeng/container/implementations/PriorityContainer.java b/src/main/java/appeng/container/implementations/PriorityContainer.java index d3d67ced4..ec4d9ee57 100644 --- a/src/main/java/appeng/container/implementations/PriorityContainer.java +++ b/src/main/java/appeng/container/implementations/PriorityContainer.java @@ -22,7 +22,7 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -37,7 +37,7 @@ import appeng.util.Platform; public class PriorityContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( PriorityContainer::new, IPriorityHost.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/QNBContainer.java b/src/main/java/appeng/container/implementations/QNBContainer.java index c5aa88e79..839df7020 100644 --- a/src/main/java/appeng/container/implementations/QNBContainer.java +++ b/src/main/java/appeng/container/implementations/QNBContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.SecurityPermissions; @@ -31,7 +31,7 @@ import appeng.tile.qnb.QuantumBridgeBlockEntity; public class QNBContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( QNBContainer::new, QuantumBridgeBlockEntity.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/QuartzKnifeContainer.java b/src/main/java/appeng/container/implementations/QuartzKnifeContainer.java index 62012460b..bbb428cb9 100644 --- a/src/main/java/appeng/container/implementations/QuartzKnifeContainer.java +++ b/src/main/java/appeng/container/implementations/QuartzKnifeContainer.java @@ -23,7 +23,7 @@ import javax.annotation.Nonnull; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; @@ -42,7 +42,7 @@ import appeng.util.Platform; public class QuartzKnifeContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( QuartzKnifeContainer::new, QuartzKnifeObj.class); diff --git a/src/main/java/appeng/container/implementations/SecurityStationContainer.java b/src/main/java/appeng/container/implementations/SecurityStationContainer.java index e1035f8c2..1c6c816a5 100644 --- a/src/main/java/appeng/container/implementations/SecurityStationContainer.java +++ b/src/main/java/appeng/container/implementations/SecurityStationContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; @@ -43,7 +43,7 @@ import appeng.util.inv.InvOperation; public class SecurityStationContainer extends MEMonitorableContainer implements IAEAppEngInventory { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( SecurityStationContainer::new, ITerminalHost.class, SecurityPermissions.SECURITY); diff --git a/src/main/java/appeng/container/implementations/SkyChestContainer.java b/src/main/java/appeng/container/implementations/SkyChestContainer.java index d2c171437..3afebc5fa 100644 --- a/src/main/java/appeng/container/implementations/SkyChestContainer.java +++ b/src/main/java/appeng/container/implementations/SkyChestContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.container.AEBaseContainer; @@ -30,7 +30,7 @@ import appeng.tile.storage.SkyChestBlockEntity; public class SkyChestContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( SkyChestContainer::new, SkyChestBlockEntity.class); diff --git a/src/main/java/appeng/container/implementations/SpatialIOPortContainer.java b/src/main/java/appeng/container/implementations/SpatialIOPortContainer.java index 10bd271b6..76e6dcc14 100644 --- a/src/main/java/appeng/container/implementations/SpatialIOPortContainer.java +++ b/src/main/java/appeng/container/implementations/SpatialIOPortContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.SecurityPermissions; @@ -39,7 +39,7 @@ import appeng.util.Platform; public class SpatialIOPortContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( SpatialIOPortContainer::new, SpatialIOPortBlockEntity.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/StorageBusContainer.java b/src/main/java/appeng/container/implementations/StorageBusContainer.java index 491cb6740..f0fc3aabb 100644 --- a/src/main/java/appeng/container/implementations/StorageBusContainer.java +++ b/src/main/java/appeng/container/implementations/StorageBusContainer.java @@ -23,7 +23,7 @@ import java.util.Iterator; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; @@ -50,7 +50,7 @@ import appeng.util.iterators.NullIterator; public class StorageBusContainer extends UpgradeableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( StorageBusContainer::new, StorageBusPart.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/UpgradeableContainer.java b/src/main/java/appeng/container/implementations/UpgradeableContainer.java index 92f6b407a..e68080a2e 100644 --- a/src/main/java/appeng/container/implementations/UpgradeableContainer.java +++ b/src/main/java/appeng/container/implementations/UpgradeableContainer.java @@ -22,7 +22,7 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.Inventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.util.math.BlockPos; @@ -55,7 +55,7 @@ import appeng.util.Platform; public class UpgradeableContainer extends AEBaseContainer implements IOptionalSlotHost { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( UpgradeableContainer::new, IUpgradeableHost.class, SecurityPermissions.BUILD); @@ -84,8 +84,8 @@ public class UpgradeableContainer extends AEBaseContainer implements IOptionalSl this(TYPE, id, ip, te); } - public UpgradeableContainer(ContainerType containerType, int id, final PlayerInventory ip, - final IUpgradeableHost te) { + public UpgradeableContainer(ScreenHandlerType containerType, int id, final PlayerInventory ip, + final IUpgradeableHost te) { super(containerType, id, ip, (BlockEntity) (te instanceof BlockEntity ? te : null), (IPart) (te instanceof IPart ? te : null)); this.upgradeable = te; diff --git a/src/main/java/appeng/container/implementations/VibrationChamberContainer.java b/src/main/java/appeng/container/implementations/VibrationChamberContainer.java index b377d990e..428c720ae 100644 --- a/src/main/java/appeng/container/implementations/VibrationChamberContainer.java +++ b/src/main/java/appeng/container/implementations/VibrationChamberContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.container.AEBaseContainer; @@ -33,7 +33,7 @@ import appeng.util.Platform; public class VibrationChamberContainer extends AEBaseContainer implements IProgressProvider { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( VibrationChamberContainer::new, VibrationChamberBlockEntity.class); diff --git a/src/main/java/appeng/container/implementations/WirelessContainer.java b/src/main/java/appeng/container/implementations/WirelessContainer.java index 53d219840..99ab72cc2 100644 --- a/src/main/java/appeng/container/implementations/WirelessContainer.java +++ b/src/main/java/appeng/container/implementations/WirelessContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.SecurityPermissions; @@ -33,7 +33,7 @@ import appeng.tile.networking.WirelessBlockEntity; public class WirelessContainer extends AEBaseContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( WirelessContainer::new, WirelessBlockEntity.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/container/implementations/WirelessTermContainer.java b/src/main/java/appeng/container/implementations/WirelessTermContainer.java index 5b3ae17f5..857ecb5d9 100644 --- a/src/main/java/appeng/container/implementations/WirelessTermContainer.java +++ b/src/main/java/appeng/container/implementations/WirelessTermContainer.java @@ -20,7 +20,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.container.ContainerLocator; @@ -31,7 +31,7 @@ import appeng.util.Platform; public class WirelessTermContainer extends MEPortableCellContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( WirelessTermContainer::new, WirelessTerminalGuiObject.class); diff --git a/src/main/java/appeng/container/slot/AppEngCraftingSlot.java b/src/main/java/appeng/container/slot/AppEngCraftingSlot.java index e1eb53683..281612245 100644 --- a/src/main/java/appeng/container/slot/AppEngCraftingSlot.java +++ b/src/main/java/appeng/container/slot/AppEngCraftingSlot.java @@ -23,7 +23,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.RecipeType; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; import net.minecraftforge.fml.hooks.BasicEventHooks; @@ -96,7 +96,7 @@ public class AppEngCraftingSlot extends AppEngSlot { ic.setStack(x, this.craftMatrix.getInvStack(x)); } - final NonNullList aitemstack = this.getRemainingItems(ic, playerIn.world); + final DefaultedList aitemstack = this.getRemainingItems(ic, playerIn.world); ItemHandlerUtil.copy(ic, this.craftMatrix, false); @@ -137,9 +137,9 @@ public class AppEngCraftingSlot extends AppEngSlot { // TODO: This is really hacky and NEEDS to be solved with a full container/gui // refactoring. - protected NonNullList getRemainingItems(CraftingInventory ic, World world) { + protected DefaultedList getRemainingItems(CraftingInventory ic, World world) { return world.getRecipeManager().getRecipe(RecipeType.CRAFTING, ic, world) .map(iCraftingRecipe -> iCraftingRecipe.getRemainingItems(ic)) - .orElse(NonNullList.withSize(9, ItemStack.EMPTY)); + .orElse(DefaultedList.withSize(9, ItemStack.EMPTY)); } } diff --git a/src/main/java/appeng/container/slot/CraftingTermSlot.java b/src/main/java/appeng/container/slot/CraftingTermSlot.java index fff829742..4268998fd 100644 --- a/src/main/java/appeng/container/slot/CraftingTermSlot.java +++ b/src/main/java/appeng/container/slot/CraftingTermSlot.java @@ -29,7 +29,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeType; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -139,7 +139,7 @@ public class CraftingTermSlot extends AppEngCraftingSlot { final List drops = new ArrayList<>(); drops.add(extra); Platform.spawnDrops(who.world, - new BlockPos((int) who.getX(), (int) who.getY(), (int) who.getPosZ()), drops); + new BlockPos((int) who.getX(), (int) who.getY(), (int) who.getZ()), drops); return; } } @@ -164,7 +164,7 @@ public class CraftingTermSlot extends AppEngCraftingSlot { // TODO: This is really hacky and NEEDS to be solved with a full container/gui // refactoring. @Override - protected NonNullList getRemainingItems(CraftingInventory ic, World world) { + protected DefaultedList getRemainingItems(CraftingInventory ic, World world) { if (this.container instanceof CraftingTermContainer) { final CraftingTermContainer containerTerminal = (CraftingTermContainer) this.container; final Recipe recipe = containerTerminal.getCurrentRecipe(); @@ -282,7 +282,7 @@ public class CraftingTermSlot extends AppEngCraftingSlot { } if (drops.size() > 0) { - Platform.spawnDrops(p.world, new BlockPos((int) p.getX(), (int) p.getY(), (int) p.getPosZ()), drops); + Platform.spawnDrops(p.world, new BlockPos((int) p.getX(), (int) p.getY(), (int) p.getZ()), drops); } } diff --git a/src/main/java/appeng/core/AEItemGroup.java b/src/main/java/appeng/core/AEItemGroup.java deleted file mode 100644 index d76e2fdcc..000000000 --- a/src/main/java/appeng/core/AEItemGroup.java +++ /dev/null @@ -1,41 +0,0 @@ -package appeng.core; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; - -import appeng.api.AEApi; -import appeng.api.definitions.IBlocks; -import appeng.api.definitions.IDefinitions; -import appeng.api.definitions.IItemDefinition; - -public class AEItemGroup extends ItemGroup { - - private final List itemDefs = new ArrayList<>(); - - public AEItemGroup(String label) { - super(label); - } - - @Override - public ItemStack createIcon() { - final IDefinitions definitions = AEApi.instance().definitions(); - final IBlocks blocks = definitions.blocks(); - return blocks.controller().stack(1); - } - - public void add(IItemDefinition itemDef) { - this.itemDefs.add(itemDef); - } - - @Override - public void fill(NonNullList items) { - for (IItemDefinition itemDef : this.itemDefs) { - itemDef.item().fillItemGroup(this, items); - } - } - -} diff --git a/src/main/java/appeng/core/CommonHelper.java b/src/main/java/appeng/core/CommonHelper.java index f5a426cb9..5d22c4303 100644 --- a/src/main/java/appeng/core/CommonHelper.java +++ b/src/main/java/appeng/core/CommonHelper.java @@ -24,6 +24,7 @@ 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; import net.minecraft.util.hit.HitResult; @@ -42,10 +43,10 @@ public abstract class CommonHelper { public abstract List getPlayers(); public abstract void sendToAllNearExcept(PlayerEntity p, double x, double y, double z, double dist, World w, - BasePacket packet); + BasePacket packet); public abstract void spawnEffect(EffectType effect, World world, double posX, double posY, double posZ, - Object extra); + Object extra); public abstract boolean shouldAddParticles(Random r); @@ -59,6 +60,6 @@ public abstract class CommonHelper { public abstract void updateRenderMode(PlayerEntity player); - public abstract boolean isActionKey(@Nonnull final ActionKey key, InputMappings.Input input); + public abstract boolean isActionKey(@Nonnull final ActionKey key, InputUtil.Key input); } diff --git a/src/main/java/appeng/core/CreativeTab.java b/src/main/java/appeng/core/CreativeTab.java deleted file mode 100644 index 2f443c3f3..000000000 --- a/src/main/java/appeng/core/CreativeTab.java +++ /dev/null @@ -1,29 +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.core; - -public final class CreativeTab { - - public static AEItemGroup INSTANCE; - - public static void init() { - INSTANCE = new AEItemGroup("appliedenergistics2"); - } - -} \ No newline at end of file diff --git a/src/main/java/appeng/core/FacadeItemGroup.java b/src/main/java/appeng/core/FacadeItemGroup.java index 9061805eb..a488a7001 100644 --- a/src/main/java/appeng/core/FacadeItemGroup.java +++ b/src/main/java/appeng/core/FacadeItemGroup.java @@ -26,7 +26,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraftforge.registries.ForgeRegistries; import appeng.items.parts.FacadeItem; @@ -53,7 +53,7 @@ public final class FacadeItemGroup extends ItemGroup { } @Override - public void fill(NonNullList items) { + public void fill(DefaultedList items) { this.calculateSubTypes(); items.addAll(subTypes); } @@ -73,8 +73,8 @@ public final class FacadeItemGroup extends ItemGroup { Item blockItem = b.asItem(); if (blockItem != Items.AIR && blockItem.getGroup() != null) { - final NonNullList tmpList = NonNullList.create(); - b.fillItemGroup(blockItem.getGroup(), tmpList); + final DefaultedList tmpList = DefaultedList.create(); + b.appendStacks(blockItem.getGroup(), tmpList); for (final ItemStack l : tmpList) { final ItemStack facade = itemFacade.createFacadeForItem(l, false); if (!facade.isEmpty()) { diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index 1d3bcd39e..4069048b1 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -29,7 +29,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ScreenManager; import net.minecraft.client.particle.ParticleManager; import net.minecraft.client.render.model.BakedModel; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.particle.ParticleType; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.util.Identifier; @@ -174,8 +174,8 @@ final class Registration { .forEachRemaining(b -> b.register(registry)); } - public void registerContainerTypes(RegistryEvent.Register> event) { - final IForgeRegistry> registry = event.getRegistry(); + public void registerContainerTypes(RegistryEvent.Register> event) { + final IForgeRegistry> registry = event.getRegistry(); CellWorkbenchContainer.TYPE = registerContainer(registry, "cellworkbench", CellWorkbenchContainer::fromNetwork, CellWorkbenchContainer::open); @@ -300,9 +300,9 @@ final class Registration { }); } - private ContainerType registerContainer(IForgeRegistry> registry, - String id, IContainerFactory factory, ContainerOpener.Opener opener) { - ContainerType type = IForgeContainerType.create(factory); + 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); diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index 7a0e06989..e8e0cf1ff 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -376,7 +376,7 @@ public final class ApiBlocks implements IBlocks { TinyTNTPrimedEntity.TYPE = registry .entity("tiny_tnt_primed", TinyTNTPrimedEntity::new, SpawnGroup.MISC) - .customize(p -> p.setTrackingRange(16).setUpdateInterval(4).setShouldReceiveVelocityUpdates(true)) + .customize(p -> p.trackable(16, 4, true)) .build(); this.tinyTNT = registry diff --git a/src/main/java/appeng/core/api/definitions/ApiMaterials.java b/src/main/java/appeng/core/api/definitions/ApiMaterials.java index d79c9ab6a..cf7bdb6ea 100644 --- a/src/main/java/appeng/core/api/definitions/ApiMaterials.java +++ b/src/main/java/appeng/core/api/definitions/ApiMaterials.java @@ -20,6 +20,7 @@ package appeng.core.api.definitions; import com.google.common.base.Preconditions; +import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.SpawnGroup; import appeng.api.definitions.IItemDefinition; @@ -27,7 +28,6 @@ import appeng.api.definitions.IMaterials; import appeng.api.features.AEFeature; import appeng.bootstrap.FeatureFactory; import appeng.core.AEConfig; -import appeng.core.features.MaterialStackSrc; import appeng.entity.ChargedQuartzEntity; import appeng.entity.SingularityEntity; import appeng.items.materials.MaterialItem; @@ -120,14 +120,12 @@ public final class ApiMaterials implements IMaterials { SingularityEntity.TYPE = registry .entity("singularity", SingularityEntity::new, SpawnGroup.MISC) - .customize(builder -> builder.size(0.2f, 0.2f).setTrackingRange(16).setUpdateInterval(4) - .setShouldReceiveVelocityUpdates(true)) + .customize(b -> b.trackable(16, 4, true).dimensions(EntityDimensions.fixed(0.2f, 0.2f))) .build(); ChargedQuartzEntity.TYPE = registry .entity("charged_quartz", ChargedQuartzEntity::new, SpawnGroup.MISC) - .customize(builder -> builder.size(0.2f, 0.2f).setTrackingRange(16).setUpdateInterval(4) - .setShouldReceiveVelocityUpdates(true)) + .customize(b -> b.trackable(16, 4, true).dimensions(EntityDimensions.fixed(0.2f, 0.2f))) .build(); this.cell2SpatialPart = createMaterial(MaterialType.SPATIAL_2_CELL_COMPONENT); @@ -201,7 +199,6 @@ public final class ApiMaterials implements IMaterials { enabled = enabled && AEConfig.instance().isFeatureEnabled(f); } - mat.setStackSrc(new MaterialStackSrc(mat, enabled)); mat.setItemInstance(def.item()); mat.markReady(); return def; diff --git a/src/main/java/appeng/core/sync/network/NetworkHandler.java b/src/main/java/appeng/core/sync/network/NetworkHandler.java index ea6952b0b..ca8ef6dbe 100644 --- a/src/main/java/appeng/core/sync/network/NetworkHandler.java +++ b/src/main/java/appeng/core/sync/network/NetworkHandler.java @@ -19,9 +19,10 @@ package appeng.core.sync.network; import net.minecraft.client.MinecraftClient; +import net.minecraft.network.NetworkSide; +import net.minecraft.network.Packet; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.network.INetHandler; -import net.minecraft.network.IPacket; import net.minecraft.network.ThreadQuickExitException; import net.minecraft.network.play.ServerPlayNetHandler; import net.minecraft.server.MinecraftServer; @@ -31,7 +32,6 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.LogicalSide; import net.minecraftforge.fml.LogicalSidedProvider; -import net.minecraftforge.fml.network.NetworkDirection; import net.minecraftforge.fml.network.NetworkEvent; import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.network.event.EventNetworkChannel; @@ -110,26 +110,26 @@ public class NetworkHandler { } public void sendToAll(final BasePacket message) { - getServer().getPlayerList().sendPacketToAllPlayers(message.toPacket(NetworkDirection.PLAY_TO_CLIENT)); + getServer().getPlayerList().sendPacketToAllPlayers(message.toPacket(NetworkSide.PLAY_TO_CLIENT)); } public void sendTo(final BasePacket message, final ServerPlayerEntity player) { - player.connection.sendPacket(message.toPacket(NetworkDirection.PLAY_TO_CLIENT)); + player.connection.sendPacket(message.toPacket(NetworkSide.PLAY_TO_CLIENT)); } public void sendToAllAround(final BasePacket message, final TargetPoint point) { - IPacket pkt = message.toPacket(NetworkDirection.PLAY_TO_CLIENT); + Packet pkt = message.toPacket(NetworkSide.PLAY_TO_CLIENT); getServer().getPlayerList().sendToAllNearExcept(point.excluded, point.x, point.y, point.z, point.r2, point.dim, pkt); } public void sendToDimension(final BasePacket message, final DimensionType dim) { - getServer().getPlayerList().sendPacketToAllPlayersInDimension(message.toPacket(NetworkDirection.PLAY_TO_CLIENT), + getServer().getPlayerList().sendPacketToAllPlayersInDimension(message.toPacket(NetworkSide.PLAY_TO_CLIENT), dim); } public void sendToServer(final BasePacket message) { - MinecraftClient.getInstance().getConnection().sendPacket(message.toPacket(NetworkDirection.PLAY_TO_SERVER)); + MinecraftClient.getInstance().getConnection().sendPacket(message.toPacket(NetworkSide.PLAY_TO_SERVER)); } private MinecraftServer getServer() { diff --git a/src/main/java/appeng/core/sync/packets/FluidSlotPacket.java b/src/main/java/appeng/core/sync/packets/FluidSlotPacket.java index 6d18bec0c..0b72a9983 100644 --- a/src/main/java/appeng/core/sync/packets/FluidSlotPacket.java +++ b/src/main/java/appeng/core/sync/packets/FluidSlotPacket.java @@ -41,7 +41,7 @@ public class FluidSlotPacket extends BasePacket { this.list = new HashMap<>(); CompoundTag tag = stream.readCompoundTag(); - for (final String key : tag.keySet()) { + for (final String key : tag.getKeys()) { this.list.put(Integer.parseInt(key), AEFluidStack.fromNBT(tag.getCompound(key))); } } diff --git a/src/main/java/appeng/core/sync/packets/MEFluidInventoryUpdatePacket.java b/src/main/java/appeng/core/sync/packets/MEFluidInventoryUpdatePacket.java index a80cd54ca..40a32a70e 100644 --- a/src/main/java/appeng/core/sync/packets/MEFluidInventoryUpdatePacket.java +++ b/src/main/java/appeng/core/sync/packets/MEFluidInventoryUpdatePacket.java @@ -35,10 +35,10 @@ import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.network.IPacket; +import net.minecraft.network.Packet; import net.minecraft.network.PacketByteBuf; import net.fabricmc.api.EnvType; -import net.minecraftforge.fml.network.NetworkDirection; +import net.minecraft.network.NetworkSide; import appeng.api.storage.data.IAEFluidStack; import appeng.core.AELog; @@ -144,7 +144,7 @@ public class MEFluidInventoryUpdatePacket extends BasePacket { @Nullable @Override - public IPacket toPacket(NetworkDirection direction) { + public Packet toPacket(NetworkSide direction) { try { this.compressFrame.close(); diff --git a/src/main/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java b/src/main/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java index db2ce9d34..9f50d0898 100644 --- a/src/main/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java +++ b/src/main/java/appeng/core/sync/packets/MEInventoryUpdatePacket.java @@ -34,11 +34,11 @@ 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.network.IPacket; +import net.minecraft.network.NetworkSide; +import net.minecraft.network.Packet; import net.minecraft.network.PacketByteBuf; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraftforge.fml.network.NetworkDirection; import appeng.api.storage.data.IAEItemStack; import appeng.client.gui.implementations.CraftConfirmScreen; @@ -155,7 +155,7 @@ public class MEInventoryUpdatePacket extends BasePacket { @Nullable @Override - public IPacket toPacket(NetworkDirection direction) { + public Packet toPacket(NetworkSide direction) { try { this.compressFrame.close(); diff --git a/src/main/java/appeng/core/sync/packets/SwitchGuisPacket.java b/src/main/java/appeng/core/sync/packets/SwitchGuisPacket.java index df951b164..2c6f0b08b 100644 --- a/src/main/java/appeng/core/sync/packets/SwitchGuisPacket.java +++ b/src/main/java/appeng/core/sync/packets/SwitchGuisPacket.java @@ -22,7 +22,7 @@ import io.netty.buffer.Unpooled; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import net.minecraftforge.registries.ForgeRegistries; @@ -34,14 +34,14 @@ import appeng.core.sync.network.INetworkInfo; public class SwitchGuisPacket extends BasePacket { - private final ContainerType newGui; + private final ScreenHandlerType newGui; public SwitchGuisPacket(final PacketByteBuf stream) { this.newGui = ForgeRegistries.CONTAINERS.getValue(stream.readResourceLocation()); } // api - public SwitchGuisPacket(final ContainerType newGui) { + public SwitchGuisPacket(final ScreenHandlerType newGui) { this.newGui = newGui; final PacketByteBuf data = new PacketByteBuf(Unpooled.buffer()); diff --git a/src/main/java/appeng/core/worlddata/IWorldDimensionData.java b/src/main/java/appeng/core/worlddata/IWorldDimensionData.java deleted file mode 100644 index 064552f25..000000000 --- a/src/main/java/appeng/core/worlddata/IWorldDimensionData.java +++ /dev/null @@ -1,40 +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.core.worlddata; - -import javax.annotation.Nullable; - -import net.minecraft.network.NetworkManager; - -import appeng.api.util.WorldCoord; - -/** - * @author thatsIch - * @version rv3 - 30.05.2015 - * @since rv3 30.05.2015 - */ -public interface IWorldDimensionData { - void addStorageCell(int newStorageCellID); - - WorldCoord getStoredSize(int dim); - - void setStoredSize(int dim, int targetX, int targetY, int targetZ); - - void sendToPlayer(@Nullable NetworkManager manager); -} diff --git a/src/main/java/appeng/core/worlddata/IWorldSpawnData.java b/src/main/java/appeng/core/worlddata/IWorldSpawnData.java deleted file mode 100644 index 919b482c5..000000000 --- a/src/main/java/appeng/core/worlddata/IWorldSpawnData.java +++ /dev/null @@ -1,39 +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.core.worlddata; - -import java.util.Collection; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.dimension.DimensionType; - -/** - * @author thatsIch - * @version rv3 - 30.05.2015 - * @since rv3 30.05.2015 - */ -public interface IWorldSpawnData { - void setGenerated(Dimension dim, int chunkX, int chunkZ); - - boolean hasGenerated(Dimension dim, int chunkX, int chunkZ); - - boolean addNearByMeteorites(Dimension dim, int chunkX, int chunkZ, CompoundTag newData); - - Collection getNearByMeteorites(Dimension dim, int chunkX, int chunkZ); -} diff --git a/src/main/java/appeng/debug/ItemGenBlockEntity.java b/src/main/java/appeng/debug/ItemGenBlockEntity.java index d7e2fbffe..a96d8aa2d 100644 --- a/src/main/java/appeng/debug/ItemGenBlockEntity.java +++ b/src/main/java/appeng/debug/ItemGenBlockEntity.java @@ -29,8 +29,8 @@ import net.minecraft.block.entity.BlockEntityType; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.Direction; -import net.minecraft.util.NonNullList; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.CapabilityItemHandler; @@ -62,8 +62,8 @@ public class ItemGenBlockEntity extends AEBaseBlockEntity { continue; } - final NonNullList list = NonNullList.create(); - mi.fillItemGroup(mi.getGroup(), list); + final DefaultedList list = DefaultedList.create(); + mi.appendStacks(mi.getGroup(), list); POSSIBLE_ITEMS.addAll(list); } } diff --git a/src/main/java/appeng/fluids/client/gui/FluidTerminalScreen.java b/src/main/java/appeng/fluids/client/gui/FluidTerminalScreen.java index 8b23b02a3..69a8882c6 100644 --- a/src/main/java/appeng/fluids/client/gui/FluidTerminalScreen.java +++ b/src/main/java/appeng/fluids/client/gui/FluidTerminalScreen.java @@ -24,6 +24,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale; +import net.minecraft.client.util.InputUtil; import org.lwjgl.glfw.GLFW; import net.minecraft.client.util.InputMappings; @@ -233,7 +234,7 @@ public class FluidTerminalScreen extends AEBaseMEScreen @Override public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - InputMappings.Input input = InputMappings.getInputByCode(keyCode, scanCode); + InputUtil.Key input = InputMappings.getInputByCode(keyCode, scanCode); if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(input)) { if (AppEng.proxy.isActionKey(ActionKey.TOGGLE_FOCUS, input)) { diff --git a/src/main/java/appeng/fluids/client/gui/widgets/FluidSlotWidget.java b/src/main/java/appeng/fluids/client/gui/widgets/FluidSlotWidget.java index 5868c737a..21f90c9b5 100644 --- a/src/main/java/appeng/fluids/client/gui/widgets/FluidSlotWidget.java +++ b/src/main/java/appeng/fluids/client/gui/widgets/FluidSlotWidget.java @@ -5,7 +5,7 @@ import java.util.Collections; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.PlayerEntity; @@ -41,8 +41,8 @@ public class FluidSlotWidget extends CustomSlotWidget { RenderSystem.disableBlend(); final Fluid fluid = fs.getFluid(); final FluidAttributes attributes = fluid.getAttributes(); - mc.getTextureManager().bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE); - final Sprite sprite = mc.getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE) + mc.getTextureManager().bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX); + final Sprite sprite = mc.getAtlasSpriteGetter(SpriteAtlasTexture.BLOCK_ATLAS_TEX) .apply(attributes.getStillTexture(fs.getFluidStack())); // Set color for dynamic fluids diff --git a/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java b/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java index 82f4e5d0c..9c2dd0e93 100644 --- a/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java +++ b/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java @@ -23,7 +23,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.widget.Widget; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.fluid.Fluid; import net.fabricmc.api.Environment; @@ -63,8 +63,8 @@ public class FluidTankWidget extends Widget implements ITooltip { RenderSystem.color3f(red, green, blue); MinecraftClient mc = MinecraftClient.getInstance(); - mc.getTextureManager().bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE); - final Sprite sprite = mc.getAtlasSpriteGetter(AtlasTexture.LOCATION_BLOCKS_TEXTURE) + mc.getTextureManager().bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX); + final Sprite sprite = mc.getAtlasSpriteGetter(SpriteAtlasTexture.BLOCK_ATLAS_TEX) .apply(attributes.getStillTexture(fluidStack.getFluidStack())); final int scaledHeight = (int) (this.height diff --git a/src/main/java/appeng/fluids/container/FluidConfigurableContainer.java b/src/main/java/appeng/fluids/container/FluidConfigurableContainer.java index 4266f1135..78165cf74 100644 --- a/src/main/java/appeng/fluids/container/FluidConfigurableContainer.java +++ b/src/main/java/appeng/fluids/container/FluidConfigurableContainer.java @@ -6,7 +6,7 @@ import java.util.Map; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.LazyOptional; @@ -24,7 +24,7 @@ import appeng.util.Platform; public abstract class FluidConfigurableContainer extends UpgradeableContainer implements IFluidSyncContainer { private FluidSyncHelper sync = null; - public FluidConfigurableContainer(ContainerType containerType, int id, PlayerInventory ip, IUpgradeableHost te) { + public FluidConfigurableContainer(ScreenHandlerType containerType, int id, PlayerInventory ip, IUpgradeableHost te) { super(containerType, id, ip, te); } diff --git a/src/main/java/appeng/fluids/container/FluidFormationPlaneContainer.java b/src/main/java/appeng/fluids/container/FluidFormationPlaneContainer.java index c53ae0d09..3c6865a5e 100644 --- a/src/main/java/appeng/fluids/container/FluidFormationPlaneContainer.java +++ b/src/main/java/appeng/fluids/container/FluidFormationPlaneContainer.java @@ -4,7 +4,7 @@ package appeng.fluids.container; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.SecurityPermissions; @@ -18,7 +18,7 @@ import appeng.fluids.util.IAEFluidTank; public class FluidFormationPlaneContainer extends FluidConfigurableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( FluidFormationPlaneContainer::new, FluidFormationPlanePart.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/fluids/container/FluidIOContainer.java b/src/main/java/appeng/fluids/container/FluidIOContainer.java index 51d3d8346..95ef3f983 100644 --- a/src/main/java/appeng/fluids/container/FluidIOContainer.java +++ b/src/main/java/appeng/fluids/container/FluidIOContainer.java @@ -20,7 +20,7 @@ package appeng.fluids.container; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import appeng.api.config.SecurityPermissions; @@ -36,7 +36,7 @@ import appeng.fluids.util.IAEFluidTank; */ public class FluidIOContainer extends FluidConfigurableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( FluidIOContainer::new, SharedFluidBusPart.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/fluids/container/FluidInterfaceContainer.java b/src/main/java/appeng/fluids/container/FluidInterfaceContainer.java index d1a96bdc7..6ee61ed5c 100644 --- a/src/main/java/appeng/fluids/container/FluidInterfaceContainer.java +++ b/src/main/java/appeng/fluids/container/FluidInterfaceContainer.java @@ -23,7 +23,7 @@ import java.util.Map; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.network.PacketByteBuf; @@ -40,7 +40,7 @@ import appeng.util.Platform; public class FluidInterfaceContainer extends FluidConfigurableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( FluidInterfaceContainer::new, IFluidInterfaceHost.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/fluids/container/FluidLevelEmitterContainer.java b/src/main/java/appeng/fluids/container/FluidLevelEmitterContainer.java index 6841ef16c..6f5c33f64 100644 --- a/src/main/java/appeng/fluids/container/FluidLevelEmitterContainer.java +++ b/src/main/java/appeng/fluids/container/FluidLevelEmitterContainer.java @@ -3,7 +3,7 @@ package appeng.fluids.container; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -19,7 +19,7 @@ import appeng.fluids.util.IAEFluidTank; import appeng.util.Platform; public class FluidLevelEmitterContainer extends FluidConfigurableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( FluidLevelEmitterContainer::new, FluidLevelEmitterPart.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/fluids/container/FluidStorageBusContainer.java b/src/main/java/appeng/fluids/container/FluidStorageBusContainer.java index b7f6ff530..a21bb06ff 100644 --- a/src/main/java/appeng/fluids/container/FluidStorageBusContainer.java +++ b/src/main/java/appeng/fluids/container/FluidStorageBusContainer.java @@ -22,7 +22,7 @@ import java.util.Iterator; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.network.PacketByteBuf; import alexiil.mc.lib.attributes.item.FixedItemInv; @@ -53,7 +53,7 @@ import appeng.util.iterators.NullIterator; */ public class FluidStorageBusContainer extends FluidConfigurableContainer { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( FluidStorageBusContainer::new, FluidStorageBusPart.class); diff --git a/src/main/java/appeng/fluids/container/FluidTerminalContainer.java b/src/main/java/appeng/fluids/container/FluidTerminalContainer.java index 499e43177..055910a66 100644 --- a/src/main/java/appeng/fluids/container/FluidTerminalContainer.java +++ b/src/main/java/appeng/fluids/container/FluidTerminalContainer.java @@ -27,7 +27,7 @@ import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; @@ -85,7 +85,7 @@ import appeng.util.Platform; public class FluidTerminalContainer extends AEBaseContainer implements IConfigManagerHost, IConfigurableObject, IMEMonitorHandlerReceiver { - public static ContainerType TYPE; + public static ScreenHandlerType TYPE; private static final ContainerHelper helper = new ContainerHelper<>( FluidTerminalContainer::new, ITerminalHost.class, SecurityPermissions.BUILD); diff --git a/src/main/java/appeng/fluids/helper/FluidCellConfig.java b/src/main/java/appeng/fluids/helper/FluidCellConfig.java index 7c6cb4c59..49e7e3c7f 100644 --- a/src/main/java/appeng/fluids/helper/FluidCellConfig.java +++ b/src/main/java/appeng/fluids/helper/FluidCellConfig.java @@ -63,7 +63,7 @@ public class FluidCellConfig extends CellConfig { @Override public void setStackInSlot(int slot, @Nonnull ItemStack stack) { if (stack.isEmpty() || stack.getItem() instanceof FluidDummyItem) { - super.setStackInSlot(slot, stack); + super.setInvStack(slot, stack); } LazyOptional fluidOpt = FluidUtil.getFluidContained(stack); if (!fluidOpt.isPresent() @@ -76,7 +76,7 @@ public class FluidCellConfig extends CellConfig { ItemStack is = AEApi.instance().definitions().items().dummyFluidItem().maybeStack(1).get(); FluidDummyItem item = (FluidDummyItem) is.getItem(); item.setFluidStack(is, fluid); - super.setStackInSlot(slot, is); + super.setInvStack(slot, is); } @Override diff --git a/src/main/java/appeng/fluids/parts/FluidFormationPlanePart.java b/src/main/java/appeng/fluids/parts/FluidFormationPlanePart.java index 08c3ddf72..5fe753444 100644 --- a/src/main/java/appeng/fluids/parts/FluidFormationPlanePart.java +++ b/src/main/java/appeng/fluids/parts/FluidFormationPlanePart.java @@ -10,7 +10,7 @@ import javax.annotation.Nonnull; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntity; @@ -218,7 +218,7 @@ public class FluidFormationPlanePart extends AbstractFormationPlanePart getContainerType() { + public ScreenHandlerType getContainerType() { return FluidFormationPlaneContainer.TYPE; } } diff --git a/src/main/java/appeng/fluids/parts/FluidInterfacePart.java b/src/main/java/appeng/fluids/parts/FluidInterfacePart.java index d8e23d1cf..0e9903e0f 100644 --- a/src/main/java/appeng/fluids/parts/FluidInterfacePart.java +++ b/src/main/java/appeng/fluids/parts/FluidInterfacePart.java @@ -21,7 +21,7 @@ package appeng.fluids.parts; import java.util.EnumSet; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntity; @@ -210,7 +210,7 @@ public class FluidInterfacePart extends BasicStatePart } @Override - public ContainerType getContainerType() { + public ScreenHandlerType getContainerType() { return FluidInterfaceContainer.TYPE; } } diff --git a/src/main/java/appeng/fluids/parts/FluidLevelEmitterPart.java b/src/main/java/appeng/fluids/parts/FluidLevelEmitterPart.java index f67abdf82..dfd879e5b 100644 --- a/src/main/java/appeng/fluids/parts/FluidLevelEmitterPart.java +++ b/src/main/java/appeng/fluids/parts/FluidLevelEmitterPart.java @@ -7,7 +7,7 @@ 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.particles.RedstoneParticleData; +import net.minecraft.particle.DustParticleEffect; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; @@ -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(RedstoneParticleData.REDSTONE_DUST, 0.5 + pos.getX() + d0, 0.5 + pos.getY() + d1, + world.addParticle(DustParticleEffect.REDSTONE_DUST, 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/main/java/appeng/fluids/parts/FluidStorageBusPart.java b/src/main/java/appeng/fluids/parts/FluidStorageBusPart.java index 77a4bd3ae..04aebe33d 100644 --- a/src/main/java/appeng/fluids/parts/FluidStorageBusPart.java +++ b/src/main/java/appeng/fluids/parts/FluidStorageBusPart.java @@ -26,7 +26,7 @@ import javax.annotation.Nonnull; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Identifier; @@ -438,7 +438,7 @@ public class FluidStorageBusPart extends SharedStorageBusPart } @Override - public ContainerType getContainerType() { + public ScreenHandlerType getContainerType() { return FluidStorageBusContainer.TYPE; } } diff --git a/src/main/java/appeng/fluids/parts/FluidTerminalPart.java b/src/main/java/appeng/fluids/parts/FluidTerminalPart.java index 7a08360af..af5bf57f7 100644 --- a/src/main/java/appeng/fluids/parts/FluidTerminalPart.java +++ b/src/main/java/appeng/fluids/parts/FluidTerminalPart.java @@ -19,7 +19,7 @@ package appeng.fluids.parts; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; @@ -51,7 +51,7 @@ public class FluidTerminalPart extends AbstractTerminalPart { } @Override - public ContainerType getContainerType(PlayerEntity player) { + public ScreenHandlerType getContainerType(PlayerEntity player) { return FluidTerminalContainer.TYPE; } diff --git a/src/main/java/appeng/fluids/parts/SharedFluidBusPart.java b/src/main/java/appeng/fluids/parts/SharedFluidBusPart.java index 4436dd548..53ec3ea06 100644 --- a/src/main/java/appeng/fluids/parts/SharedFluidBusPart.java +++ b/src/main/java/appeng/fluids/parts/SharedFluidBusPart.java @@ -113,7 +113,7 @@ public abstract class SharedFluidBusPart extends UpgradeablePart implements IGri private BlockEntity getBlockEntity(final BlockEntity self, final BlockPos pos) { final World w = self.getWorld(); - if (w.getChunkProvider().isChunkLoaded(new ChunkPos(pos))) { + if (w.getChunkManager().isChunkLoaded(new ChunkPos(pos))) { return w.getBlockEntity(pos); } diff --git a/src/main/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java b/src/main/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java index b0a4c4ebc..33d2046e2 100644 --- a/src/main/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java +++ b/src/main/java/appeng/fluids/tile/FluidInterfaceBlockEntity.java @@ -24,7 +24,7 @@ import javax.annotation.Nullable; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.block.BlockState; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntity; @@ -163,7 +163,7 @@ public class FluidInterfaceBlockEntity extends AENetworkBlockEntity } @Override - public ContainerType getContainerType() { + public ScreenHandlerType getContainerType() { return FluidInterfaceContainer.TYPE; } } diff --git a/src/main/java/appeng/fluids/util/AEFluidInventory.java b/src/main/java/appeng/fluids/util/AEFluidInventory.java index 4ef3831e3..25b4366ca 100644 --- a/src/main/java/appeng/fluids/util/AEFluidInventory.java +++ b/src/main/java/appeng/fluids/util/AEFluidInventory.java @@ -76,9 +76,9 @@ public class AEFluidInventory implements IAEFluidTank { @Override public FluidVolume getFluidInTank(int tank) { if (tank < 0 || tank >= fluids.length) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } - return fluids[tank] == null ? FluidVolume.EMPTY : fluids[tank].getFluidStack(); + return fluids[tank] == null ? FluidVolumeUtil.EMPTY : fluids[tank].getFluidStack(); } @Override @@ -88,7 +88,7 @@ public class AEFluidInventory implements IAEFluidTank { @Override public boolean isFluidValid(int tank, @Nonnull FluidVolume stack) { - return stack != FluidVolume.EMPTY; + return stack != FluidVolumeUtil.EMPTY; } public int fill(final int slot, final FluidVolume resource, final boolean doFill) { @@ -162,12 +162,12 @@ public class AEFluidInventory implements IAEFluidTank { @Override public FluidVolume drain(final FluidVolume fluid, final FluidAction action) { if (fluid.isEmpty() || fluid.getAmount() <= 0) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } final FluidVolume resource = fluid.copy(); - FluidVolume totalDrained = FluidVolume.EMPTY; + FluidVolume totalDrained = FluidVolumeUtil.EMPTY; for (int slot = 0; slot < this.getSlots(); ++slot) { FluidVolume drain = this.drain(slot, resource, action == FluidAction.EXECUTE); if (drain != null) { @@ -189,10 +189,10 @@ public class AEFluidInventory implements IAEFluidTank { @Override public FluidVolume drain(final int maxDrain, final FluidAction action) { if (maxDrain == 0) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } - FluidVolume totalDrained = FluidVolume.EMPTY; + FluidVolume totalDrained = FluidVolumeUtil.EMPTY; int toDrain = maxDrain; for (int slot = 0; slot < this.getSlots(); ++slot) { diff --git a/src/main/java/appeng/helpers/DualityInterface.java b/src/main/java/appeng/helpers/DualityInterface.java index b100c6c30..be77709a3 100644 --- a/src/main/java/appeng/helpers/DualityInterface.java +++ b/src/main/java/appeng/helpers/DualityInterface.java @@ -298,7 +298,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn private void updateCraftingList() { final Boolean[] accountedFor = { false, false, false, false, false, false, false, false, false }; // 9... - assert (accountedFor.length == this.patterns.getSlots()); + assert (accountedFor.length == this.patterns.getSlotCount()); if (!this.gridProxy.isReady()) { return; @@ -353,7 +353,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.setStackInSlot(slot, ItemStack.EMPTY); + this.config.setInvStack(slot, ItemStack.EMPTY); req = null; } diff --git a/src/main/java/appeng/hooks/MatterCannonDispenseItemBehavior.java b/src/main/java/appeng/hooks/MatterCannonDispenseItemBehavior.java index f4b4221b4..de2e7bbaa 100644 --- a/src/main/java/appeng/hooks/MatterCannonDispenseItemBehavior.java +++ b/src/main/java/appeng/hooks/MatterCannonDispenseItemBehavior.java @@ -55,7 +55,7 @@ public final class MatterCannonDispenseItemBehavior extends DefaultDispenseItemB final PlayerEntity p = FakePlayer.getOrCreate((ServerWorld) w); Platform.configurePlayer(p, dir, dispenser.getBlockTileEntity()); - p.setPosition(p.getX() + dir.xOffset, p.getY() + dir.yOffset, p.getZ() + dir.zOffset); + p.updatePosition(p.getX() + dir.xOffset, p.getY() + dir.yOffset, p.getZ() + dir.zOffset); dispensedItem = tm.onItemRightClick(w, p, null).getResult(); } diff --git a/src/main/java/appeng/integration/modules/jei/FacadeRegistryPlugin.java b/src/main/java/appeng/integration/modules/jei/FacadeRegistryPlugin.java index 30b731404..c01273fef 100644 --- a/src/main/java/appeng/integration/modules/jei/FacadeRegistryPlugin.java +++ b/src/main/java/appeng/integration/modules/jei/FacadeRegistryPlugin.java @@ -25,7 +25,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; import net.minecraft.item.crafting.ShapedRecipe; import net.minecraft.util.Identifier; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import mezz.jei.api.constants.VanillaRecipeCategoryUid; import mezz.jei.api.recipe.IFocus; @@ -104,7 +104,7 @@ class FacadeRegistryPlugin implements IRecipeManagerPlugin { Identifier id = new Identifier(AppEng.MOD_ID, "facade/" + textureItem.getItem().getRegistryName().toString().replace(':', '/')); - NonNullList ingredients = NonNullList.withSize(9, Ingredient.EMPTY); + 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)); diff --git a/src/main/java/appeng/items/materials/MaterialItem.java b/src/main/java/appeng/items/materials/MaterialItem.java index 1da16231c..248c823eb 100644 --- a/src/main/java/appeng/items/materials/MaterialItem.java +++ b/src/main/java/appeng/items/materials/MaterialItem.java @@ -191,7 +191,7 @@ public final class MaterialItem extends AEBaseItem implements IStorageComponent, throw new IllegalStateException(t); } - eqi.setMotion(location.getMotion()); + eqi.setVelocity(location.getVelocity()); if (location instanceof ItemEntity && eqi instanceof ItemEntity) { ((ItemEntity) eqi).setDefaultPickupDelay(); diff --git a/src/main/java/appeng/items/misc/CrystalSeedItem.java b/src/main/java/appeng/items/misc/CrystalSeedItem.java index 159f7125a..577c79046 100644 --- a/src/main/java/appeng/items/misc/CrystalSeedItem.java +++ b/src/main/java/appeng/items/misc/CrystalSeedItem.java @@ -32,13 +32,13 @@ import net.minecraft.block.Block; import net.minecraft.block.Material; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; +import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.text.LiteralText; -import net.minecraft.util.IItemProvider; import net.minecraft.util.Identifier; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.MathHelper; import net.minecraft.text.Text; import net.minecraft.world.World; @@ -67,9 +67,9 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal { /** * The item to convert to, when growth finishes. */ - private final IItemProvider grownItem; + private final ItemConvertible grownItem; - public CrystalSeedItem(Settings properties, IItemProvider grownItem) { + public CrystalSeedItem(Settings properties, ItemConvertible grownItem) { super(properties); this.grownItem = Preconditions.checkNotNull(grownItem); // Expose the growth of the seed to the model system @@ -122,11 +122,6 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal { return new LiteralText(Math.round(100 * progress / (float) GROWTH_TICKS_REQUIRED) + "%"); } - @Override - public int getEntityLifespan(final ItemStack itemStack, final World world) { - return Integer.MAX_VALUE; - } - @Override public boolean hasCustomEntity(final ItemStack stack) { return true; @@ -137,7 +132,7 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal { final GrowingCrystalEntity egc = new GrowingCrystalEntity(world, location.getX(), location.getY(), location.getZ(), itemstack); - egc.setMotion(location.getMotion()); + 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 @@ -147,8 +142,8 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal { } @Override - public void fillItemGroup(ItemGroup group, NonNullList items) { - if (this.isInGroup(group)) { + public void appendStacks(ItemGroup group, DefaultedList items) { + if (this.isIn(group)) { // lvl 0 items.add(new ItemStack(this, 1)); // one tick before maturity diff --git a/src/main/java/appeng/items/parts/FacadeItem.java b/src/main/java/appeng/items/parts/FacadeItem.java index 60289cde9..b7880929c 100644 --- a/src/main/java/appeng/items/parts/FacadeItem.java +++ b/src/main/java/appeng/items/parts/FacadeItem.java @@ -30,7 +30,7 @@ import net.minecraft.tag.BlockTags; import net.minecraft.tag.Tag; import net.minecraft.util.ActionResult; import net.minecraft.util.Identifier; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; import net.minecraft.text.Text; @@ -82,7 +82,7 @@ public class FacadeItem extends AEBaseItem implements IFacadeItem, IAlphaPassIte } @Override - public void fillItemGroup(ItemGroup group, NonNullList items) { + public void appendStacks(ItemGroup group, DefaultedList items) { } public ItemStack createFacadeForItem(final ItemStack itemStack, final boolean returnItem) { diff --git a/src/main/java/appeng/items/storage/SpatialStorageCellItem.java b/src/main/java/appeng/items/storage/SpatialStorageCellItem.java index 56c62a04e..394107000 100644 --- a/src/main/java/appeng/items/storage/SpatialStorageCellItem.java +++ b/src/main/java/appeng/items/storage/SpatialStorageCellItem.java @@ -24,6 +24,7 @@ import net.fabricmc.api.EnvType; import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.world.ServerWorld; import net.minecraft.text.LiteralText; import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; @@ -97,7 +98,7 @@ public class SpatialStorageCellItem extends AEBaseItem implements ISpatialStorag } @Override - public TransitionResult doSpatialTransition(final ItemStack is, final World w, final WorldCoord min, + public TransitionResult doSpatialTransition(final ItemStack is, final ServerWorld w, final WorldCoord min, final WorldCoord max, int playerId) { final int targetX = max.x - min.x - 1; final int targetY = max.y - min.y - 1; @@ -120,7 +121,7 @@ public class SpatialStorageCellItem extends AEBaseItem implements ISpatialStorag try { if (manager.isCellDimension(storedDim)) { - World cellWorld = manager.getWorld(storedDim); + ServerWorld cellWorld = manager.getWorld(storedDim); BlockPos scale = manager.getCellDimensionSize(storedDim); diff --git a/src/main/java/appeng/items/tools/powered/ChargedStaffItem.java b/src/main/java/appeng/items/tools/powered/ChargedStaffItem.java index cfa73fe5a..5c2380558 100644 --- a/src/main/java/appeng/items/tools/powered/ChargedStaffItem.java +++ b/src/main/java/appeng/items/tools/powered/ChargedStaffItem.java @@ -21,7 +21,7 @@ package appeng.items.tools.powered; import net.minecraft.entity.LivingEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; +import net.minecraft.entity.damage.DamageSource; import net.minecraft.util.math.Box; import appeng.api.config.Actionable; @@ -51,7 +51,7 @@ public class ChargedStaffItem extends AEBasePoweredItem { new LightningPacket(dx, dy, dz)); } } - target.attackEntityFrom(DamageSource.MAGIC, 6); + target.damage(DamageSource.MAGIC, 6); return true; } diff --git a/src/main/java/appeng/items/tools/powered/MatterCannonItem.java b/src/main/java/appeng/items/tools/powered/MatterCannonItem.java index 8cb7fc09b..4b9093c16 100644 --- a/src/main/java/appeng/items/tools/powered/MatterCannonItem.java +++ b/src/main/java/appeng/items/tools/powered/MatterCannonItem.java @@ -30,13 +30,13 @@ import net.minecraft.client.item.TooltipContext; 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.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.DamageSource; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.math.Box; import net.minecraft.util.math.Direction; @@ -253,7 +253,7 @@ public class MatterCannonItem extends AEBasePoweredItem implements IStorageCell< sh.setFleeceColor(col.dye); } - entityHit.attackEntityFrom(DamageSource.causePlayerDamage(p), 0); + entityHit.damage(DamageSource.causePlayerDamage(p), 0); NetworkHandler.instance().sendToAll(marker.getPacket()); } else if (pos instanceof BlockHitResult) { BlockHitResult blockResult = (BlockHitResult) pos; @@ -357,14 +357,14 @@ public class MatterCannonItem extends AEBasePoweredItem implements IStorageCell< el.knockBack(p, 0, -direction.x, -direction.z); // el.knockBack( p, 0, Vec3d.x, // Vec3d.z ); - el.attackEntityFrom(dmgSrc, dmg); + el.damage(dmgSrc, dmg); if (!el.isAlive()) { hasDestroyed = true; } } else if (entityHit instanceof ItemEntity) { hasDestroyed = true; entityHit.remove(); - } else if (entityHit.attackEntityFrom(dmgSrc, dmg)) { + } else if (entityHit.damage(dmgSrc, dmg)) { hasDestroyed = true; } } else if (pos instanceof BlockHitResult) { diff --git a/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java b/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java index 2abe2541c..baf4e4273 100644 --- a/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java +++ b/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java @@ -28,7 +28,7 @@ import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.text.TranslatableText; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.text.Text; import net.minecraft.world.World; import net.fabricmc.api.EnvType; @@ -79,10 +79,10 @@ public abstract class AEBasePoweredItem extends AEBaseItem implements IAEItemPow } @Override - public void fillItemGroup(ItemGroup group, NonNullList items) { - super.fillItemGroup(group, items); + public void appendStacks(ItemGroup group, DefaultedList items) { + super.appendStacks(group, items); - if (this.isInGroup(group)) { + if (this.isIn(group)) { final ItemStack charged = new ItemStack(this, 1); final CompoundTag tag = charged.getOrCreateTag(); tag.putDouble(CURRENT_POWER_NBT_KEY, this.getAEMaxPower(charged)); diff --git a/src/main/java/appeng/me/cache/TickManagerCache.java b/src/main/java/appeng/me/cache/TickManagerCache.java index 12a3d9cd9..62d3721fa 100644 --- a/src/main/java/appeng/me/cache/TickManagerCache.java +++ b/src/main/java/appeng/me/cache/TickManagerCache.java @@ -23,9 +23,10 @@ import java.util.PriorityQueue; import com.google.common.base.Preconditions; -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.CrashReportCategory; -import net.minecraft.crash.ReportedException; +import net.minecraft.util.crash.CrashException; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashReportSection; +import net.minecraft.util.crash.CrashException; import appeng.api.networking.IGrid; import appeng.api.networking.IGridHost; @@ -116,11 +117,11 @@ public class TickManagerCache implements ITickManager { } } } catch (final Throwable t) { - final CrashReport crashreport = CrashReport.makeCrashReport(t, "Ticking GridNode"); - final CrashReportCategory crashreportcategory = crashreport - .makeCategory(tt.getGridTickable().getClass().getSimpleName() + " being ticked."); - tt.addEntityCrashInfo(crashreportcategory); - throw new ReportedException(crashreport); + final CrashReport crashreport = CrashReport.create(t, "Ticking GridNode"); + final CrashReportSection section = crashreport + .addElement(tt.getGridTickable().getClass().getSimpleName() + " being ticked."); + tt.addEntityCrashInfo(section); + throw new CrashException(crashreport); } } diff --git a/src/main/java/appeng/me/cache/helpers/TickTracker.java b/src/main/java/appeng/me/cache/helpers/TickTracker.java index 8c83f4a26..f668e0f4b 100644 --- a/src/main/java/appeng/me/cache/helpers/TickTracker.java +++ b/src/main/java/appeng/me/cache/helpers/TickTracker.java @@ -20,7 +20,7 @@ package appeng.me.cache.helpers; import javax.annotation.Nonnull; -import net.minecraft.crash.CrashReportCategory; +import net.minecraft.util.crash.CrashReportSection; import appeng.api.networking.IGridNode; import appeng.api.networking.ticking.IGridTickable; @@ -28,6 +28,7 @@ import appeng.api.networking.ticking.TickingRequest; import appeng.api.util.DimensionalCoord; import appeng.me.cache.TickManagerCache; import appeng.parts.AEBasePart; +import net.minecraft.util.crash.CrashReportSection; public class TickTracker implements Comparable { @@ -71,22 +72,22 @@ public class TickTracker implements Comparable { } - public void addEntityCrashInfo(final CrashReportCategory crashreportcategory) { + public void addEntityCrashInfo(final CrashReportSection section) { if (this.getGridTickable() instanceof AEBasePart) { final AEBasePart part = (AEBasePart) this.getGridTickable(); - part.addEntityCrashInfo(crashreportcategory); + part.addEntityCrashInfo(section); } - crashreportcategory.addDetail("CurrentTickRate", this.getCurrentRate()); - crashreportcategory.addDetail("MinTickRate", this.getRequest().minTickRate); - crashreportcategory.addDetail("MaxTickRate", this.getRequest().maxTickRate); - crashreportcategory.addDetail("MachineType", this.getGridTickable().getClass().getName()); - crashreportcategory.addDetail("GridBlockType", this.getNode().getGridBlock().getClass().getName()); - crashreportcategory.addDetail("ConnectedSides", this.getNode().getConnectedSides()); + section.add("CurrentTickRate", this.getCurrentRate()); + section.add("MinTickRate", this.getRequest().minTickRate); + section.add("MaxTickRate", this.getRequest().maxTickRate); + section.add("MachineType", this.getGridTickable().getClass().getName()); + section.add("GridBlockType", this.getNode().getGridBlock().getClass().getName()); + section.add("ConnectedSides", this.getNode().getConnectedSides()); final DimensionalCoord dc = this.getNode().getGridBlock().getLocation(); if (dc != null) { - crashreportcategory.addDetail("Location", dc); + section.add("Location", dc); } } diff --git a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java index b984fc7fd..7e16782f7 100644 --- a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java @@ -1087,9 +1087,9 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU { if (te.hasCustomInventoryName()) { if (this.myName != null) { - this.myName.append(" ").append(te.getCustomInventoryName()); + this.myName = this.myName.copy().append(" ").append(te.getCustomInventoryName()); } else { - this.myName = te.getCustomInventoryName().deepCopy(); + this.myName = te.getCustomInventoryName(); } } } diff --git a/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java b/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java index c731e44b1..0e4fa858d 100644 --- a/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java @@ -161,7 +161,7 @@ public class QuantumCluster implements ILocatable, IAECluster { final World theWorld = qc.center.getWorld(); if (!qc.isDestroyed) { ChunkPos cPos = new ChunkPos(qc.center.getPos()); - if (theWorld.getChunkProvider().isChunkLoaded(cPos)) { + if (theWorld.getChunkManager().isChunkLoaded(cPos)) { final DimensionType id = theWorld.dimension.getType(); final World cur = theWorld.getServer().getWorld(id); diff --git a/src/main/java/appeng/me/storage/MEMonitorIFluidHandler.java b/src/main/java/appeng/me/storage/MEMonitorIFluidHandler.java index 42063662b..1bad298ab 100644 --- a/src/main/java/appeng/me/storage/MEMonitorIFluidHandler.java +++ b/src/main/java/appeng/me/storage/MEMonitorIFluidHandler.java @@ -130,11 +130,11 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki // Just to safeguard against tanks that prevent non-bucket-size extractions if (this.handler.drain(FluidAttributes.BUCKET_VOLUME, IFluidHandler.FluidAction.SIMULATE) .isEmpty()) { - newIS = FluidVolume.EMPTY; + newIS = FluidVolumeUtil.EMPTY; } } } - final FluidVolume oldIS = old == null ? FluidVolume.EMPTY : old.fluidStack; + final FluidVolume oldIS = old == null ? FluidVolumeUtil.EMPTY : old.fluidStack; if (isDifferent(newIS, oldIS)) { final CachedFluidStack cis = new CachedFluidStack(newIS); @@ -206,7 +206,7 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki if (a.isEmpty() || b.isEmpty()) { return true; } - return !a.getFluid().equals(b.getFluid()); + return !a.getFluidKey().equals(b.getFluidKey()); } private void postDifference(final Iterable a) { @@ -293,7 +293,7 @@ public class MEMonitorIFluidHandler implements IMEMonitor, ITicki CachedFluidStack(final FluidVolume is) { if (is.isEmpty()) { - this.fluidStack = FluidVolume.EMPTY; + this.fluidStack = FluidVolumeUtil.EMPTY; this.aeStack = null; } else { this.fluidStack = is.copy(); diff --git a/src/main/java/appeng/parts/AEBasePart.java b/src/main/java/appeng/parts/AEBasePart.java index 6bfcf5668..61d0c3a15 100644 --- a/src/main/java/appeng/parts/AEBasePart.java +++ b/src/main/java/appeng/parts/AEBasePart.java @@ -29,7 +29,7 @@ import com.google.common.base.Preconditions; import net.fabricmc.api.EnvType; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.crash.CrashReportCategory; +import net.minecraft.util.crash.CrashReportSection; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; @@ -182,8 +182,8 @@ public abstract class AEBasePart implements IPart, IGridProxyable, IActionHost, return this.getItemStack().hasCustomName(); } - public void addEntityCrashInfo(final CrashReportCategory crashreportcategory) { - crashreportcategory.addDetail("Part Side", this.getSide()); + public void addEntityCrashInfo(final CrashReportSection section) { + section.add("Part Side", this.getSide()); } @Override @@ -332,10 +332,10 @@ public abstract class AEBasePart implements IPart, IGridProxyable, IActionHost, final FixedItemInv inv = this.getInventoryByName("config"); if (inv instanceof AppEngInternalAEInventory) { final AppEngInternalAEInventory target = (AppEngInternalAEInventory) inv; - final AppEngInternalAEInventory tmp = new AppEngInternalAEInventory(null, target.getSlots()); + final AppEngInternalAEInventory tmp = new AppEngInternalAEInventory(null, target.getSlotCount()); tmp.readFromNBT(compound, "config"); - for (int x = 0; x < tmp.getSlots(); x++) { - target.setStackInSlot(x, tmp.getInvStack(x)); + for (int x = 0; x < tmp.getSlotCount(); x++) { + target.setInvStack(x, tmp.getInvStack(x)); } } } diff --git a/src/main/java/appeng/parts/CableBusContainer.java b/src/main/java/appeng/parts/CableBusContainer.java index aaca9b99d..d0be3bdb9 100644 --- a/src/main/java/appeng/parts/CableBusContainer.java +++ b/src/main/java/appeng/parts/CableBusContainer.java @@ -23,6 +23,7 @@ import java.util.*; import javax.annotation.Nullable; +import net.fabricmc.fabric.api.util.NbtType; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.Entity; @@ -837,8 +838,8 @@ public class CableBusContainer extends CableBusStorage implements AEMultiTile, I String defKey = "def:" + side.ordinal(); String extraKey = "extra:" + side.ordinal(); - if (data.contains(defKey, Constants.NBT.TAG_COMPOUND) - && data.contains(extraKey, Constants.NBT.TAG_COMPOUND)) { + if (data.contains(defKey, NbtType.COMPOUND) + && data.contains(extraKey, NbtType.COMPOUND)) { final CompoundTag def = data.getCompound(defKey); final CompoundTag extra = data.getCompound(extraKey); IPart p = this.getPart(side); diff --git a/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java b/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java index cc0fe1345..e09e04615 100644 --- a/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java +++ b/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java @@ -228,7 +228,7 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab && this.getProxy().isActive()) { ItemEntity itemEntity = (ItemEntity) entity; - if (isItemBlacklisted(itemEntity.getItem().getItem())) { + if (isItemBlacklisted(itemEntity.getStack().getItem())) { return; } @@ -305,7 +305,7 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab */ private boolean storeEntityItem(final ItemEntity entityItem) { if (entityItem.isAlive()) { - final IAEItemStack overflow = this.storeItemStack(entityItem.getItem()); + final IAEItemStack overflow = this.storeItemStack(entityItem.getStack()); return this.handleOverflow(entityItem, overflow); } @@ -355,11 +355,11 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab return true; } - final int oldStackSize = entityItem.getItem().getCount(); + final int oldStackSize = entityItem.getStack().getCount(); final int newStackSize = (int) overflow.getStackSize(); final boolean changed = oldStackSize != newStackSize; - entityItem.getItem().setCount(newStackSize); + entityItem.getStack().setCount(newStackSize); return changed; } diff --git a/src/main/java/appeng/parts/automation/FormationPlanePart.java b/src/main/java/appeng/parts/automation/FormationPlanePart.java index 1edb005fa..c1e21c05c 100644 --- a/src/main/java/appeng/parts/automation/FormationPlanePart.java +++ b/src/main/java/appeng/parts/automation/FormationPlanePart.java @@ -30,7 +30,7 @@ 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.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.BlockItem; import net.minecraft.item.DirectionalPlaceContext; import net.minecraft.item.FireworkRocketItem; @@ -119,7 +119,7 @@ public class FormationPlanePart extends AbstractFormationPlanePart .getStorageChannel(IItemStorageChannel.class).createList(); final int slotsToUse = 18 + this.getInstalledUpgrades(Upgrades.CAPACITY) * 9; - for (int x = 0; x < this.Config.getSlots() && x < slotsToUse; x++) { + for (int x = 0; x < this.Config.getSlotCount() && x < slotsToUse; x++) { final IAEItemStack is = this.Config.getAEStackInSlot(x); if (is != null) { priorityList.add(is); @@ -296,7 +296,7 @@ public class FormationPlanePart extends AbstractFormationPlanePart Entity result = ei; - ei.setMotion(side.xOffset * 0.2, side.yOffset * 0.2, side.zOffset * 0.2); + 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); @@ -354,7 +354,7 @@ public class FormationPlanePart extends AbstractFormationPlanePart } @Override - public ContainerType getContainerType() { + public ScreenHandlerType getContainerType() { return FormationPlaneContainer.TYPE; } diff --git a/src/main/java/appeng/parts/automation/LevelEmitterPart.java b/src/main/java/appeng/parts/automation/LevelEmitterPart.java index 8a62e71a8..afa24ca71 100644 --- a/src/main/java/appeng/parts/automation/LevelEmitterPart.java +++ b/src/main/java/appeng/parts/automation/LevelEmitterPart.java @@ -26,7 +26,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; -import net.minecraft.particles.RedstoneParticleData; +import net.minecraft.particle.DustParticleEffect; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; @@ -393,7 +393,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(RedstoneParticleData.REDSTONE_DUST, 0.5 + pos.getX() + d0, 0.5 + pos.getY() + d1, + world.addParticle(DustParticleEffect.REDSTONE_DUST, 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/main/java/appeng/parts/automation/PlaneModel.java b/src/main/java/appeng/parts/automation/PlaneModel.java index 7abe58959..1a123affd 100644 --- a/src/main/java/appeng/parts/automation/PlaneModel.java +++ b/src/main/java/appeng/parts/automation/PlaneModel.java @@ -31,7 +31,7 @@ import net.minecraft.client.render.model.IUnbakedModel; import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.Material; import net.minecraft.client.render.model.ModelLoader; -import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.texture.Sprite; import net.minecraft.util.Identifier; import net.minecraftforge.client.model.IModelConfiguration; @@ -47,9 +47,9 @@ public class PlaneModel implements IModelGeometry { private final Material backTexture; public PlaneModel(Identifier frontTexture, Identifier sidesTexture, Identifier backTexture) { - this.frontTexture = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, frontTexture); - this.sidesTexture = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, sidesTexture); - this.backTexture = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, backTexture); + this.frontTexture = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, frontTexture); + this.sidesTexture = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, sidesTexture); + this.backTexture = new Material(SpriteAtlasTexture.BLOCK_ATLAS_TEX, backTexture); } @Override diff --git a/src/main/java/appeng/parts/automation/SharedItemBusPart.java b/src/main/java/appeng/parts/automation/SharedItemBusPart.java index ff75375d0..b5b54afdd 100644 --- a/src/main/java/appeng/parts/automation/SharedItemBusPart.java +++ b/src/main/java/appeng/parts/automation/SharedItemBusPart.java @@ -90,7 +90,7 @@ public abstract class SharedItemBusPart extends UpgradeablePart implements IGrid private BlockEntity getBlockEntity(final BlockEntity self, final BlockPos pos) { final World w = self.getWorld(); - if (w.getChunkProvider().isChunkLoaded(new ChunkPos(pos))) { + if (w.getChunkManager().isChunkLoaded(new ChunkPos(pos))) { return w.getBlockEntity(pos); } @@ -98,7 +98,7 @@ public abstract class SharedItemBusPart extends UpgradeablePart implements IGrid } protected int availableSlots() { - return Math.min(1 + this.getInstalledUpgrades(Upgrades.CAPACITY) * 4, this.getConfig().getSlots()); + return Math.min(1 + this.getInstalledUpgrades(Upgrades.CAPACITY) * 4, this.getConfig().getSlotCount()); } protected int calculateItemsToSend() { @@ -129,7 +129,7 @@ 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.getChunkProvider().isChunkLoaded(new ChunkPos(selfPos)); + return world != null && world.getChunkManager().isChunkLoaded(new ChunkPos(selfPos)); } private void updateState() { diff --git a/src/main/java/appeng/parts/misc/InterfacePart.java b/src/main/java/appeng/parts/misc/InterfacePart.java index 42873f9cf..18fdcc727 100644 --- a/src/main/java/appeng/parts/misc/InterfacePart.java +++ b/src/main/java/appeng/parts/misc/InterfacePart.java @@ -26,7 +26,7 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.CraftingInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntity; @@ -274,7 +274,7 @@ public class InterfacePart extends BasicStatePart implements IGridTickable, ISto } @Override - public ContainerType getContainerType() { + public ScreenHandlerType getContainerType() { return InterfaceContainer.TYPE; } } diff --git a/src/main/java/appeng/parts/misc/StorageBusPart.java b/src/main/java/appeng/parts/misc/StorageBusPart.java index a5cea7b1a..22dc2d0f5 100644 --- a/src/main/java/appeng/parts/misc/StorageBusPart.java +++ b/src/main/java/appeng/parts/misc/StorageBusPart.java @@ -24,7 +24,7 @@ import java.util.Objects; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Identifier; @@ -438,7 +438,7 @@ public class StorageBusPart extends UpgradeablePart .getStorageChannel(IItemStorageChannel.class).createList(); final int slotsToUse = 18 + this.getInstalledUpgrades(Upgrades.CAPACITY) * 9; - for (int x = 0; x < this.Config.getSlots() && x < slotsToUse; x++) { + for (int x = 0; x < this.Config.getSlotCount() && x < slotsToUse; x++) { final IAEItemStack is = this.Config.getAEStackInSlot(x); if (is != null) { priorityList.add(is); @@ -563,7 +563,7 @@ public class StorageBusPart extends UpgradeablePart } @Override - public ContainerType getContainerType() { + public ScreenHandlerType getContainerType() { return StorageBusContainer.TYPE; } } diff --git a/src/main/java/appeng/parts/p2p/FluidP2PTunnelPart.java b/src/main/java/appeng/parts/p2p/FluidP2PTunnelPart.java index d16f96186..d451615da 100644 --- a/src/main/java/appeng/parts/p2p/FluidP2PTunnelPart.java +++ b/src/main/java/appeng/parts/p2p/FluidP2PTunnelPart.java @@ -103,7 +103,7 @@ public class FluidP2PTunnelPart extends P2PTunnelPart implem @Override @Nonnull public FluidVolume getFluidInTank(int tank) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } @Override @@ -129,7 +129,7 @@ public class FluidP2PTunnelPart extends P2PTunnelPart implem stack.push(this); - final List list = this.getOutputs(resource.getFluid()); + final List list = this.getOutputs(resource.getFluidKey()); int requestTotal = 0; Iterator i = list.iterator(); @@ -201,13 +201,13 @@ public class FluidP2PTunnelPart extends P2PTunnelPart implem @Override @Nonnull public FluidVolume drain(FluidVolume resource, FluidAction action) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } @Override @Nonnull public FluidVolume drain(int maxDrain, FluidAction action) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } private Deque getDepth() { diff --git a/src/main/java/appeng/parts/reporting/AbstractTerminalPart.java b/src/main/java/appeng/parts/reporting/AbstractTerminalPart.java index fb7ed201f..20946a9ef 100644 --- a/src/main/java/appeng/parts/reporting/AbstractTerminalPart.java +++ b/src/main/java/appeng/parts/reporting/AbstractTerminalPart.java @@ -22,7 +22,7 @@ import java.util.List; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Hand; @@ -113,7 +113,7 @@ public abstract class AbstractTerminalPart extends AbstractDisplayPart return true; } - public ContainerType getContainerType(final PlayerEntity player) { + public ScreenHandlerType getContainerType(final PlayerEntity player) { return MEMonitorableContainer.TYPE; } diff --git a/src/main/java/appeng/parts/reporting/CraftingTerminalPart.java b/src/main/java/appeng/parts/reporting/CraftingTerminalPart.java index 3e5e29c6a..c86ae73d8 100644 --- a/src/main/java/appeng/parts/reporting/CraftingTerminalPart.java +++ b/src/main/java/appeng/parts/reporting/CraftingTerminalPart.java @@ -22,7 +22,7 @@ import java.util.List; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Identifier; @@ -80,7 +80,7 @@ public class CraftingTerminalPart extends AbstractTerminalPart { } @Override - public ContainerType getContainerType(final PlayerEntity p) { + public ScreenHandlerType getContainerType(final PlayerEntity p) { if (Platform.checkPermissions(p, this, SecurityPermissions.CRAFT, false)) { return CraftingTermContainer.TYPE; } diff --git a/src/main/java/appeng/parts/reporting/PatternTerminalPart.java b/src/main/java/appeng/parts/reporting/PatternTerminalPart.java index 9825100df..2fd63152f 100644 --- a/src/main/java/appeng/parts/reporting/PatternTerminalPart.java +++ b/src/main/java/appeng/parts/reporting/PatternTerminalPart.java @@ -21,7 +21,7 @@ package appeng.parts.reporting; import java.util.List; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Identifier; @@ -95,7 +95,7 @@ public class PatternTerminalPart extends AbstractTerminalPart { } @Override - public ContainerType getContainerType(final PlayerEntity p) { + public ScreenHandlerType getContainerType(final PlayerEntity p) { if (Platform.checkPermissions(p, this, SecurityPermissions.CRAFT, false)) { return PatternTermContainer.TYPE; } @@ -115,14 +115,14 @@ public class PatternTerminalPart extends AbstractTerminalPart { this.setCraftingRecipe(details.isCraftable()); this.setSubstitution(details.canSubstitute()); - for (int x = 0; x < this.crafting.getSlots() && x < details.getInputs().length; x++) { + for (int x = 0; x < this.crafting.getSlotCount() && x < details.getInputs().length; x++) { final IAEItemStack item = details.getInputs()[x]; - this.crafting.setStackInSlot(x, item == null ? ItemStack.EMPTY : item.createItemStack()); + this.crafting.setInvStack(x, item == null ? ItemStack.EMPTY : item.createItemStack()); } - for (int x = 0; x < this.output.getSlots() && x < details.getOutputs().length; x++) { + for (int x = 0; x < this.output.getSlotCount() && x < details.getOutputs().length; x++) { final IAEItemStack item = details.getOutputs()[x]; - this.output.setStackInSlot(x, item == null ? ItemStack.EMPTY : item.createItemStack()); + this.output.setInvStack(x, item == null ? ItemStack.EMPTY : item.createItemStack()); } } } @@ -135,7 +135,7 @@ public class PatternTerminalPart extends AbstractTerminalPart { private void fixCraftingRecipes() { if (this.craftingMode) { - for (int x = 0; x < this.crafting.getSlots(); x++) { + for (int x = 0; x < this.crafting.getSlotCount(); x++) { final ItemStack is = this.crafting.getInvStack(x); if (!is.isEmpty()) { is.setCount(1); diff --git a/src/main/java/appeng/recipes/handlers/GrinderRecipe.java b/src/main/java/appeng/recipes/handlers/GrinderRecipe.java index 06a4bed83..275950ad6 100644 --- a/src/main/java/appeng/recipes/handlers/GrinderRecipe.java +++ b/src/main/java/appeng/recipes/handlers/GrinderRecipe.java @@ -11,7 +11,7 @@ import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.util.Identifier; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; public class GrinderRecipe implements Recipe { @@ -91,8 +91,8 @@ public class GrinderRecipe implements Recipe { } @Override - public NonNullList getIngredients() { - NonNullList nonnulllist = NonNullList.create(); + public DefaultedList getIngredients() { + DefaultedList nonnulllist = DefaultedList.create(); nonnulllist.add(this.ingredient); return nonnulllist; } diff --git a/src/main/java/appeng/recipes/handlers/InscriberRecipe.java b/src/main/java/appeng/recipes/handlers/InscriberRecipe.java index c6bac825c..e5c786815 100644 --- a/src/main/java/appeng/recipes/handlers/InscriberRecipe.java +++ b/src/main/java/appeng/recipes/handlers/InscriberRecipe.java @@ -5,7 +5,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.recipe.*; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; -import net.minecraft.util.NonNullList; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.Identifier; import net.minecraft.world.World; @@ -71,8 +71,8 @@ public class InscriberRecipe implements Recipe { } @Override - public NonNullList getIngredients() { - NonNullList nonnulllist = NonNullList.create(); + public DefaultedList getIngredients() { + DefaultedList nonnulllist = DefaultedList.create(); nonnulllist.add(this.topOptional); nonnulllist.add(this.middleInput); nonnulllist.add(this.bottomOptional); diff --git a/src/main/java/appeng/server/ServerHelper.java b/src/main/java/appeng/server/ServerHelper.java index 0a0e5cc23..9f4cb0bb5 100644 --- a/src/main/java/appeng/server/ServerHelper.java +++ b/src/main/java/appeng/server/ServerHelper.java @@ -24,6 +24,7 @@ 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; @@ -148,7 +149,7 @@ public class ServerHelper extends CommonHelper { } @Override - public boolean isActionKey(ActionKey key, InputMappings.Input input) { + public boolean isActionKey(ActionKey key, InputUtil.Key input) { return false; } } diff --git a/src/main/java/appeng/server/subcommands/TestMeteoritesCommand.java b/src/main/java/appeng/server/subcommands/TestMeteoritesCommand.java index e863db785..1cb9a2c5f 100644 --- a/src/main/java/appeng/server/subcommands/TestMeteoritesCommand.java +++ b/src/main/java/appeng/server/subcommands/TestMeteoritesCommand.java @@ -40,9 +40,8 @@ import net.minecraft.text.Text; import net.minecraft.text.LiteralText; 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.chunk.IChunk; -import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.feature.structure.StructureStart; @@ -84,15 +83,15 @@ public class TestMeteoritesCommand implements ISubCommand { BlockPos centerBlock; if (player != null) { world = player.getServerWorld(); - centerBlock = new BlockPos(player.getX(), 0, player.getPosZ()); + centerBlock = new BlockPos(player.getX(), 0, player.getZ()); } else { - world = srv.getWorld(DimensionType.OVERWORLD); + world = srv.getOverworld(); centerBlock = world.getSpawnPoint(); } ChunkPos center = new ChunkPos(centerBlock); - ChunkGenerator generator = world.getChunkProvider().getChunkGenerator(); + ChunkGenerator generator = world.getChunkManager().getChunkGenerator(); // Find all meteorites in the given rectangle List found = new ArrayList<>(); @@ -104,7 +103,7 @@ public class TestMeteoritesCommand implements ISubCommand { BlockPos p = new BlockPos(cp.getXStart(), 0, cp.getZStart()); BlockPos nearest = MeteoriteStructure.INSTANCE.findNearest(world, generator, p, 0, false); if (nearest != null) { - IChunk chunk = world.getChunk(cx, cz, ChunkStatus.STRUCTURE_STARTS); + Chunk chunk = world.getChunk(cx, cz, ChunkStatus.STRUCTURE_STARTS); // The actual relevant information is in the structure piece MeteoriteStructurePiece piece = getMeteoritePieceFromChunk(chunk); if (piece != null) { @@ -147,7 +146,7 @@ public class TestMeteoritesCommand implements ISubCommand { String state = "not final"; if (force && settings.getFallout() == null) { - IChunk chunk = world.getChunk(pos); + Chunk chunk = world.getChunk(pos); MeteoriteStructurePiece piece = getMeteoritePieceFromChunk(chunk); if (piece == null) { state = "removed"; @@ -195,7 +194,7 @@ public class TestMeteoritesCommand implements ISubCommand { .formatted(style -> style.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, tpCommand))); } - private static MeteoriteStructurePiece getMeteoritePieceFromChunk(IChunk chunk) { + private static MeteoriteStructurePiece getMeteoritePieceFromChunk(Chunk chunk) { StructureStart start = chunk.getStructureStart(MeteoriteStructure.INSTANCE.getStructureName()); if (start != null && start.getComponents().size() > 0 diff --git a/src/main/java/appeng/server/subcommands/TestOreGenCommand.java b/src/main/java/appeng/server/subcommands/TestOreGenCommand.java index f76f1a7bc..aa605c357 100644 --- a/src/main/java/appeng/server/subcommands/TestOreGenCommand.java +++ b/src/main/java/appeng/server/subcommands/TestOreGenCommand.java @@ -36,8 +36,7 @@ import net.minecraft.text.LiteralText; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.chunk.ChunkStatus; -import net.minecraft.world.chunk.IChunk; -import net.minecraft.world.dimension.DimensionType; +import net.minecraft.world.chunk.Chunk; import net.minecraft.server.world.ServerWorld; import appeng.core.Api; @@ -66,9 +65,9 @@ public class TestOreGenCommand implements ISubCommand { try { ServerPlayerEntity player = sender.asPlayer(); world = player.getServerWorld(); - center = new BlockPos(player.getX(), 0, player.getPosZ()); + center = new BlockPos(player.getX(), 0, player.getZ()); } catch (CommandSyntaxException e) { - world = srv.getWorld(DimensionType.OVERWORLD); + world = srv.getOverworld(); center = world.getSpawnPoint(); } @@ -98,7 +97,7 @@ public class TestOreGenCommand implements ISubCommand { } private void checkChunk(ServerCommandSource sender, ServerWorld world, ChunkPos cp, Stats stats) { - IChunk chunk = world.getChunk(cp.x, cp.z, ChunkStatus.FULL, false); + Chunk chunk = world.getChunk(cp.x, cp.z, ChunkStatus.FULL, false); if (chunk == null) { sendLine(sender, "Skipping chunk %s", cp); return; diff --git a/src/main/java/appeng/spatial/CachedPlane.java b/src/main/java/appeng/spatial/CachedPlane.java index 2e4a28ca1..c640697ec 100644 --- a/src/main/java/appeng/spatial/CachedPlane.java +++ b/src/main/java/appeng/spatial/CachedPlane.java @@ -321,14 +321,14 @@ public class CachedPlane { // FIXME this was sending chunks to players... SChunkDataPacket cdp = new SChunkDataPacket(c, verticalBits); - ((ServerChunkProvider) world.getChunkProvider()).chunkManager.getTrackingPlayers(c.getPos(), false) + ((ServerChunkProvider) world.getChunkManager()).chunkManager.getTrackingPlayers(c.getPos(), false) .forEach(spe -> spe.connection.sendPacket(cdp)); } } // FIXME check if this makes any sense at all to send changes to players asap - ServerChunkProvider serverChunkProvider = (ServerChunkProvider) world.getChunkProvider(); + ServerChunkProvider serverChunkProvider = (ServerChunkProvider) world.getChunkManager(); serverChunkProvider.tick(() -> false); } diff --git a/src/main/java/appeng/spatial/DefaultSpatialHandler.java b/src/main/java/appeng/spatial/DefaultSpatialHandler.java index 94bb05e70..1c9e2cd3f 100644 --- a/src/main/java/appeng/spatial/DefaultSpatialHandler.java +++ b/src/main/java/appeng/spatial/DefaultSpatialHandler.java @@ -47,7 +47,7 @@ public class DefaultSpatialHandler implements IMovableHandler { final Chunk c = w.getChunkAt(newPosition); c.addTileEntity(newPosition, te); - if (w.getChunkProvider().isChunkLoaded(c.getPos())) { + if (w.getChunkManager().isChunkLoaded(c.getPos())) { final BlockState state = w.getBlockState(newPosition); w.addTileEntity(te); w.updateListeners(newPosition, state, state, 1); diff --git a/src/main/java/appeng/spatial/StorageChunkGenerator.java b/src/main/java/appeng/spatial/StorageChunkGenerator.java index aa697c456..190ea29df 100644 --- a/src/main/java/appeng/spatial/StorageChunkGenerator.java +++ b/src/main/java/appeng/spatial/StorageChunkGenerator.java @@ -25,7 +25,7 @@ import net.minecraft.world.World; 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.IChunk; +import net.minecraft.world.chunk.Chunk; import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.GenerationSettings; import net.minecraft.world.gen.Heightmap; @@ -53,12 +53,12 @@ public class StorageChunkGenerator extends ChunkGenerator { } @Override - public void generateSurface(WorldGenRegion region, IChunk chunk) { + public void generateSurface(WorldGenRegion region, Chunk chunk) { this.fillChunk(chunk); chunk.setModified(false); } - private void fillChunk(IChunk chunk) { + private void fillChunk(Chunk chunk) { BlockPos.Mutable mutPos = new BlockPos.Mutable(); for (int cx = 0; cx < 16; cx++) { mutPos.setX(cx); @@ -80,7 +80,7 @@ public class StorageChunkGenerator extends ChunkGenerator { } @Override - public void makeBase(WorldAccess worldIn, IChunk chunkIn) { + public void makeBase(WorldAccess worldIn, Chunk chunkIn) { } @Override diff --git a/src/main/java/appeng/spatial/StorageHelper.java b/src/main/java/appeng/spatial/StorageHelper.java index e24b15458..80a2ca83e 100644 --- a/src/main/java/appeng/spatial/StorageHelper.java +++ b/src/main/java/appeng/spatial/StorageHelper.java @@ -20,7 +20,6 @@ package appeng.spatial; import java.util.ArrayList; import java.util.List; -import java.util.function.Function; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -33,7 +32,6 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.server.world.ServerWorld; -import net.minecraftforge.common.util.ITeleporter; import appeng.api.AEApi; import appeng.api.util.WorldCoord; @@ -64,7 +62,7 @@ public class StorageHelper { try { oldWorld = (ServerWorld) entity.world; - newWorld = (ServerWorld) link.dim; + newWorld = link.dim; } catch (final Throwable e) { return entity; } @@ -80,12 +78,12 @@ public class StorageHelper { } // Are we riding something? Teleport it instead. - if (entity.isPassenger()) { - return this.teleportEntity(entity.getRidingEntity(), link); + if (entity.hasVehicle()) { + return this.teleportEntity(entity.getVehicle(), link); } // Is something riding us? Handle it first. - final List passengers = entity.getPassengers(); + final List passengers = entity.getPassengerList(); final List passengersOnOtherSide = new ArrayList<>(passengers.size()); for (Entity passenger : passengers) { passenger.stopRiding(); @@ -94,14 +92,19 @@ public class StorageHelper { // We keep track of all so we can remount them on the other side. // load the chunk! - newWorld.getChunkProvider().getChunk(MathHelper.floor(link.x) >> 4, MathHelper.floor(link.z) >> 4, + newWorld.getChunkManager().getChunk(MathHelper.floor(link.x) >> 4, MathHelper.floor(link.z) >> 4, ChunkStatus.FULL, true); if (entity instanceof ServerPlayerEntity && link.dim.getDimension() instanceof StorageCellDimension) { AppEng.instance().getAdvancementTriggers().getSpatialExplorer().trigger((ServerPlayerEntity) entity); } - entity.changeDimension(link.dim.getDimension().getType(), new METeleporter(link)); + // FIXME FABRIC new METeleporter(link) + float yaw = entity.yaw; + entity = entity.changeDimension(link.dim); + entity.yaw = yaw; + entity.refreshPositionAfterTeleport(link.x, link.y, link.z); + entity.setVelocity(0, 0, 0); if (!passengersOnOtherSide.isEmpty()) { for (Entity passanger : passengersOnOtherSide) { @@ -136,7 +139,7 @@ public class StorageHelper { } } - public void swapRegions(final World srcWorld, final int srcX, final int srcY, final int srcZ, final World dstWorld, + public void swapRegions(final ServerWorld srcWorld, final int srcX, final int srcY, final int srcZ, final ServerWorld dstWorld, final int dstX, final int dstY, final int dstZ, final int scaleX, final int scaleY, final int scaleZ) { AEApi.instance().definitions().blocks().matrixFrame().maybeBlock() .ifPresent(matrixFrameBlock -> this.transverseEdges(dstX - 1, dstY - 1, dstZ - 1, dstX + scaleX + 1, @@ -157,8 +160,8 @@ public class StorageHelper { // do nearly all the work... swaps blocks, tiles, and block ticks cSrc.swap(cDst); - final List srcE = srcWorld.getEntitiesWithinAABB(Entity.class, srcBox); - final List dstE = dstWorld.getEntitiesWithinAABB(Entity.class, dstBox); + final List srcE = srcWorld.getEntitiesIncludingUngeneratedChunks(Entity.class, srcBox); + final List dstE = dstWorld.getEntitiesIncludingUngeneratedChunks(Entity.class, dstBox); for (final Entity e : dstE) { this.teleportEntity(e, new TelDestination(srcWorld, srcBox, e.getX(), e.getY(), e.getZ(), @@ -222,12 +225,12 @@ public class StorageHelper { } private static class TelDestination { - private final World dim; + private final ServerWorld dim; private final double x; private final double y; private final double z; - TelDestination(final World dimension, final Box srcBox, final double x, final double y, + TelDestination(final ServerWorld dimension, final Box srcBox, final double x, final double y, final double z, final int tileX, final int tileY, final int tileZ) { this.dim = dimension; this.x = Math.min(srcBox.maxX - 0.5, Math.max(srcBox.minX + 0.5, x + tileX)); @@ -236,22 +239,4 @@ public class StorageHelper { } } - private static class METeleporter implements ITeleporter { - - private final TelDestination destination; - - METeleporter(final TelDestination d) { - this.destination = d; - } - - @Override - public Entity placeEntity(Entity entity, ServerWorld currentWorld, ServerWorld destWorld, float yaw, - Function repositionEntity) { - Entity newEntity = repositionEntity.apply(false); - newEntity.yaw = yaw; - newEntity.setPositionAndUpdate(this.destination.x, this.destination.y, this.destination.z); - newEntity.setMotion(0, 0, 0); - return newEntity; - } - } } diff --git a/src/main/java/appeng/thirdparty/codechicken/lib/model/pipeline/transformers/QuadMatrixTransformer.java b/src/main/java/appeng/thirdparty/codechicken/lib/model/pipeline/transformers/QuadMatrixTransformer.java index 6dbaedfa8..af8377379 100644 --- a/src/main/java/appeng/thirdparty/codechicken/lib/model/pipeline/transformers/QuadMatrixTransformer.java +++ b/src/main/java/appeng/thirdparty/codechicken/lib/model/pipeline/transformers/QuadMatrixTransformer.java @@ -18,7 +18,7 @@ package appeng.thirdparty.codechicken.lib.model.pipeline.transformers; -import net.minecraft.client.renderer.Matrix4f; +import net.minecraft.util.math.Matrix4f; import net.minecraft.client.renderer.Vector4f; import net.minecraft.util.math.Direction; import net.minecraftforge.client.model.pipeline.IVertexConsumer; diff --git a/src/main/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java b/src/main/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java index 250beace9..6c7fc2583 100644 --- a/src/main/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java +++ b/src/main/java/appeng/tile/crafting/MolecularAssemblerBlockEntity.java @@ -132,7 +132,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity this.pushDirection = AEPartLocation.fromFacing(where); for (int x = 0; x < table.size(); x++) { - this.gridInv.setStackInSlot(x, table.getStack(x)); + this.gridInv.setInvStack(x, table.getStack(x)); } this.updateSleepiness(); @@ -331,7 +331,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity public void getDrops(final World w, final BlockPos pos, final List drops) { super.getDrops(w, pos, drops); - for (int h = 0; h < this.upgrades.getSlots(); h++) { + for (int h = 0; h < this.upgrades.getSlotCount(); h++) { final ItemStack is = this.upgrades.getInvStack(h); if (!is.isEmpty()) { drops.add(is); @@ -412,7 +412,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity this.pushOut(output.copy()); for (int x = 0; x < this.craftingInv.size(); x++) { - this.gridInv.setStackInSlot(x, Platform.getRecipeRemainder(this.craftingInv.getStack(x))); + this.gridInv.setInvStack(x, Platform.getRecipeRemainder(this.craftingInv.getStack(x))); } if (ItemHandlerUtil.isEmpty(this.patternInv)) { @@ -446,8 +446,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.setStackInSlot(9, is); - this.gridInv.setStackInSlot(x, ItemStack.EMPTY); + this.gridInv.setInvStack(9, is); + this.gridInv.setInvStack(x, ItemStack.EMPTY); this.saveChanges(); return; } @@ -479,7 +479,7 @@ public class MolecularAssemblerBlockEntity extends AENetworkInvBlockEntity this.recalculatePlan(); } - this.gridInv.setStackInSlot(9, output); + this.gridInv.setInvStack(9, output); } private ItemStack pushTo(ItemStack output, final Direction d) { diff --git a/src/main/java/appeng/tile/crafting/MolecularAssemblerRenderer.java b/src/main/java/appeng/tile/crafting/MolecularAssemblerRenderer.java index 562a15374..1a8e6e5f8 100644 --- a/src/main/java/appeng/tile/crafting/MolecularAssemblerRenderer.java +++ b/src/main/java/appeng/tile/crafting/MolecularAssemblerRenderer.java @@ -23,11 +23,12 @@ import java.util.Random; 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.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.util.math.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; import org.lwjgl.opengl.GL11; @@ -35,7 +36,6 @@ 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.AtlasTexture; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.item.BlockItem; @@ -99,9 +99,9 @@ public class MolecularAssemblerRenderer extends BlockEntityRenderer this.inv.setStackInSlot(0, charged)); + .ifPresent(charged -> this.inv.setInvStack(0, charged)); } } } @@ -160,12 +160,12 @@ 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.setStackInSlot(0, held); + this.inv.setInvStack(0, held); } } else { final List drops = new ArrayList<>(); drops.add(myItem); - this.inv.setStackInSlot(0, ItemStack.EMPTY); + this.inv.setInvStack(0, ItemStack.EMPTY); Platform.spawnDrops(this.world, this.pos.offset(this.getForward()), drops); } } @@ -222,7 +222,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.setStackInSlot(0, charged)); + .ifPresent(charged -> this.inv.setInvStack(0, charged)); changed = true; } diff --git a/src/main/java/appeng/tile/misc/CondenserBlockEntity.java b/src/main/java/appeng/tile/misc/CondenserBlockEntity.java index c734fc417..05e5ce3bd 100644 --- a/src/main/java/appeng/tile/misc/CondenserBlockEntity.java +++ b/src/main/java/appeng/tile/misc/CondenserBlockEntity.java @@ -261,7 +261,7 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi @Nonnull @Override public FluidVolume getFluid() { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } @Override @@ -294,13 +294,13 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi @Nonnull @Override public FluidVolume drain(int maxDrain, FluidAction action) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } @Nonnull @Override public FluidVolume drain(FluidVolume resource, FluidAction action) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } @Override @@ -311,7 +311,7 @@ public class CondenserBlockEntity extends AEBaseInvBlockEntity implements IConfi @Nonnull @Override public FluidVolume getFluidInTank(int tank) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } @Override diff --git a/src/main/java/appeng/tile/misc/InscriberBlockEntity.java b/src/main/java/appeng/tile/misc/InscriberBlockEntity.java index b411b01a7..435abce4c 100644 --- a/src/main/java/appeng/tile/misc/InscriberBlockEntity.java +++ b/src/main/java/appeng/tile/misc/InscriberBlockEntity.java @@ -198,7 +198,7 @@ public class InscriberBlockEntity extends AENetworkPowerBlockEntity public void getDrops(final World w, final BlockPos pos, final List drops) { super.getDrops(w, pos, drops); - for (int h = 0; h < this.upgrades.getSlots(); h++) { + for (int h = 0; h < this.upgrades.getSlotCount(); h++) { final ItemStack is = this.upgrades.getInvStack(h); if (!is.isEmpty()) { drops.add(is); @@ -278,10 +278,10 @@ public class InscriberBlockEntity extends AENetworkPowerBlockEntity if (this.sideItemHandler.insertItem(1, outputCopy, false).isEmpty()) { this.setProcessingTime(0); if (out.getProcessType() == InscriberProcessType.PRESS) { - this.topItemHandler.setStackInSlot(0, ItemStack.EMPTY); - this.bottomItemHandler.setStackInSlot(0, ItemStack.EMPTY); + this.topItemHandler.setInvStack(0, ItemStack.EMPTY); + this.bottomItemHandler.setInvStack(0, ItemStack.EMPTY); } - this.sideItemHandler.setStackInSlot(0, ItemStack.EMPTY); + this.sideItemHandler.setInvStack(0, ItemStack.EMPTY); } } this.saveChanges(); diff --git a/src/main/java/appeng/tile/misc/InterfaceBlockEntity.java b/src/main/java/appeng/tile/misc/InterfaceBlockEntity.java index 5744634b0..4e062f16e 100644 --- a/src/main/java/appeng/tile/misc/InterfaceBlockEntity.java +++ b/src/main/java/appeng/tile/misc/InterfaceBlockEntity.java @@ -28,7 +28,7 @@ import com.google.common.collect.ImmutableSet; import net.minecraft.block.BlockState; import net.minecraft.inventory.CraftingInventory; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.PacketByteBuf; @@ -311,7 +311,7 @@ public class InterfaceBlockEntity extends AENetworkInvBlockEntity } @Override - public ContainerType getContainerType() { + public ScreenHandlerType getContainerType() { return InterfaceContainer.TYPE; } } diff --git a/src/main/java/appeng/tile/misc/SecurityStationBlockEntity.java b/src/main/java/appeng/tile/misc/SecurityStationBlockEntity.java index 45e193247..fc055fe9b 100644 --- a/src/main/java/appeng/tile/misc/SecurityStationBlockEntity.java +++ b/src/main/java/appeng/tile/misc/SecurityStationBlockEntity.java @@ -184,7 +184,7 @@ public class SecurityStationBlockEntity extends AENetworkBlockEntity implements this.getConfigSlot().readFromNBT(data, "config"); final CompoundTag storedItems = data.getCompound("storedItems"); - for (final Object key : storedItems.keySet()) { + for (final Object key : storedItems.getKeys()) { final INBT obj = storedItems.get((String) key); if (obj instanceof CompoundTag) { this.inventory.getStoredItems().add(AEItemStack.fromItemStack(ItemStack.fromTag((CompoundTag) obj))); diff --git a/src/main/java/appeng/tile/misc/VibrationChamberBlockEntity.java b/src/main/java/appeng/tile/misc/VibrationChamberBlockEntity.java index e4ace0161..f0d908c2f 100644 --- a/src/main/java/appeng/tile/misc/VibrationChamberBlockEntity.java +++ b/src/main/java/appeng/tile/misc/VibrationChamberBlockEntity.java @@ -217,9 +217,9 @@ public class VibrationChamberBlockEntity extends AENetworkInvBlockEntity impleme is.decrement(1); if (is.isEmpty()) { - this.inv.setStackInSlot(0, fuelItem.getRecipeRemainder(is)); + this.inv.setInvStack(0, fuelItem.getRecipeRemainder(is)); } else { - this.inv.setStackInSlot(0, is); + this.inv.setInvStack(0, is); } this.saveChanges(); } diff --git a/src/main/java/appeng/tile/networking/ControllerBlockEntity.java b/src/main/java/appeng/tile/networking/ControllerBlockEntity.java index 139515e81..8edb3c29d 100644 --- a/src/main/java/appeng/tile/networking/ControllerBlockEntity.java +++ b/src/main/java/appeng/tile/networking/ControllerBlockEntity.java @@ -183,7 +183,7 @@ public class ControllerBlockEntity extends AENetworkPowerBlockEntity { * @return true if there is a loaded controller */ private boolean checkController(final BlockPos pos) { - if (this.world.getChunkProvider().isChunkLoaded(new ChunkPos(pos.getX() >> 4, pos.getZ() >> 4))) { + if (this.world.getChunkManager().isChunkLoaded(new ChunkPos(pos.getX() >> 4, pos.getZ() >> 4))) { return this.world.getBlockEntity(pos) instanceof ControllerBlockEntity; } diff --git a/src/main/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java b/src/main/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java index 3fdda19dd..ec99ea1ed 100644 --- a/src/main/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java +++ b/src/main/java/appeng/tile/spatial/SpatialIOPortBlockEntity.java @@ -25,6 +25,7 @@ import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.Direction; import net.minecraft.world.World; @@ -115,6 +116,11 @@ public class SpatialIOPortBlockEntity extends AENetworkInvBlockEntity implements @Override public Void call(final World world) throws Exception { + if (!(world instanceof ServerWorld)) { + return null; + } + ServerWorld serverWorld = (ServerWorld) world; + final ItemStack cell = this.inv.getInvStack(0); if (this.isSpatialCell(cell) && this.inv.getInvStack(1).isEmpty()) { final IGrid gi = this.getProxy().getGrid(); @@ -134,12 +140,12 @@ public class SpatialIOPortBlockEntity extends AENetworkInvBlockEntity implements playerId = this.getProxy().getSecurity().getOwner(); } - final TransitionResult tr = sc.doSpatialTransition(cell, this.world, spc.getMin(), spc.getMax(), + final TransitionResult tr = sc.doSpatialTransition(cell, serverWorld, spc.getMin(), spc.getMax(), playerId); if (tr.success) { energy.extractAEPower(req, Actionable.MODULATE, PowerMultiplier.CONFIG); - this.inv.setStackInSlot(0, ItemStack.EMPTY); - this.inv.setStackInSlot(1, cell); + this.inv.setInvStack(0, ItemStack.EMPTY); + this.inv.setInvStack(1, cell); } } } diff --git a/src/main/java/appeng/tile/storage/ChestBlockEntity.java b/src/main/java/appeng/tile/storage/ChestBlockEntity.java index b88e0843e..ed8971f51 100644 --- a/src/main/java/appeng/tile/storage/ChestBlockEntity.java +++ b/src/main/java/appeng/tile/storage/ChestBlockEntity.java @@ -29,7 +29,7 @@ import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; @@ -474,9 +474,9 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity AEItemStack.fromItemStack(this.inputInventory.getInvStack(0)), this.mySrc); if (returns == null) { - this.inputInventory.setStackInSlot(0, ItemStack.EMPTY); + this.inputInventory.setInvStack(0, ItemStack.EMPTY); } else { - this.inputInventory.setStackInSlot(0, returns.createItemStack()); + this.inputInventory.setInvStack(0, returns.createItemStack()); } } } @@ -714,7 +714,7 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity @Nonnull @Override public FluidVolume getFluid() { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } @Override @@ -740,7 +740,7 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity @Nonnull @Override public FluidVolume getFluidInTank(int tank) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } @Override @@ -773,13 +773,13 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity @Nonnull @Override public FluidVolume drain(FluidVolume resource, FluidAction action) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } @Nonnull @Override public FluidVolume drain(int maxDrain, FluidAction action) { - return FluidVolume.EMPTY; + return FluidVolumeUtil.EMPTY; } } @@ -820,7 +820,7 @@ public class ChestBlockEntity extends AENetworkPowerBlockEntity } @Override - public ContainerType getContainerType() { + public ScreenHandlerType getContainerType() { this.updateHandler(); if (this.cellHandler != null) { if (this.cellHandler.getChannel() == AEApi.instance().storage() diff --git a/src/main/java/appeng/tile/storage/DriveBlockEntity.java b/src/main/java/appeng/tile/storage/DriveBlockEntity.java index 0a4ddfceb..d711119fe 100644 --- a/src/main/java/appeng/tile/storage/DriveBlockEntity.java +++ b/src/main/java/appeng/tile/storage/DriveBlockEntity.java @@ -26,13 +26,12 @@ import java.util.IdentityHashMap; import java.util.List; import java.util.Map; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import alexiil.mc.lib.attributes.item.FixedItemInv; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.inventory.container.ContainerType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; @@ -335,7 +334,7 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO double power = 2.0; - for (int x = 0; x < this.inv.getSlots(); x++) { + for (int x = 0; x < this.inv.getSlotCount(); x++) { final ItemStack is = this.inv.getInvStack(x); this.invBySlot[x] = null; this.handlersBySlot[x] = null; @@ -444,7 +443,7 @@ public class DriveBlockEntity extends AENetworkInvBlockEntity implements IChestO } @Override - public ContainerType getContainerType() { + public ScreenHandlerType getContainerType() { return DriveContainer.TYPE; } diff --git a/src/main/java/appeng/tile/storage/IOPortBlockEntity.java b/src/main/java/appeng/tile/storage/IOPortBlockEntity.java index 9706c1f5c..4d076a875 100644 --- a/src/main/java/appeng/tile/storage/IOPortBlockEntity.java +++ b/src/main/java/appeng/tile/storage/IOPortBlockEntity.java @@ -395,7 +395,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.setStackInSlot(x, ItemStack.EMPTY); + this.inputCells.setInvStack(x, ItemStack.EMPTY); return true; } return false; @@ -437,7 +437,7 @@ public class IOPortBlockEntity extends AENetworkInvBlockEntity public void getDrops(final World w, final BlockPos pos, final List drops) { super.getDrops(w, pos, drops); - for (int upgradeIndex = 0; upgradeIndex < this.upgrades.getSlots(); upgradeIndex++) { + for (int upgradeIndex = 0; upgradeIndex < this.upgrades.getSlotCount(); upgradeIndex++) { final ItemStack stackInSlot = this.upgrades.getInvStack(upgradeIndex); if (!stackInSlot.isEmpty()) { diff --git a/src/main/java/appeng/worldgen/ChargedQuartzOreFeature.java b/src/main/java/appeng/worldgen/ChargedQuartzOreFeature.java index 8510b64a2..81c0b74e5 100644 --- a/src/main/java/appeng/worldgen/ChargedQuartzOreFeature.java +++ b/src/main/java/appeng/worldgen/ChargedQuartzOreFeature.java @@ -8,7 +8,7 @@ import com.mojang.datafixers.Dynamic; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.WorldAccess; -import net.minecraft.world.chunk.IChunk; +import net.minecraft.world.chunk.Chunk; import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.GenerationSettings; import net.minecraft.world.gen.Heightmap; @@ -41,7 +41,7 @@ public class ChargedQuartzOreFeature extends Feature { BlockPos.Mutable bpos = new BlockPos.Mutable(); int height = worldIn.getHeight(Heightmap.Type.WORLD_SURFACE_WG, pos.getX(), pos.getZ()); - IChunk chunk = worldIn.getChunk(pos); + Chunk chunk = worldIn.getChunk(pos); for (int y = 0; y < height; y++) { bpos.setY(y); for (int x = chunkPos.getXStart(); x <= chunkPos.getXEnd(); x++) { diff --git a/src/main/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java b/src/main/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java index a7c54cbf6..dd27a7143 100644 --- a/src/main/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java +++ b/src/main/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java @@ -12,7 +12,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.WorldAccess; import net.minecraft.server.world.ServerWorld; -import net.minecraft.world.storage.WorldSavedData; +import net.minecraft.world.PersistentState; import net.minecraftforge.fml.server.ServerLifecycleHooks; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; @@ -144,11 +144,11 @@ public final class MeteoriteSpawnData { serverWorld = server.getWorld(world.getDimension().getType()); } - SavedData savedData = serverWorld.getSavedData().getOrCreate(SavedData::new, NAME); + SavedData savedData = serverWorld.getPersistentStateManager().getOrCreate(SavedData::new, NAME); return new MeteoriteSpawnData(savedData); } - private static class SavedData extends WorldSavedData { + private static class SavedData extends PersistentState { private LongOpenHashSet generated; private CompoundTag spawns; @@ -160,13 +160,13 @@ public final class MeteoriteSpawnData { } @Override - public synchronized void read(CompoundTag nbt) { + public synchronized void fromTag(CompoundTag nbt) { this.generated = new LongOpenHashSet(nbt.getLongArray("generated")); this.spawns = nbt.getCompound("spawns"); } @Override - public synchronized CompoundTag write(CompoundTag compound) { + public synchronized CompoundTag toTag(CompoundTag compound) { compound.putLongArray("generated", generated.toLongArray()); compound.put("spawns", spawns); return compound; diff --git a/src/main/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java b/src/main/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java index 11ce74f8e..76990c742 100644 --- a/src/main/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java +++ b/src/main/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java @@ -90,7 +90,7 @@ public class MeteoriteStructurePiece extends StructurePiece { MeteoritePlacer placer = new MeteoritePlacer(world, settings, bounds); placer.place(); - WorldData.instance().compassData().service().updateArea(world, chunkPos); // FIXME: We know the y-range here... + WorldData.instance().compassData().service().tryUpdateArea(world, chunkPos); // FIXME: We know the y-range here... return true; } }