diff --git a/gradle.properties b/gradle.properties index e5394e1e1..693353618 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ artifact_basename=appliedenergistics2 minecraft_release=1.16 minecraft_version=1.16.1 mcp_mappings=20200707-1.16.1 -forge_version=32.0.71 +forge_version=32.0.75 ######################################################### # Provided APIs # diff --git a/src/api/java/appeng/api/config/Upgrades.java b/src/api/java/appeng/api/config/Upgrades.java index 5f1239a43..4926f5856 100644 --- a/src/api/java/appeng/api/config/Upgrades.java +++ b/src/api/java/appeng/api/config/Upgrades.java @@ -119,7 +119,7 @@ public enum Upgrades { if (namesAdded.add(name)) { // append the supported count only if its > 1 if (supported.maxCount > 1) { - name = name.deepCopy().appendText(" (" + supported.maxCount + ")"); + name = name.deepCopy().func_240702_b_(" (" + supported.maxCount + ")"); } supportedTooltipLines.add(name); } diff --git a/src/api/java/appeng/api/features/IWorldGen.java b/src/api/java/appeng/api/features/IWorldGen.java index d49bacefc..8d956bdb2 100644 --- a/src/api/java/appeng/api/features/IWorldGen.java +++ b/src/api/java/appeng/api/features/IWorldGen.java @@ -26,16 +26,15 @@ package appeng.api.features; import net.minecraft.util.ResourceLocation; import net.minecraft.world.Dimension; import net.minecraft.world.IWorld; +import net.minecraft.world.server.ServerWorld; public interface IWorldGen { - void disableWorldGenForProviderID(WorldGenType type, Class provider); - void enableWorldGenForDimension(WorldGenType type, ResourceLocation dimID); void disableWorldGenForDimension(WorldGenType type, ResourceLocation dimID); - boolean isWorldGenEnabled(WorldGenType type, IWorld w); + boolean isWorldGenEnabled(WorldGenType type, ServerWorld w); enum WorldGenType { CERTUS_QUARTZ, CHARGED_CERTUS_QUARTZ, METEORITES diff --git a/src/api/java/appeng/api/implementations/items/ISpatialStorageCell.java b/src/api/java/appeng/api/implementations/items/ISpatialStorageCell.java index 3db725057..37f04571b 100644 --- a/src/api/java/appeng/api/implementations/items/ISpatialStorageCell.java +++ b/src/api/java/appeng/api/implementations/items/ISpatialStorageCell.java @@ -25,11 +25,13 @@ package appeng.api.implementations.items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.RegistryKey; import net.minecraft.world.DimensionType; import net.minecraft.world.World; import appeng.api.implementations.TransitionResult; import appeng.api.util.WorldCoord; +import net.minecraft.world.server.ServerWorld; /** * Implemented on a {@link Item} @@ -57,7 +59,7 @@ public interface ISpatialStorageCell { * * @return dimension id or -1 */ - DimensionType getStoredDimension(ItemStack is); + RegistryKey getStoredDimension(ItemStack is); /** * Perform a spatial swap with the contents of the cell, and the world. @@ -70,5 +72,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/src/api/java/appeng/api/storage/ISpatialDimension.java b/src/api/java/appeng/api/storage/ISpatialDimension.java index c001e4f4b..129f48d36 100644 --- a/src/api/java/appeng/api/storage/ISpatialDimension.java +++ b/src/api/java/appeng/api/storage/ISpatialDimension.java @@ -22,29 +22,31 @@ import java.util.List; import javax.annotation.Nullable; +import net.minecraft.util.RegistryKey; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraft.world.DimensionType; +import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; public interface ISpatialDimension { - ServerWorld getWorld(DimensionType cellDim); + ServerWorld getWorld(RegistryKey cellDim); @Nullable - DimensionType createNewCellDimension(BlockPos capacity); + RegistryKey createNewCellDimension(BlockPos capacity); - void deleteCellDimension(DimensionType cellDim); + void deleteCellDimension(RegistryKey cellDim); - boolean isCellDimension(DimensionType cellDim); + boolean isCellDimension(RegistryKey cellDim); - BlockPos getCellDimensionOrigin(DimensionType cellDim); + BlockPos getCellDimensionOrigin(RegistryKey cellDim); - BlockPos getCellDimensionSize(DimensionType cellDim); + BlockPos getCellDimensionSize(RegistryKey cellDim); /** * Adds a user-facing tooltip that describes this dimension so that a player can * keep storage cells apart. */ - void addCellDimensionTooltip(DimensionType cellDim, List lines); + void addCellDimensionTooltip(RegistryKey cellDim, List lines); } diff --git a/src/main/java/appeng/block/AEBaseBlockItemChargeable.java b/src/main/java/appeng/block/AEBaseBlockItemChargeable.java index 6070ebf3c..22c53c1bc 100644 --- a/src/main/java/appeng/block/AEBaseBlockItemChargeable.java +++ b/src/main/java/appeng/block/AEBaseBlockItemChargeable.java @@ -23,8 +23,10 @@ import java.util.List; import net.minecraft.block.Block; import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemModelsProperties; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; @@ -44,12 +46,12 @@ public class AEBaseBlockItemChargeable extends AEBaseBlockItem implements IAEIte public AEBaseBlockItemChargeable(Block id, Properties props) { super(id, props); - /*addPropertyOverride(new ResourceLocation("appliedenergistics2:fill_level"), (is, world, entity) -> { + ItemModelsProperties.func_239418_a_(this, new ResourceLocation("appliedenergistics2:fill_level"), (is, world, entity) -> { double curPower = getAECurrentPower(is); double maxPower = getAEMaxPower(is); return (int) Math.round(100 * curPower / maxPower); - });*/ + }); } @Override @@ -67,7 +69,7 @@ public class AEBaseBlockItemChargeable extends AEBaseBlockItem implements IAEIte final double percent = internalCurrentPower / internalMaxPower; - lines.add(GuiText.StoredEnergy.textComponent().deepCopy() + lines.add(GuiText.StoredEnergy.text().deepCopy() .func_240702_b_(':' + MessageFormat.format(" {0,number,#} ", internalCurrentPower)) .func_230529_a_(new TranslationTextComponent(PowerUnits.AE.unlocalizedName)) .func_240702_b_(" - " + MessageFormat.format("{0,number,#.##%}", percent))); diff --git a/src/main/java/appeng/block/AEBaseTileBlock.java b/src/main/java/appeng/block/AEBaseTileBlock.java index 76470f67a..98f80a651 100644 --- a/src/main/java/appeng/block/AEBaseTileBlock.java +++ b/src/main/java/appeng/block/AEBaseTileBlock.java @@ -144,26 +144,6 @@ public abstract class AEBaseTileBlock extends AEBase super.onReplaced(state, w, pos, newState, isMoving); } - @Override - public boolean recolorBlock(BlockState state, final IWorld world, final BlockPos pos, final Direction side, - final DyeColor color) { - final TileEntity te = this.getTileEntity(world, pos); - - if (te instanceof IColorableTile) { - final IColorableTile ct = (IColorableTile) te; - final AEColor c = ct.getColor(); - final AEColor newColor = AEColor.values()[color.ordinal()]; - - if (c != newColor) { - ct.recolourBlock(side, newColor, null); - return true; - } - return false; - } - - return super.recolorBlock(state, world, pos, side, color); - } - @Override public int getComparatorInputOverride(BlockState state, final World w, final BlockPos pos) { final TileEntity te = this.getTileEntity(w, pos); diff --git a/src/main/java/appeng/block/misc/TinyTNTBlock.java b/src/main/java/appeng/block/misc/TinyTNTBlock.java index 5f719ea39..9958d3a52 100644 --- a/src/main/java/appeng/block/misc/TinyTNTBlock.java +++ b/src/main/java/appeng/block/misc/TinyTNTBlock.java @@ -118,12 +118,10 @@ public class TinyTNTBlock extends AEBaseBlock { LivingEntity igniter = null; // Check if the shooter still exists if (w instanceof ServerWorld) { - ServerWorld serverWorld = (ServerWorld) w; - Entity shooter = serverWorld.getEntityByUuid(entityarrow.shootingEntity); + Entity shooter = entityarrow.func_234616_v_(); if (shooter instanceof LivingEntity) { igniter = (LivingEntity) shooter; } - } this.startFuse(w, pos, igniter); w.removeBlock(pos, false); diff --git a/src/main/java/appeng/block/networking/CableBusBlock.java b/src/main/java/appeng/block/networking/CableBusBlock.java index 2affc7c56..730e9ca31 100644 --- a/src/main/java/appeng/block/networking/CableBusBlock.java +++ b/src/main/java/appeng/block/networking/CableBusBlock.java @@ -30,6 +30,7 @@ import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.ParticleManager; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; @@ -223,7 +224,7 @@ public class CableBusBlock extends AEBaseTileBlock implement // FIXME: Check how this looks, probably like shit, maybe provide parts the // ability to supply particle textures??? effectRenderer - .addEffect(new CableBusBreakingParticle(world, x, y, z, texture).multipleParticleScaleBy(0.8F)); + .addEffect(new CableBusBreakingParticle((ClientWorld) world, x, y, z, texture).multipleParticleScaleBy(0.8F)); } return true; @@ -264,7 +265,7 @@ public class CableBusBlock extends AEBaseTileBlock implement // FIXME: Check how this looks, probably like shit, maybe provide parts the // ability to supply particle textures??? - Particle effect = new CableBusBreakingParticle(world, x, y, z, x - pos.getX() - 0.5D, + Particle effect = new CableBusBreakingParticle((ClientWorld) world, x, y, z, x - pos.getX() - 0.5D, y - pos.getY() - 0.5D, z - pos.getZ() - 0.5D, texture); effectRenderer.addEffect(effect); } @@ -337,11 +338,6 @@ public class CableBusBlock extends AEBaseTileBlock implement return this.cb(w, pos).activate(player, hand, hitInBlock) ? ActionResultType.SUCCESS : ActionResultType.PASS; } - @Override - public boolean recolorBlock(BlockState state, IWorld world, BlockPos pos, Direction side, DyeColor color) { - return recolorBlock(world, pos, side, color, null); - } - public boolean recolorBlock(final IBlockReader world, final BlockPos pos, final Direction side, final DyeColor color, final PlayerEntity who) { try { diff --git a/src/main/java/appeng/block/storage/ChestBlock.java b/src/main/java/appeng/block/storage/ChestBlock.java index a95f9345f..fcc0c605a 100644 --- a/src/main/java/appeng/block/storage/ChestBlock.java +++ b/src/main/java/appeng/block/storage/ChestBlock.java @@ -29,6 +29,7 @@ import net.minecraft.state.BooleanProperty; import net.minecraft.state.StateContainer; import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; +import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.World; @@ -81,7 +82,7 @@ public class ChestBlock extends AEBaseTileBlock { if (hit.getFace() == tg.getUp()) { if (!tg.openGui(p)) { - p.sendMessage(PlayerMessages.ChestCannotReadStorageCell.get(), p.getUniqueID()); + p.sendMessage(PlayerMessages.ChestCannotReadStorageCell.get(), Util.DUMMY_UUID); } } else { ContainerOpener.openContainer(ChestContainer.TYPE, p, diff --git a/src/main/java/appeng/client/ClientHelper.java b/src/main/java/appeng/client/ClientHelper.java index d2a58b5d7..6e4124b92 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.Minecraft; import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.util.InputMappings; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Hand; @@ -207,7 +208,7 @@ public class ClientHelper extends ServerHelper { private void spawnLightningArc(final World world, final double posX, final double posY, final double posZ, final Vector3d second) { - final LightningFX fx = new LightningArcFX(world, posX, posY, posZ, second.x, second.y, second.z, 0.0f, 0.0f, + final LightningFX fx = new LightningArcFX((ClientWorld) world, posX, posY, posZ, second.x, second.y, second.z, 0.0f, 0.0f, 0.0f); Minecraft.getInstance().particles.addEffect(fx); } diff --git a/src/main/java/appeng/client/gui/AEBaseMEScreen.java b/src/main/java/appeng/client/gui/AEBaseMEScreen.java index 8ff46836c..c4389c6c8 100644 --- a/src/main/java/appeng/client/gui/AEBaseMEScreen.java +++ b/src/main/java/appeng/client/gui/AEBaseMEScreen.java @@ -61,31 +61,23 @@ public abstract class AEBaseMEScreen extends AEBaseSc if (myStack != null) { if (myStack.getStackSize() > bigNumber || (myStack.getStackSize() > 1 && stack.isDamaged())) { - final String local = ButtonToolTips.ItemsStored.getLocal(); final String formattedAmount = NumberFormat.getNumberInstance(Locale.US) .format(myStack.getStackSize()); - final String format = String.format(local, formattedAmount); - - currentToolTip.add(new StringTextComponent(TextFormatting.GRAY + format)); + currentToolTip.add(ButtonToolTips.ItemsStored.text(formattedAmount).func_240699_a_(TextFormatting.GRAY)); } if (myStack.getCountRequestable() > 0) { - final String local = ButtonToolTips.ItemsRequestable.getLocal(); final String formattedAmount = NumberFormat.getNumberInstance(Locale.US) .format(myStack.getCountRequestable()); - final String format = String.format(local, formattedAmount); - - currentToolTip.add(new StringTextComponent(format)); + currentToolTip.add(ButtonToolTips.ItemsRequestable.text(formattedAmount)); } + this.renderToolTip(matrixStack, currentToolTip, x, y, this.font); return; } else if (stack.getCount() > bigNumber) { - final String local = ButtonToolTips.ItemsStored.getLocal(); final String formattedAmount = NumberFormat.getNumberInstance(Locale.US).format(stack.getCount()); - final String format = String.format(local, formattedAmount); - - currentToolTip.add(new StringTextComponent(TextFormatting.GRAY + format)); + currentToolTip.add(ButtonToolTips.ItemsStored.text(formattedAmount).func_240699_a_(TextFormatting.GRAY)); this.renderToolTip(matrixStack, currentToolTip, x, y, this.font); diff --git a/src/main/java/appeng/client/gui/AEBaseScreen.java b/src/main/java/appeng/client/gui/AEBaseScreen.java index ac04cf754..e75d180ac 100644 --- a/src/main/java/appeng/client/gui/AEBaseScreen.java +++ b/src/main/java/appeng/client/gui/AEBaseScreen.java @@ -24,6 +24,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; @@ -31,6 +32,7 @@ import com.google.common.collect.Lists; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.util.text.Style; import org.lwjgl.glfw.GLFW; import org.lwjgl.opengl.GL11; @@ -145,7 +147,7 @@ public abstract class AEBaseScreen extends ContainerS RenderSystem.popMatrix(); RenderSystem.enableDepthTest(); - this.renderHoveredToolTip(matrixStack, mouseX, mouseY); + this.func_230459_a_(matrixStack, mouseX, mouseY); for (final Object c : this.buttons) { if (c instanceof ITooltip) { @@ -189,33 +191,35 @@ public abstract class AEBaseScreen extends ContainerS } } - protected void drawTooltip(MatrixStack matrixStack, int x, int y, ITextComponent message) { - String[] lines = message.split("\n"); - this.drawTooltip(matrixStack, x, y, Arrays.asList(lines)); + protected void drawTooltip(MatrixStack matrices, int x, int y, ITextComponent message) { + String[] lines = message.getString().split("\n"); // FIXME FABRIC + List textLines = Arrays.stream(lines).map(StringTextComponent::new).collect(Collectors.toList()); + this.drawTooltip(matrices, x, y, textLines); } - protected void drawTooltip(MatrixStack matrixStack, int x, int y, List lines) { + // FIXME FABRIC: move out to json (?) + private static final Style TOOLTIP_HEADER = Style.EMPTY.applyFormatting(TextFormatting.WHITE); + private static final Style TOOLTIP_BODY = Style.EMPTY.applyFormatting(TextFormatting.GRAY); + + protected void drawTooltip(MatrixStack matrices, int x, int y, List lines) { if (lines.isEmpty()) { return; } - // For an explanation of the formatting codes, see - // http://minecraft.gamepedia.com/Formatting_codes - lines = Lists.newArrayList(lines); // Make a copy - // Make the first line white - lines.set(0, TextFormatting.WHITE + lines.get(0)); - // All lines after the first are colored gray - for (int i = 1; i < lines.size(); i++) { - lines.set(i, TextFormatting.GRAY + lines.get(i)); + List styledLines = new ArrayList<>(lines.size()); + for (int i = 0; i < lines.size(); i++) { + Style style = (i == 0) ? TOOLTIP_HEADER : TOOLTIP_BODY; + styledLines.add(lines.get(i).deepCopy().func_240700_a_(s -> style)); } - this.renderTooltip(matrixStack, lines, x, y, this.font); + this.renderTooltip(matrices, styledLines, x, y); + } @Override - protected final void drawGuiContainerForegroundLayer(MatrixStack matrixStack, final int x, final int y) { + protected final void func_230451_b_(MatrixStack matrixStack, final int x, final int y) { final int ox = this.guiLeft; // (width - xSize) / 2; final int oy = this.guiTop; // (height - ySize) / 2; RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); @@ -230,7 +234,7 @@ public abstract class AEBaseScreen extends ContainerS public abstract void drawFG(MatrixStack matrixStack, int offsetX, int offsetY, int mouseX, int mouseY); @Override - protected final void drawGuiContainerBackgroundLayer(MatrixStack matrixStack, final float f, final int x, + protected final void func_230450_a_(MatrixStack matrixStack, final float f, final int x, final int y) { final int ox = this.guiLeft; // (width - xSize) / 2; final int oy = this.guiTop; // (height - ySize) / 2; @@ -627,16 +631,16 @@ public abstract class AEBaseScreen extends ContainerS * hackery... */ @Override - public void drawSlot(MatrixStack matrixStack, Slot s) { + public void func_238746_a_(MatrixStack matrices, Slot s) { if (s instanceof SlotME) { try { if (!this.isPowered()) { - fill(matrixStack, s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66111111); + fill(matrices, s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66111111); } // Annoying but easier than trying to splice into render item - super.drawSlot(new Size1Slot((SlotME) s)); + super.func_238746_a_(matrices, new Size1Slot((SlotME) s)); this.stackSizeRenderer.renderStackSize(this.font, ((SlotME) s).getAEStack(), s.xPos, s.yPos); @@ -665,13 +669,13 @@ public abstract class AEBaseScreen extends ContainerS float blue = (fluidAttributes.getColor() & 255) / 255.0F; RenderSystem.color3f(red, green, blue); - blit(matrixStack, s.xPos, s.yPos, 0 /* FIXME: Validate this was previous the controls zindex */, 16, 16, + blit(matrices, s.xPos, s.yPos, 0 /* FIXME: Validate this was previous the controls zindex */, 16, 16, sprite); RenderSystem.enableBlend(); this.fluidStackSizeRenderer.renderStackSize(this.font, fs, s.xPos, s.yPos); } else if (!this.isPowered()) { - fill(matrixStack, s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66111111); + fill(matrices, s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66111111); } return; @@ -743,7 +747,7 @@ public abstract class AEBaseScreen extends ContainerS setBlitOffset(100); this.itemRenderer.zLevel = 100.0F; - fill(matrixStack, s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66ff6666); + fill(matrices, s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66ff6666); setBlitOffset(0); this.itemRenderer.zLevel = 0.0F; @@ -752,9 +756,9 @@ public abstract class AEBaseScreen extends ContainerS if (s instanceof AppEngSlot) { ((AppEngSlot) s).setDisplay(true); - super.drawSlot(s); + super.func_238746_a_(matrices, s); } else { - super.drawSlot(s); + super.func_238746_a_(matrices, s); } return; @@ -763,7 +767,7 @@ public abstract class AEBaseScreen extends ContainerS } } // do the usual for non-ME Slots. - super.drawSlot(s); + super.func_238746_a_(matrices, s); } protected boolean isPowered() { @@ -800,10 +804,4 @@ public abstract class AEBaseScreen extends ContainerS } } - @Override - protected void func_230450_a_(MatrixStack p_230450_1_, float p_230450_2_, int p_230450_3_, int p_230450_4_) { - // TODO Auto-generated method stub - - } - } diff --git a/src/main/java/appeng/client/gui/implementations/ChestScreen.java b/src/main/java/appeng/client/gui/implementations/ChestScreen.java index 8a723be86..f778275ee 100644 --- a/src/main/java/appeng/client/gui/implementations/ChestScreen.java +++ b/src/main/java/appeng/client/gui/implementations/ChestScreen.java @@ -43,7 +43,7 @@ public class ChestScreen extends AEBaseScreen { public void init() { super.init(); - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.textComponent(), + this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.text(), this.itemRenderer, btn -> openPriority())); } @@ -53,8 +53,8 @@ public class ChestScreen extends AEBaseScreen { @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Chest.textComponent()).getString(), 8, 6, 4210752); - this.font.drawString(matrixStack, GuiText.inventory.textComponent().getString(), 8, this.ySize - 96 + 3, 4210752); + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Chest.text()).getString(), 8, 6, 4210752); + this.font.drawString(matrixStack, GuiText.inventory.text().getString(), 8, this.ySize - 96 + 3, 4210752); } @Override diff --git a/src/main/java/appeng/client/gui/implementations/CondenserScreen.java b/src/main/java/appeng/client/gui/implementations/CondenserScreen.java index 7d2f52b6f..8216c4911 100644 --- a/src/main/java/appeng/client/gui/implementations/CondenserScreen.java +++ b/src/main/java/appeng/client/gui/implementations/CondenserScreen.java @@ -51,14 +51,14 @@ public class CondenserScreen extends AEBaseScreen { this.container.getOutput()); this.addButton(new ProgressBar(this.container, "guis/condenser.png", 120 + this.guiLeft, 25 + this.guiTop, 178, - 25, 6, 18, Direction.VERTICAL, GuiText.StoredEnergy.textComponent())); + 25, 6, 18, Direction.VERTICAL, GuiText.StoredEnergy.text())); this.addButton(this.mode); } @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Condenser.textComponent()).getString(), 8, 6, 4210752); - this.font.drawString(matrixStack, GuiText.inventory.textComponent().getString(), 8, this.ySize - 96 + 3, 4210752); + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Condenser.text()).getString(), 8, 6, 4210752); + this.font.drawString(matrixStack, GuiText.inventory.text().getString(), 8, this.ySize - 96 + 3, 4210752); this.mode.set(this.container.getOutput()); this.mode.setFillVar(String.valueOf(this.container.getOutput().requiredPower)); diff --git a/src/main/java/appeng/client/gui/implementations/CraftAmountScreen.java b/src/main/java/appeng/client/gui/implementations/CraftAmountScreen.java index ba9708d3e..cb4cb8a75 100644 --- a/src/main/java/appeng/client/gui/implementations/CraftAmountScreen.java +++ b/src/main/java/appeng/client/gui/implementations/CraftAmountScreen.java @@ -56,7 +56,7 @@ public class CraftAmountScreen extends AEBaseScreen { this.amountToCraft.addButtons(children::add, this::addButton); this.next = this.addButton( - new Button(this.guiLeft + 128, this.guiTop + 51, 38, 20, GuiText.Next.textComponent(), this::confirm)); + new Button(this.guiLeft + 128, this.guiTop + 51, 38, 20, GuiText.Next.text(), this::confirm)); subGui.addBackButton(this::addButton, 154, 0); } @@ -68,12 +68,12 @@ public class CraftAmountScreen extends AEBaseScreen { @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, GuiText.SelectAmount.textComponent().getString(), 8, 6, 4210752); + this.font.drawString(matrixStack, GuiText.SelectAmount.text().getString(), 8, 6, 4210752); } @Override public void drawBG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { - this.next.setMessage(hasShiftDown() ? GuiText.Start.textComponent() : GuiText.Next.textComponent()); + this.next.setMessage(hasShiftDown() ? GuiText.Start.text() : GuiText.Next.text()); this.bindTexture("guis/craft_amt.png"); GuiUtils.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset()); diff --git a/src/main/java/appeng/client/gui/implementations/CraftConfirmScreen.java b/src/main/java/appeng/client/gui/implementations/CraftConfirmScreen.java index b9f26b27d..423e50533 100644 --- a/src/main/java/appeng/client/gui/implementations/CraftConfirmScreen.java +++ b/src/main/java/appeng/client/gui/implementations/CraftConfirmScreen.java @@ -85,7 +85,7 @@ public class CraftConfirmScreen extends AEBaseScreen { super.init(); this.start = new Button(this.guiLeft + 162, this.guiTop + this.ySize - 25, 50, 20, - GuiText.Start.textComponent(), btn -> start()); + GuiText.Start.text(), btn -> start()); this.start.active = false; this.addButton(this.start); @@ -95,7 +95,7 @@ public class CraftConfirmScreen extends AEBaseScreen { this.selectCPU.active = false; this.addButton(this.selectCPU); - addButton(new Button(this.guiLeft + 6, this.guiTop + this.ySize - 25, 50, 20, GuiText.Cancel.textComponent(), + addButton(new Button(this.guiLeft + 6, this.guiTop + this.ySize - 25, 50, 20, GuiText.Cancel.text(), btn -> subGui.goBack())); } @@ -255,7 +255,7 @@ public class CraftConfirmScreen extends AEBaseScreen { str = Long.toString(missingStack.getStackSize() / 1000000) + 'm'; } - str = GuiText.Missing.textComponent().getString() + ": " + str; + str = GuiText.Missing.text().getString() + ": " + str; final int w = 4 + this.font.getStringWidth(str); this.font.drawString(matrixStack, str, (int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2), diff --git a/src/main/java/appeng/client/gui/implementations/CraftingCPUScreen.java b/src/main/java/appeng/client/gui/implementations/CraftingCPUScreen.java index 0a09136a9..989a21051 100644 --- a/src/main/java/appeng/client/gui/implementations/CraftingCPUScreen.java +++ b/src/main/java/appeng/client/gui/implementations/CraftingCPUScreen.java @@ -117,7 +117,7 @@ public class CraftingCPUScreen extends AEBaseScr super.init(); this.setScrollBar(); this.cancel = new Button(this.guiLeft + CANCEL_LEFT_OFFSET, this.guiTop + this.ySize - CANCEL_TOP_OFFSET, - CANCEL_WIDTH, CANCEL_HEIGHT, GuiText.Cancel.textComponent(), btn -> cancel()); + CANCEL_WIDTH, CANCEL_HEIGHT, GuiText.Cancel.text(), btn -> cancel()); this.addButton(this.cancel); } @@ -165,7 +165,7 @@ public class CraftingCPUScreen extends AEBaseScr @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - String title = this.getGuiDisplayName(GuiText.CraftingStatus.textComponent()).getString(); + String title = this.getGuiDisplayName(GuiText.CraftingStatus.text()).getString(); if (this.container.getEstimatedTime() > 0 && !this.visual.isEmpty()) { final long etaInMilliseconds = TimeUnit.MILLISECONDS.convert(this.container.getEstimatedTime(), diff --git a/src/main/java/appeng/client/gui/implementations/DriveScreen.java b/src/main/java/appeng/client/gui/implementations/DriveScreen.java index 8b244741d..cfb351670 100644 --- a/src/main/java/appeng/client/gui/implementations/DriveScreen.java +++ b/src/main/java/appeng/client/gui/implementations/DriveScreen.java @@ -43,7 +43,7 @@ public class DriveScreen extends AEBaseScreen { public void init() { super.init(); - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.textComponent(), + this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.text(), this.itemRenderer, btn -> openPriorityGui())); } @@ -54,9 +54,9 @@ public class DriveScreen extends AEBaseScreen { @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Drive.textComponent()).getString(), 8, 6, + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Drive.text()).getString(), 8, 6, 4210752); - this.font.drawString(matrixStack, GuiText.inventory.textComponent().getString(), 8, this.ySize - 96 + 3, + this.font.drawString(matrixStack, GuiText.inventory.text().getString(), 8, this.ySize - 96 + 3, 4210752); } diff --git a/src/main/java/appeng/client/gui/implementations/FormationPlaneScreen.java b/src/main/java/appeng/client/gui/implementations/FormationPlaneScreen.java index 1aa0d90fc..ca67db830 100644 --- a/src/main/java/appeng/client/gui/implementations/FormationPlaneScreen.java +++ b/src/main/java/appeng/client/gui/implementations/FormationPlaneScreen.java @@ -52,7 +52,7 @@ public class FormationPlaneScreen extends UpgradeableScreen(this.guiLeft - 18, this.guiTop + 48, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL); - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.textComponent(), + this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.text(), this.itemRenderer, btn -> openPriorityGui())); this.addButton(this.placeMode); @@ -61,7 +61,7 @@ public class FormationPlaneScreen extends UpgradeableScreen { @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.GrindStone.textComponent()).getString(), 8, 6, 4210752); - this.font.drawString(matrixStack, GuiText.inventory.textComponent().getString(), 8, this.ySize - 96 + 3, 4210752); + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.GrindStone.text()).getString(), 8, 6, 4210752); + this.font.drawString(matrixStack, GuiText.inventory.text().getString(), 8, this.ySize - 96 + 3, 4210752); } @Override diff --git a/src/main/java/appeng/client/gui/implementations/IOPortScreen.java b/src/main/java/appeng/client/gui/implementations/IOPortScreen.java index 359ac092e..e8174527e 100644 --- a/src/main/java/appeng/client/gui/implementations/IOPortScreen.java +++ b/src/main/java/appeng/client/gui/implementations/IOPortScreen.java @@ -61,7 +61,7 @@ public class IOPortScreen extends UpgradeableScreen { @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.IOPort.textComponent()).getString(), 8, 6, + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.IOPort.text()).getString(), 8, 6, 4210752); this.font.drawString(matrixStack, GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); diff --git a/src/main/java/appeng/client/gui/implementations/InscriberScreen.java b/src/main/java/appeng/client/gui/implementations/InscriberScreen.java index b03a8c692..87d9fc3ed 100644 --- a/src/main/java/appeng/client/gui/implementations/InscriberScreen.java +++ b/src/main/java/appeng/client/gui/implementations/InscriberScreen.java @@ -59,8 +59,8 @@ public class InscriberScreen extends AEBaseScreen { this.pb.setFullMsg(new StringTextComponent( this.container.getCurrentProgress() * 100 / this.container.getMaxProgress() + "%")); - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Inscriber.textComponent()).getString(), 8, 6, 4210752); - this.font.drawString(matrixStack, GuiText.inventory.textComponent().getString(), 8, this.ySize - 96 + 3, 4210752); + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Inscriber.text()).getString(), 8, 6, 4210752); + this.font.drawString(matrixStack, GuiText.inventory.text().getString(), 8, this.ySize - 96 + 3, 4210752); } @Override diff --git a/src/main/java/appeng/client/gui/implementations/InterfaceScreen.java b/src/main/java/appeng/client/gui/implementations/InterfaceScreen.java index 76ec12c6a..a7284d056 100644 --- a/src/main/java/appeng/client/gui/implementations/InterfaceScreen.java +++ b/src/main/java/appeng/client/gui/implementations/InterfaceScreen.java @@ -48,7 +48,7 @@ public class InterfaceScreen extends UpgradeableScreen { @Override protected void addButtons() { - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.textComponent(), + this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.text(), this.itemRenderer, btn -> openPriorityGui())); this.blockMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 8, Settings.BLOCK, YesNo.NO); @@ -70,7 +70,7 @@ public class InterfaceScreen extends UpgradeableScreen { this.interfaceMode.setState(((InterfaceContainer) this.cvb).getInterfaceTerminalMode() == YesNo.YES); } - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Interface.textComponent()).getString(), 8, 6, 4210752); + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Interface.text()).getString(), 8, 6, 4210752); this.font.drawString(matrixStack, GuiText.Config.getLocal(), 8, 6 + 11 + 7, 4210752); this.font.drawString(matrixStack, GuiText.StoredItems.getLocal(), 8, 6 + 60 + 7, 4210752); diff --git a/src/main/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java b/src/main/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java index eef40b6c0..7dbca6054 100644 --- a/src/main/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java +++ b/src/main/java/appeng/client/gui/implementations/InterfaceTerminalScreen.java @@ -95,8 +95,8 @@ public class InterfaceTerminalScreen extends AEBaseScreen extends AEBas if (this.viewCell || this instanceof WirelessTermScreen) { this.craftingStatusBtn = this.addButton(new TabButton(this.guiLeft + 170, this.guiTop - 4, 2 + 11 * 16, - GuiText.CraftingStatus.textComponent(), this.itemRenderer, btn -> showCraftingStatus())); + GuiText.CraftingStatus.text(), this.itemRenderer, btn -> showCraftingStatus())); this.craftingStatusBtn.setHideEdge(13); } @@ -287,8 +287,8 @@ public class MEMonitorableScreen extends AEBas @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(this.myName.textComponent()).getString(), 8, 6, 4210752); - this.font.drawString(matrixStack, GuiText.inventory.textComponent().getString(), 8, this.ySize - 96 + 3, 4210752); + this.font.drawString(matrixStack, this.getGuiDisplayName(this.myName.text()).getString(), 8, 6, 4210752); + this.font.drawString(matrixStack, GuiText.inventory.text().getString(), 8, this.ySize - 96 + 3, 4210752); this.currentMouseX = mouseX; this.currentMouseY = mouseY; diff --git a/src/main/java/appeng/client/gui/implementations/NetworkStatusScreen.java b/src/main/java/appeng/client/gui/implementations/NetworkStatusScreen.java index a401cc866..7a13f743f 100644 --- a/src/main/java/appeng/client/gui/implementations/NetworkStatusScreen.java +++ b/src/main/java/appeng/client/gui/implementations/NetworkStatusScreen.java @@ -224,9 +224,9 @@ public class NetworkStatusScreen extends AEBaseScreen im currentToolTip.remove(1); } - currentToolTip.add(GuiText.Installed.getLocal() + ": " + (myStack.getStackSize())); - currentToolTip.add(GuiText.EnergyDrain.getLocal() + ": " - + Platform.formatPowerLong(myStack.getCountRequestable(), true)); + currentToolTip.add(GuiText.Installed.withSuffix(": " + (myStack.getStackSize()))); + currentToolTip.add(GuiText.EnergyDrain.withSuffix(": " + + Platform.formatPowerLong(myStack.getCountRequestable(), true))); this.drawTooltip(matrixStack, x, y, currentToolTip); } diff --git a/src/main/java/appeng/client/gui/implementations/NetworkToolScreen.java b/src/main/java/appeng/client/gui/implementations/NetworkToolScreen.java index 6e286b3f0..49c10a751 100644 --- a/src/main/java/appeng/client/gui/implementations/NetworkToolScreen.java +++ b/src/main/java/appeng/client/gui/implementations/NetworkToolScreen.java @@ -62,7 +62,7 @@ public class NetworkToolScreen extends AEBaseScreen { this.tFacades.setState(container.isFacadeMode()); } - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.NetworkTool.textComponent()).getString(), 8, 6, + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.NetworkTool.text()).getString(), 8, 6, 4210752); this.font.drawString(matrixStack, GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); } diff --git a/src/main/java/appeng/client/gui/implementations/PatternTermScreen.java b/src/main/java/appeng/client/gui/implementations/PatternTermScreen.java index c4990b33c..097a8f605 100644 --- a/src/main/java/appeng/client/gui/implementations/PatternTermScreen.java +++ b/src/main/java/appeng/client/gui/implementations/PatternTermScreen.java @@ -60,12 +60,12 @@ public class PatternTermScreen extends MEMonitorableScreen super.init(); this.tabCraftButton = new TabButton(this.guiLeft + 173, this.guiTop + this.ySize - 177, - new ItemStack(Blocks.CRAFTING_TABLE), GuiText.CraftingPattern.textComponent(), this.itemRenderer, + new ItemStack(Blocks.CRAFTING_TABLE), GuiText.CraftingPattern.text(), this.itemRenderer, btn -> toggleCraftMode(CRAFTMODE_PROCESSING)); this.addButton(this.tabCraftButton); this.tabProcessButton = new TabButton(this.guiLeft + 173, this.guiTop + this.ySize - 177, - new ItemStack(Blocks.FURNACE), GuiText.ProcessingPattern.textComponent(), this.itemRenderer, + new ItemStack(Blocks.FURNACE), GuiText.ProcessingPattern.text(), this.itemRenderer, btn -> toggleCraftMode(CRAFTMODE_CRFTING)); this.addButton(this.tabProcessButton); diff --git a/src/main/java/appeng/client/gui/implementations/QNBScreen.java b/src/main/java/appeng/client/gui/implementations/QNBScreen.java index 82403678b..f072cccad 100644 --- a/src/main/java/appeng/client/gui/implementations/QNBScreen.java +++ b/src/main/java/appeng/client/gui/implementations/QNBScreen.java @@ -39,7 +39,7 @@ public class QNBScreen extends AEBaseScreen { public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { this.font.drawString(matrixStack, - this.getGuiDisplayName(GuiText.QuantumLinkChamber.textComponent()).getString(), 8, 6, 4210752); + this.getGuiDisplayName(GuiText.QuantumLinkChamber.text()).getString(), 8, 6, 4210752); this.font.drawString(matrixStack, GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); } diff --git a/src/main/java/appeng/client/gui/implementations/QuartzKnifeScreen.java b/src/main/java/appeng/client/gui/implementations/QuartzKnifeScreen.java index a461761cc..7fb23ca29 100644 --- a/src/main/java/appeng/client/gui/implementations/QuartzKnifeScreen.java +++ b/src/main/java/appeng/client/gui/implementations/QuartzKnifeScreen.java @@ -63,7 +63,7 @@ public class QuartzKnifeScreen extends AEBaseScreen { public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { this.font.drawString(matrixStack, - this.getGuiDisplayName(GuiText.QuartzCuttingKnife.textComponent()).getString(), 8, 6, 4210752); + this.getGuiDisplayName(GuiText.QuartzCuttingKnife.text()).getString(), 8, 6, 4210752); this.font.drawString(matrixStack, GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); } diff --git a/src/main/java/appeng/client/gui/implementations/SkyChestScreen.java b/src/main/java/appeng/client/gui/implementations/SkyChestScreen.java index d3d6e3283..68c4a6e28 100644 --- a/src/main/java/appeng/client/gui/implementations/SkyChestScreen.java +++ b/src/main/java/appeng/client/gui/implementations/SkyChestScreen.java @@ -42,7 +42,7 @@ public class SkyChestScreen extends AEBaseScreen { @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.SkyChest.textComponent()).getString(), 8, 8, + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.SkyChest.text()).getString(), 8, 8, 4210752); this.font.drawString(matrixStack, GuiText.inventory.getLocal(), 8, this.ySize - 96 + 2, 4210752); } diff --git a/src/main/java/appeng/client/gui/implementations/SpatialIOPortScreen.java b/src/main/java/appeng/client/gui/implementations/SpatialIOPortScreen.java index a501e77f7..d37afce9c 100644 --- a/src/main/java/appeng/client/gui/implementations/SpatialIOPortScreen.java +++ b/src/main/java/appeng/client/gui/implementations/SpatialIOPortScreen.java @@ -58,7 +58,7 @@ public class SpatialIOPortScreen extends AEBaseScreen { GuiText.Efficiency.getLocal() + ": " + (((float) this.container.getEfficency()) / 100) + '%', 13, 83, 4210752); - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.SpatialIOPort.textComponent()).getString(), 8, + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.SpatialIOPort.text()).getString(), 8, 6, 4210752); this.font.drawString(matrixStack, GuiText.inventory.getLocal(), 8, this.ySize - 96, 4210752); diff --git a/src/main/java/appeng/client/gui/implementations/StorageBusScreen.java b/src/main/java/appeng/client/gui/implementations/StorageBusScreen.java index 1be9a2962..68aed64cb 100644 --- a/src/main/java/appeng/client/gui/implementations/StorageBusScreen.java +++ b/src/main/java/appeng/client/gui/implementations/StorageBusScreen.java @@ -60,7 +60,7 @@ public class StorageBusScreen extends UpgradeableScreen { this.fuzzyMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 88, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL); - this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.textComponent(), + this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.text(), this.itemRenderer, btn -> openPriorityGui())); this.addButton(this.storageFilter); @@ -71,7 +71,7 @@ public class StorageBusScreen extends UpgradeableScreen { @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.StorageBus.textComponent()).getString(), 8, 6, + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.StorageBus.text()).getString(), 8, 6, 4210752); this.font.drawString(matrixStack, GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); diff --git a/src/main/java/appeng/client/gui/implementations/UpgradeableScreen.java b/src/main/java/appeng/client/gui/implementations/UpgradeableScreen.java index 1fbd870dc..ffda0419f 100644 --- a/src/main/java/appeng/client/gui/implementations/UpgradeableScreen.java +++ b/src/main/java/appeng/client/gui/implementations/UpgradeableScreen.java @@ -86,7 +86,7 @@ public class UpgradeableScreen extends AEBaseScr @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(this.getName().textComponent()).getString(), 8, 6, + this.font.drawString(matrixStack, this.getGuiDisplayName(this.getName().text()).getString(), 8, 6, 4210752); this.font.drawString(matrixStack, GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); diff --git a/src/main/java/appeng/client/gui/implementations/VibrationChamberScreen.java b/src/main/java/appeng/client/gui/implementations/VibrationChamberScreen.java index 51d3ad143..3fa4b8da0 100644 --- a/src/main/java/appeng/client/gui/implementations/VibrationChamberScreen.java +++ b/src/main/java/appeng/client/gui/implementations/VibrationChamberScreen.java @@ -54,7 +54,7 @@ public class VibrationChamberScreen extends AEBaseScreen { @Override public void drawFG(MatrixStack matrixStack, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { - this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Wireless.textComponent()).getString(), 8, 6, 4210752); + this.font.drawString(matrixStack, this.getGuiDisplayName(GuiText.Wireless.text()).getString(), 8, 6, 4210752); this.font.drawString(matrixStack, GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752); if (container.getRange() > 0) { diff --git a/src/main/java/appeng/client/gui/widgets/ActionButton.java b/src/main/java/appeng/client/gui/widgets/ActionButton.java index 8d4303175..1ff714807 100644 --- a/src/main/java/appeng/client/gui/widgets/ActionButton.java +++ b/src/main/java/appeng/client/gui/widgets/ActionButton.java @@ -23,6 +23,8 @@ import java.util.regex.Pattern; import appeng.api.config.ActionItems; import appeng.core.localization.ButtonToolTips; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; public class ActionButton extends IconButton implements ITooltip { private static final Pattern PATTERN_NEW_LINE = Pattern.compile("\\n", Pattern.LITERAL); @@ -76,9 +78,9 @@ public class ActionButton extends IconButton implements ITooltip { return iconIndex; } - private String buildMessage(ButtonToolTips displayName, ButtonToolTips displayValue) { - String name = displayName.getTranslationKey().getString(); - String value = displayValue.getTranslationKey().getString(); + private ITextComponent buildMessage(ButtonToolTips displayName, ButtonToolTips displayValue) { + String name = displayName.text().getString(); + String value = displayValue.text().getString(); value = PATTERN_NEW_LINE.matcher(value).replaceAll("\n"); final StringBuilder sb = new StringBuilder(value); @@ -91,7 +93,7 @@ public class ActionButton extends IconButton implements ITooltip { sb.replace(i, i + 1, "\n"); } - return name + '\n' + sb; + return new StringTextComponent(name + '\n' + sb); } } diff --git a/src/main/java/appeng/client/gui/widgets/ProgressBar.java b/src/main/java/appeng/client/gui/widgets/ProgressBar.java index 0a5f69b00..f5df1e9f4 100644 --- a/src/main/java/appeng/client/gui/widgets/ProgressBar.java +++ b/src/main/java/appeng/client/gui/widgets/ProgressBar.java @@ -89,7 +89,7 @@ public class ProgressBar extends Widget implements ITooltip { return result.deepCopy().func_240702_b_("\n").func_240702_b_(this.source.getCurrentProgress() + " ") .func_230529_a_( - GuiText.Of.textComponent().deepCopy().func_240702_b_(" " + this.source.getMaxProgress())); + GuiText.Of.text().deepCopy().func_240702_b_(" " + this.source.getMaxProgress())); } @Override diff --git a/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java b/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java index e5a532cd4..aac4d6f16 100644 --- a/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java +++ b/src/main/java/appeng/client/gui/widgets/SettingToggleButton.java @@ -48,6 +48,7 @@ import appeng.api.config.ViewItems; import appeng.api.config.YesNo; import appeng.core.localization.ButtonToolTips; import appeng.util.EnumCycler; +import net.minecraft.util.text.StringTextComponent; public class SettingToggleButton> extends IconButton { private static final Pattern COMPILE = Pattern.compile("%s"); @@ -236,7 +237,7 @@ public class SettingToggleButton> extends IconButton { private static void registerApp(final int iconIndex, final Settings setting, final Enum val, final ButtonToolTips title, final ITextComponent hint) { final ButtonAppearance a = new ButtonAppearance(); - a.displayName = title.getTranslationKey(); + a.displayName = title.text(); a.displayValue = hint; a.index = iconIndex; appearances.put(new EnumPair(setting, val), a); @@ -244,7 +245,7 @@ public class SettingToggleButton> extends IconButton { private static void registerApp(final int iconIndex, final Settings setting, final Enum val, final ButtonToolTips title, final ButtonToolTips hint) { - registerApp(iconIndex, setting, val, title, hint.getTranslationKey()); + registerApp(iconIndex, setting, val, title, hint.text()); } @Override @@ -278,7 +279,7 @@ public class SettingToggleButton> extends IconButton { } @Override - public String getMessage() { + public ITextComponent getMessage() { ITextComponent displayName = null; ITextComponent displayValue = null; @@ -286,7 +287,7 @@ public class SettingToggleButton> extends IconButton { final ButtonAppearance buttonAppearance = appearances .get(new EnumPair(this.buttonSetting, this.currentValue)); if (buttonAppearance == null) { - return "No Such Message"; + return new StringTextComponent("No Such Message"); } displayName = buttonAppearance.displayName; @@ -312,9 +313,9 @@ public class SettingToggleButton> extends IconButton { sb.replace(i, i + 1, "\n"); } - return name + '\n' + sb; + return new StringTextComponent(name + '\n' + sb); } - return ""; + return StringTextComponent.EMPTY; } public String getFillVar() { diff --git a/src/main/java/appeng/client/me/ClientDCInternalInv.java b/src/main/java/appeng/client/me/ClientDCInternalInv.java index 979cc720c..beee7c2ff 100644 --- a/src/main/java/appeng/client/me/ClientDCInternalInv.java +++ b/src/main/java/appeng/client/me/ClientDCInternalInv.java @@ -36,7 +36,7 @@ public class ClientDCInternalInv implements Comparable { public ClientDCInternalInv(final int size, final long id, final long sortBy, final ITextComponent name) { this.inventory = new AppEngInternalInventory(null, size); this.searchName = name.getString().toLowerCase(); - this.formattedName = name.getFormattedText(); + this.formattedName = name.getString(); // FIXME FABRIC no longer formatted! this.id = id; this.sortBy = sortBy; } diff --git a/src/main/java/appeng/client/render/FacadeDispatcherBakedModel.java b/src/main/java/appeng/client/render/FacadeDispatcherBakedModel.java index cc08c4068..f6911dd08 100644 --- a/src/main/java/appeng/client/render/FacadeDispatcherBakedModel.java +++ b/src/main/java/appeng/client/render/FacadeDispatcherBakedModel.java @@ -22,6 +22,7 @@ import java.util.Objects; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemOverrideList; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -50,7 +51,7 @@ public class FacadeDispatcherBakedModel extends DelegateBakedModel { public ItemOverrideList getOverrides() { return new ItemOverrideList() { @Override - public IBakedModel getModelWithOverrides(IBakedModel originalModel, ItemStack stack, World world, + public IBakedModel func_239290_a_(IBakedModel originalModel, ItemStack stack, ClientWorld world, LivingEntity entity) { if (!(stack.getItem() instanceof FacadeItem)) { return originalModel; diff --git a/src/main/java/appeng/client/render/FacingToRotation.java b/src/main/java/appeng/client/render/FacingToRotation.java index aca8a9438..a295ee9ba 100644 --- a/src/main/java/appeng/client/render/FacingToRotation.java +++ b/src/main/java/appeng/client/render/FacingToRotation.java @@ -110,7 +110,7 @@ public enum FacingToRotation implements IStringSerializable { } @Override - public String getName() { + public String getString() { return name().toLowerCase(); } } diff --git a/src/main/java/appeng/client/render/SpatialSkyRender.java b/src/main/java/appeng/client/render/SpatialSkyRender.java index 8dd9de244..76d540434 100644 --- a/src/main/java/appeng/client/render/SpatialSkyRender.java +++ b/src/main/java/appeng/client/render/SpatialSkyRender.java @@ -35,8 +35,7 @@ import net.minecraft.util.math.vector.Quaternion; import net.minecraftforge.client.IRenderHandler; import net.minecraftforge.client.SkyRenderHandler; -//TODO https://github.com/MinecraftForge/MinecraftForge/pull/6537 -public class SpatialSkyRender implements SkyRenderHandler { +public class SpatialSkyRender { private static final SpatialSkyRender INSTANCE = new SpatialSkyRender(); @@ -48,7 +47,7 @@ public class SpatialSkyRender implements SkyRenderHandler { this.dspList = GL11.glGenLists(1); } - public static IRenderHandler getInstance() { + public static SpatialSkyRender getInstance() { return INSTANCE; } @@ -56,8 +55,7 @@ public class SpatialSkyRender implements SkyRenderHandler { new Quaternion(-90.0F, 0.0F, 0.0F, true), new Quaternion(180.0F, 0.0F, 0.0F, true), new Quaternion(0.0F, 0.0F, 90.0F, true), new Quaternion(0.0F, 0.0F, -90.0F, true), }; - @Override - public void render(int ticks, float partialTicks, MatrixStack matrixStack, ClientWorld world, Minecraft mc) { + public void render(MatrixStack matrixStack) { final long now = System.currentTimeMillis(); if (now - this.cycle > 2000) { this.cycle = now; diff --git a/src/main/java/appeng/client/render/cablebus/FacadeBlockAccess.java b/src/main/java/appeng/client/render/cablebus/FacadeBlockAccess.java index 0a01983ef..366076ccf 100644 --- a/src/main/java/appeng/client/render/cablebus/FacadeBlockAccess.java +++ b/src/main/java/appeng/client/render/cablebus/FacadeBlockAccess.java @@ -68,6 +68,12 @@ public class FacadeBlockAccess implements IBlockDisplayReader { return world.getFluidState(pos); } + // This is for diffuse lighting + @Override + public float func_230487_a_(Direction p_230487_1_, boolean p_230487_2_) { + return world.func_230487_a_(p_230487_1_, p_230487_2_); + } + @Override public WorldLightManager getLightManager() { return world.getLightManager(); diff --git a/src/main/java/appeng/client/render/crafting/EncodedPatternBakedModel.java b/src/main/java/appeng/client/render/crafting/EncodedPatternBakedModel.java index c16876946..6628638b7 100644 --- a/src/main/java/appeng/client/render/crafting/EncodedPatternBakedModel.java +++ b/src/main/java/appeng/client/render/crafting/EncodedPatternBakedModel.java @@ -10,6 +10,7 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemOverrideList; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.vector.TransformationMatrix; @@ -112,7 +113,7 @@ public class EncodedPatternBakedModel extends DelegateBakedModel { @Nullable @Override - public IBakedModel getModelWithOverrides(IBakedModel originalModel, ItemStack stack, @Nullable World world, + public IBakedModel func_239290_a_(IBakedModel originalModel, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) { boolean shiftHeld = Screen.hasShiftDown(); if (shiftHeld) { @@ -122,12 +123,12 @@ public class EncodedPatternBakedModel extends DelegateBakedModel { IBakedModel realModel = Minecraft.getInstance().getItemRenderer().getItemModelMesher() .getItemModel(output); // Give the item model a chance to handle the overrides as well - realModel = realModel.getOverrides().getModelWithOverrides(realModel, output, world, entity); + realModel = realModel.getOverrides().func_239290_a_(realModel, output, world, entity); return new ShiftHoldingModelWrapper(getBaseModel(), realModel); } } - return getBaseModel().getOverrides().getModelWithOverrides(originalModel, stack, world, entity); + return getBaseModel().getOverrides().func_239290_a_(originalModel, stack, world, entity); } } diff --git a/src/main/java/appeng/client/render/effects/ChargedOreFX.java b/src/main/java/appeng/client/render/effects/ChargedOreFX.java index 106aba23d..deaf29c31 100644 --- a/src/main/java/appeng/client/render/effects/ChargedOreFX.java +++ b/src/main/java/appeng/client/render/effects/ChargedOreFX.java @@ -22,6 +22,7 @@ import net.minecraft.client.particle.IAnimatedSprite; import net.minecraft.client.particle.IParticleFactory; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.RedstoneParticle; +import net.minecraft.client.world.ClientWorld; import net.minecraft.particles.BasicParticleType; import net.minecraft.particles.RedstoneParticleData; import net.minecraft.world.World; @@ -33,7 +34,7 @@ public class ChargedOreFX extends RedstoneParticle { private static final RedstoneParticleData PARTICLE_DATA = new RedstoneParticleData(0.21f, 0.61f, 1.0f, 1.0f); - private ChargedOreFX(World worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed, + private ChargedOreFX(ClientWorld 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); } @@ -58,8 +59,8 @@ public class ChargedOreFX extends RedstoneParticle { } @Override - public Particle makeParticle(BasicParticleType typeIn, World worldIn, double x, double y, double z, - double xSpeed, double ySpeed, double zSpeed) { + public Particle makeParticle(BasicParticleType typeIn, ClientWorld 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); } } diff --git a/src/main/java/appeng/client/render/effects/CraftingFx.java b/src/main/java/appeng/client/render/effects/CraftingFx.java index d4db0d663..b287dece8 100644 --- a/src/main/java/appeng/client/render/effects/CraftingFx.java +++ b/src/main/java/appeng/client/render/effects/CraftingFx.java @@ -135,7 +135,7 @@ public class CraftingFx extends SpriteTexturedParticle { } @Override - public Particle makeParticle(BasicParticleType data, World worldIn, double x, double y, double z, double xSpeed, + public Particle makeParticle(BasicParticleType data, ClientWorld worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { return new CraftingFx(worldIn, x, y, z, spriteSet); } diff --git a/src/main/java/appeng/client/render/effects/LightningArcFX.java b/src/main/java/appeng/client/render/effects/LightningArcFX.java index 115225a33..08b32f180 100644 --- a/src/main/java/appeng/client/render/effects/LightningArcFX.java +++ b/src/main/java/appeng/client/render/effects/LightningArcFX.java @@ -24,6 +24,7 @@ import net.minecraft.client.particle.IAnimatedSprite; import net.minecraft.client.particle.IParticleFactory; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.SpriteTexturedParticle; +import net.minecraft.client.world.ClientWorld; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -37,7 +38,7 @@ 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(final ClientWorld w, 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); @@ -75,8 +76,8 @@ public class LightningArcFX extends LightningFX { } @Override - public Particle makeParticle(LightningArcParticleData data, World worldIn, double x, double y, double z, - double xSpeed, double ySpeed, double zSpeed) { + public Particle makeParticle(LightningArcParticleData data, ClientWorld worldIn, double x, double y, double z, + double xSpeed, double ySpeed, double zSpeed) { SpriteTexturedParticle lightningFX = new LightningArcFX(worldIn, x, y, z, data.target.x, data.target.y, data.target.z, 0, 0, 0); lightningFX.selectSpriteRandomly(this.spriteSet); diff --git a/src/main/java/appeng/client/render/effects/ParticleTypes.java b/src/main/java/appeng/client/render/effects/ParticleTypes.java index 5cddafdbc..a0b662c10 100644 --- a/src/main/java/appeng/client/render/effects/ParticleTypes.java +++ b/src/main/java/appeng/client/render/effects/ParticleTypes.java @@ -1,5 +1,6 @@ package appeng.client.render.effects; +import com.mojang.serialization.Codec; import net.minecraft.particles.BasicParticleType; import net.minecraft.particles.ParticleType; @@ -12,10 +13,19 @@ public final class ParticleTypes { public static final BasicParticleType CHARGED_ORE = new BasicParticleType(false); public static final BasicParticleType CRAFTING = new BasicParticleType(false); - public static final ParticleType ENERGY = new ParticleType<>(false, - EnergyParticleData.DESERIALIZER); - public static final ParticleType LIGHTNING_ARC = new ParticleType<>(false, - LightningArcParticleData.DESERIALIZER); + public static final ParticleType ENERGY = new ParticleType(false, + EnergyParticleData.DESERIALIZER) { + public Codec func_230522_e_() { + return null; + } + }; + public static final ParticleType LIGHTNING_ARC = new ParticleType(false, + LightningArcParticleData.DESERIALIZER) { + @Override + public Codec func_230522_e_() { + return null; + } + }; public static final BasicParticleType LIGHTNING = new BasicParticleType(false); public static final BasicParticleType MATTER_CANNON = new BasicParticleType(false); public static final BasicParticleType VIBRANT = new BasicParticleType(false); diff --git a/src/main/java/appeng/client/render/model/AutoRotatingBakedModel.java b/src/main/java/appeng/client/render/model/AutoRotatingBakedModel.java index 399d9c975..6bf0a4d17 100644 --- a/src/main/java/appeng/client/render/model/AutoRotatingBakedModel.java +++ b/src/main/java/appeng/client/render/model/AutoRotatingBakedModel.java @@ -107,7 +107,7 @@ public class AutoRotatingBakedModel implements IBakedModel { // when piping it // to the AO lighter, thus fixing our problem. BakedQuad packedQuad = new BakedQuad(unpackedQuad.getVertexData(), quad.getTintIndex(), - unpackedQuad.getFace(), quad.func_187508_a(), quad.shouldApplyDiffuseLighting()); + unpackedQuad.getFace(), quad.func_187508_a(), quad.func_239287_f_()); rotated.add(packedQuad); } return rotated; diff --git a/src/main/java/appeng/client/render/model/BiometricCardBakedModel.java b/src/main/java/appeng/client/render/model/BiometricCardBakedModel.java index ac850b876..0fe57ce68 100644 --- a/src/main/java/appeng/client/render/model/BiometricCardBakedModel.java +++ b/src/main/java/appeng/client/render/model/BiometricCardBakedModel.java @@ -19,6 +19,7 @@ import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Direction; @@ -143,7 +144,7 @@ class BiometricCardBakedModel implements IBakedModel { public ItemOverrideList getOverrides() { return new ItemOverrideList() { @Override - public IBakedModel getModelWithOverrides(IBakedModel originalModel, ItemStack stack, World world, + public IBakedModel func_239290_a_(IBakedModel originalModel, ItemStack stack, ClientWorld world, LivingEntity entity) { String username = ""; if (stack.getItem() instanceof IBiometricCard) { diff --git a/src/main/java/appeng/client/render/model/ColorApplicatorBakedModel.java b/src/main/java/appeng/client/render/model/ColorApplicatorBakedModel.java index 9dab86e98..02783297f 100644 --- a/src/main/java/appeng/client/render/model/ColorApplicatorBakedModel.java +++ b/src/main/java/appeng/client/render/model/ColorApplicatorBakedModel.java @@ -62,7 +62,7 @@ class ColorApplicatorBakedModel implements IBakedModel { } BakedQuad newQuad = new BakedQuad(quad.getVertexData(), tint, quad.getFace(), quad.func_187508_a(), - quad.shouldApplyDiffuseLighting()); + quad.func_239287_f_()); result.add(newQuad); } diff --git a/src/main/java/appeng/client/render/model/MemoryCardBakedModel.java b/src/main/java/appeng/client/render/model/MemoryCardBakedModel.java index da8dab492..91cf5471a 100644 --- a/src/main/java/appeng/client/render/model/MemoryCardBakedModel.java +++ b/src/main/java/appeng/client/render/model/MemoryCardBakedModel.java @@ -19,6 +19,7 @@ import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Direction; @@ -128,7 +129,7 @@ class MemoryCardBakedModel implements IBakedModel { public ItemOverrideList getOverrides() { return new ItemOverrideList() { @Override - public IBakedModel getModelWithOverrides(IBakedModel originalModel, ItemStack stack, World world, + public IBakedModel func_239290_a_(IBakedModel originalModel, ItemStack stack, ClientWorld world, LivingEntity entity) { try { if (stack.getItem() instanceof IMemoryCard) { diff --git a/src/main/java/appeng/client/render/model/MemoryCardModel.java b/src/main/java/appeng/client/render/model/MemoryCardModel.java index cbc271cfc..4a2ced7f3 100644 --- a/src/main/java/appeng/client/render/model/MemoryCardModel.java +++ b/src/main/java/appeng/client/render/model/MemoryCardModel.java @@ -31,11 +31,11 @@ import appeng.core.AppEng; public class MemoryCardModel implements IModelGeometry { public static final ResourceLocation MODEL_BASE = new ResourceLocation(AppEng.MOD_ID, "item/memory_card_base"); - private static final Material TEXTURE = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, + private static final RenderMaterial TEXTURE = new RenderMaterial(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation(AppEng.MOD_ID, "item/memory_card_hash")); @Override - public Collection getTextures(IModelConfiguration owner, + public Collection getTextures(IModelConfiguration owner, Function modelGetter, Set> missingTextureErrors) { return Collections.singleton(TEXTURE); } diff --git a/src/main/java/appeng/client/render/model/SkyCompassBakedModel.java b/src/main/java/appeng/client/render/model/SkyCompassBakedModel.java index 88677bbaf..ea4538ed5 100644 --- a/src/main/java/appeng/client/render/model/SkyCompassBakedModel.java +++ b/src/main/java/appeng/client/render/model/SkyCompassBakedModel.java @@ -31,6 +31,7 @@ import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -149,7 +150,7 @@ public class SkyCompassBakedModel implements IDynamicBakedModel { */ return new ItemOverrideList() { @Override - public IBakedModel getModelWithOverrides(IBakedModel originalModel, ItemStack stack, @Nullable World world, + public IBakedModel func_239290_a_(IBakedModel originalModel, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) { // FIXME: This check prevents compasses being held by OTHERS from getting the // rotation, BUT do we actually still need this??? @@ -159,7 +160,7 @@ public class SkyCompassBakedModel implements IDynamicBakedModel { float offRads = (float) (player.rotationYaw / 180.0f * (float) Math.PI + Math.PI); SkyCompassBakedModel.this.fallbackRotation = offRads - + getAnimatedRotation(player.getPosition(), true); + + getAnimatedRotation(player.func_233580_cy_(), true); } else { SkyCompassBakedModel.this.fallbackRotation = getAnimatedRotation(null, false); } diff --git a/src/main/java/appeng/client/render/tesr/ChestTileEntityRenderer.java b/src/main/java/appeng/client/render/tesr/ChestTileEntityRenderer.java index 667fe91ac..0f74a89d8 100644 --- a/src/main/java/appeng/client/render/tesr/ChestTileEntityRenderer.java +++ b/src/main/java/appeng/client/render/tesr/ChestTileEntityRenderer.java @@ -144,7 +144,7 @@ public class ChestTileEntityRenderer extends TileEntityRenderer for (int i = 0; i < quads.size(); i++) { BakedQuad quad = quads.get(i); quads.set(i, new BakedQuad(quad.getVertexData(), quad.getTintIndex(), r.rotate(quad.getFace()), - quad.func_187508_a(), quad.shouldApplyDiffuseLighting())); + quad.func_187508_a(), quad.func_239287_f_())); } return quads; diff --git a/src/main/java/appeng/client/render/tesr/CrankTESR.java b/src/main/java/appeng/client/render/tesr/CrankTESR.java index 438e1e2ca..3cea8c3fd 100644 --- a/src/main/java/appeng/client/render/tesr/CrankTESR.java +++ b/src/main/java/appeng/client/render/tesr/CrankTESR.java @@ -62,7 +62,7 @@ public class CrankTESR extends TileEntityRenderer { BlockState blockState = te.getBlockState(); BlockRendererDispatcher dispatcher = Minecraft.getInstance().getBlockRendererDispatcher(); IBakedModel model = dispatcher.getModelForState(blockState); - IVertexBuilder buffer = buffers.getBuffer(Atlases.getTranslucentBlockType()); + IVertexBuilder buffer = buffers.getBuffer(Atlases.getCutoutBlockType()); 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/SkyCompassTESR.java b/src/main/java/appeng/client/render/tesr/SkyCompassTESR.java index 5b3a1835b..4f9e2b178 100644 --- a/src/main/java/appeng/client/render/tesr/SkyCompassTESR.java +++ b/src/main/java/appeng/client/render/tesr/SkyCompassTESR.java @@ -55,7 +55,7 @@ public class SkyCompassTESR extends TileEntityRenderer { blockRenderer = Minecraft.getInstance().getBlockRendererDispatcher(); } - IVertexBuilder buffer = buffers.getBuffer(Atlases.getTranslucentBlockType()); + IVertexBuilder buffer = buffers.getBuffer(Atlases.getCutoutBlockType()); BlockState blockState = te.getBlockState(); IBakedModel model = blockRenderer.getBlockModelShapes().getModel(blockState); diff --git a/src/main/java/appeng/container/ContainerLocator.java b/src/main/java/appeng/container/ContainerLocator.java index 487e0fe10..f96754c24 100644 --- a/src/main/java/appeng/container/ContainerLocator.java +++ b/src/main/java/appeng/container/ContainerLocator.java @@ -29,12 +29,14 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.Hand; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import appeng.api.parts.IPartHost; import appeng.api.util.AEPartLocation; import appeng.api.util.DimensionalCoord; import appeng.parts.AEBasePart; +import net.minecraft.world.World; /** * Describes how a container the player has opened was originally located. This @@ -62,14 +64,18 @@ public final class ContainerLocator { private final Type type; private final int itemIndex; - private final int dimensionId; + private final ResourceLocation worldId; private final BlockPos blockPos; private final AEPartLocation side; - private ContainerLocator(Type type, int itemIndex, int dimensionId, BlockPos blockPos, AEPartLocation side) { + private ContainerLocator(Type type, int itemIndex, World world, BlockPos blockPos, AEPartLocation side) { + this(type, itemIndex, world.func_234923_W_().func_240901_a_(), blockPos, side); + } + + private ContainerLocator(Type type, int itemIndex, ResourceLocation worldId, BlockPos blockPos, AEPartLocation side) { this.type = type; this.itemIndex = itemIndex; - this.dimensionId = dimensionId; + this.worldId = worldId; this.blockPos = blockPos; this.side = side; } @@ -78,16 +84,14 @@ public final class ContainerLocator { if (te.getWorld() == null) { throw new IllegalArgumentException("Cannot open a tile entity that is not in a world"); } - int dimensionId = te.getWorld().getDimension().getType().getId(); - return new ContainerLocator(Type.BLOCK, -1, dimensionId, te.getPos(), null); + return new ContainerLocator(Type.BLOCK, -1, te.getWorld(), te.getPos(), null); } public static ContainerLocator forTileEntitySide(TileEntity te, Direction side) { if (te.getWorld() == null) { throw new IllegalArgumentException("Cannot open a tile entity that is not in a world"); } - int dimensionId = te.getWorld().getDimension().getType().getId(); - return new ContainerLocator(Type.PART, -1, dimensionId, te.getPos(), AEPartLocation.fromFacing(side)); + return new ContainerLocator(Type.PART, -1, te.getWorld(), te.getPos(), AEPartLocation.fromFacing(side)); } /** @@ -100,16 +104,15 @@ public final class ContainerLocator { if (player == null) { throw new IllegalArgumentException("Cannot open a container without a player"); } - int dimensionId = player.world.getDimension().getType().getId(); int slot = getPlayerInventorySlotFromHand(player, context.getHand()); AEPartLocation side = AEPartLocation.fromFacing(context.getFace()); - return new ContainerLocator(Type.PLAYER_INVENTORY_WITH_BLOCK_CONTEXT, slot, dimensionId, context.getPos(), + return new ContainerLocator(Type.PLAYER_INVENTORY_WITH_BLOCK_CONTEXT, slot, player.world, context.getPos(), side); } public static ContainerLocator forHand(PlayerEntity player, Hand hand) { int slot = getPlayerInventorySlotFromHand(player, hand); - return new ContainerLocator(Type.PLAYER_INVENTORY, slot, -1, null, null); + return new ContainerLocator(Type.PLAYER_INVENTORY, slot, (ResourceLocation) null, null, null); } private static int getPlayerInventorySlotFromHand(PlayerEntity player, Hand hand) { @@ -129,7 +132,7 @@ public final class ContainerLocator { public static ContainerLocator forPart(AEBasePart part) { IPartHost host = part.getHost(); DimensionalCoord pos = host.getLocation(); - return new ContainerLocator(Type.PART, -1, pos.getWorld().getDimension().getType().getId(), pos.getBlockPos(), + return new ContainerLocator(Type.PART, -1, pos.getWorld().getWorld(), pos.getBlockPos(), part.getSide()); } @@ -142,8 +145,8 @@ public final class ContainerLocator { return itemIndex; } - public int getDimensionId() { - return dimensionId; + public ResourceLocation getWorldId() { + return worldId; } public boolean hasBlockPos() { @@ -173,18 +176,18 @@ public final class ContainerLocator { case PLAYER_INVENTORY_WITH_BLOCK_CONTEXT: buf.writeByte(1); buf.writeInt(itemIndex); - buf.writeInt(dimensionId); + buf.writeResourceLocation(worldId); buf.writeBlockPos(blockPos); buf.writeByte(side.ordinal()); break; case BLOCK: buf.writeByte(2); - buf.writeInt(dimensionId); + buf.writeResourceLocation(worldId); buf.writeBlockPos(blockPos); break; case PART: buf.writeByte(3); - buf.writeInt(dimensionId); + buf.writeResourceLocation(worldId); buf.writeBlockPos(blockPos); buf.writeByte(side.ordinal()); break; @@ -197,14 +200,14 @@ public final class ContainerLocator { byte type = buf.readByte(); switch (type) { case 0: - return new ContainerLocator(Type.PLAYER_INVENTORY, buf.readInt(), -1, null, null); + return new ContainerLocator(Type.PLAYER_INVENTORY, buf.readInt(), (ResourceLocation) null, null, null); case 1: - return new ContainerLocator(Type.PLAYER_INVENTORY_WITH_BLOCK_CONTEXT, buf.readInt(), buf.readInt(), + return new ContainerLocator(Type.PLAYER_INVENTORY_WITH_BLOCK_CONTEXT, buf.readInt(), buf.readResourceLocation(), buf.readBlockPos(), AEPartLocation.values()[buf.readByte()]); case 2: - return new ContainerLocator(Type.BLOCK, -1, buf.readInt(), buf.readBlockPos(), null); + return new ContainerLocator(Type.BLOCK, -1, buf.readResourceLocation(), buf.readBlockPos(), null); case 3: - return new ContainerLocator(Type.PART, -1, buf.readInt(), buf.readBlockPos(), + return new ContainerLocator(Type.PART, -1, buf.readResourceLocation(), buf.readBlockPos(), AEPartLocation.values()[buf.readByte()]); default: throw new DecoderException("ContainerLocator type out of range: " + type); @@ -219,7 +222,7 @@ public final class ContainerLocator { result.append("slot=").append(itemIndex).append(','); } if (hasBlockPos()) { - result.append("dim=").append(dimensionId).append(','); + result.append("dim=").append(worldId).append(','); result.append("pos=").append(blockPos).append(','); } if (hasSide()) { diff --git a/src/main/java/appeng/container/guisync/SyncData.java b/src/main/java/appeng/container/guisync/SyncData.java index 3d3662315..79d692ded 100644 --- a/src/main/java/appeng/container/guisync/SyncData.java +++ b/src/main/java/appeng/container/guisync/SyncData.java @@ -127,7 +127,7 @@ public class SyncData { String json = (String) val; ITextComponent text = null; if (!json.isEmpty()) { - text = ITextComponent.Serializer.fromJson((String) val); + text = ITextComponent.Serializer.func_240643_a_((String) val); } this.updateTextComponent(text); } else { diff --git a/src/main/java/appeng/container/implementations/CraftConfirmContainer.java b/src/main/java/appeng/container/implementations/CraftConfirmContainer.java index 513b7da01..a67b27658 100644 --- a/src/main/java/appeng/container/implementations/CraftConfirmContainer.java +++ b/src/main/java/appeng/container/implementations/CraftConfirmContainer.java @@ -33,6 +33,7 @@ import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.IContainerListener; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.Util; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.world.World; @@ -256,7 +257,7 @@ public class CraftConfirmContainer extends AEBaseContainer { // :P } } catch (final Throwable e) { - this.getPlayerInv().player.sendMessage(new StringTextComponent("Error: " + e.toString())); + this.getPlayerInv().player.sendMessage(new StringTextComponent("Error: " + e.toString()), Util.DUMMY_UUID); AELog.debug(e); this.setValidContainer(false); this.result = null; diff --git a/src/main/java/appeng/container/implementations/WirelessTermContainer.java b/src/main/java/appeng/container/implementations/WirelessTermContainer.java index 0c6459941..c3513ec48 100644 --- a/src/main/java/appeng/container/implementations/WirelessTermContainer.java +++ b/src/main/java/appeng/container/implementations/WirelessTermContainer.java @@ -28,6 +28,7 @@ import appeng.core.AEConfig; import appeng.core.localization.PlayerMessages; import appeng.helpers.WirelessTerminalGuiObject; import appeng.util.Platform; +import net.minecraft.util.Util; public class WirelessTermContainer extends MEPortableCellContainer { @@ -57,7 +58,7 @@ public class WirelessTermContainer extends MEPortableCellContainer { if (!this.wirelessTerminalGUIObject.rangeCheck()) { if (Platform.isServer() && this.isValidContainer()) { - this.getPlayerInv().player.sendMessage(PlayerMessages.OutOfRange.get()); + this.getPlayerInv().player.sendMessage(PlayerMessages.OutOfRange.get(), Util.DUMMY_UUID); } this.setValidContainer(false); diff --git a/src/main/java/appeng/core/AppEng.java b/src/main/java/appeng/core/AppEng.java index 94dcafd6d..9c61d3bb5 100644 --- a/src/main/java/appeng/core/AppEng.java +++ b/src/main/java/appeng/core/AppEng.java @@ -42,7 +42,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; 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.DistExecutor; import net.minecraftforge.fml.ModLoadingContext; @@ -102,6 +101,10 @@ public final class AppEng { private static AppEng INSTANCE; + public static ResourceLocation makeId(String id) { + return new ResourceLocation(MOD_ID, id); + } + private final Registration registration; public AppEng() { @@ -129,7 +132,6 @@ public final class AppEng { modEventBus.addGenericListener(IRecipeSerializer.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); diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index 99586354c..73f2afbdc 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -49,7 +49,6 @@ import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.event.ParticleFactoryRegisterEvent; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.common.ModDimension; import net.minecraftforge.common.extensions.IForgeContainerType; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.IEventBus; @@ -204,7 +203,6 @@ import appeng.recipes.handlers.InscriberRecipe; import appeng.recipes.handlers.InscriberRecipeSerializer; import appeng.server.AECommand; import appeng.spatial.StorageCellBiome; -import appeng.spatial.StorageCellModDimension; import appeng.tile.AEBaseTileEntity; import appeng.tile.crafting.MolecularAssemblerRenderer; import appeng.worldgen.ChargedQuartzOreConfig; @@ -630,9 +628,6 @@ final class Registration { * world gen */ for (final IWorldGen.WorldGenType type : IWorldGen.WorldGenType.values()) { - // FIXME: registries.worldgen().disableWorldGenForProviderID( type, - // StorageWorldProvider.class ); - registries.worldgen().disableWorldGenForDimension(type, World.field_234919_h_.getRegistryName()); } @@ -659,10 +654,6 @@ final class Registration { } b.func_235063_a_(MeteoriteStructure.INSTANCE.func_236391_a_(IFeatureConfig.NO_FEATURE_CONFIG)); - b.addFeature(GenerationStage.Decoration.TOP_LAYER_MODIFICATION, - MeteoriteStructure.INSTANCE.func_236391_a_(IFeatureConfig.NO_FEATURE_CONFIG) - //.withPlacement(Placement.NOPE.configure(IPlacementConfig.NO_PLACEMENT_CONFIG)) - ); } private static void addQuartzWorldGen(Biome b) { @@ -694,8 +685,6 @@ final class Registration { public void registerWorldGen(RegistryEvent.Register> evt) { IForgeRegistry> r = evt.getRegistry(); -// r.register(MeteoriteWorldGen.INSTANCE); - r.register(MeteoriteStructure.INSTANCE); r.register(ChargedQuartzOreFeature.INSTANCE); } @@ -703,10 +692,6 @@ final class Registration { evt.getRegistry().register(StorageCellBiome.INSTANCE); } - public void registerModDimension(RegistryEvent.Register evt) { - evt.getRegistry().register(StorageCellModDimension.INSTANCE); - } - @OnlyIn(Dist.CLIENT) public void registerTextures(TextureStitchEvent.Pre event) { SkyChestTESR.registerTextures(event); @@ -714,7 +699,7 @@ final class Registration { } public void registerCommands(final FMLServerStartingEvent evt) { - new AECommand().register(evt.getCommandDispatcher()); + new AECommand().register(evt.getServer().getCommandManager().getDispatcher()); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/appeng/core/api/ApiClientHelper.java b/src/main/java/appeng/core/api/ApiClientHelper.java index 67482ecb1..cbc8891c6 100644 --- a/src/main/java/appeng/core/api/ApiClientHelper.java +++ b/src/main/java/appeng/core/api/ApiClientHelper.java @@ -53,12 +53,12 @@ public class ApiClientHelper implements IClientHelper { if (cellInventory != null) { lines.add(new StringTextComponent(cellInventory.getUsedBytes() + " ") - .appendSibling(GuiText.Of.textComponent()).appendText(" " + cellInventory.getTotalBytes() + " ") - .appendSibling(GuiText.BytesUsed.textComponent())); + .func_230529_a_(GuiText.Of.text()).func_240702_b_(" " + cellInventory.getTotalBytes() + " ") + .func_230529_a_(GuiText.BytesUsed.text())); lines.add(new StringTextComponent(cellInventory.getStoredItemTypes() + " ") - .appendSibling(GuiText.Of.textComponent()).appendText(" " + cellInventory.getTotalItemTypes() + " ") - .appendSibling(GuiText.Types.textComponent())); + .func_230529_a_(GuiText.Of.text()).func_240702_b_(" " + cellInventory.getTotalItemTypes() + " ") + .func_230529_a_(GuiText.Types.text())); } if (handler.isPreformatted()) { @@ -66,11 +66,11 @@ public class ApiClientHelper implements IClientHelper { : GuiText.Excluded).getLocal(); if (handler.isFuzzy()) { - lines.add(GuiText.Partitioned.textComponent().appendText(" - " + list + " ") - .appendSibling(GuiText.Fuzzy.textComponent())); + lines.add(GuiText.Partitioned.withSuffix(" - " + list + " ") + .func_230529_a_(GuiText.Fuzzy.text())); } else { - lines.add(GuiText.Partitioned.textComponent().appendText(" - " + list + " ") - .appendSibling(GuiText.Precise.textComponent())); + lines.add(GuiText.Partitioned.withSuffix(" - " + list + " ") + .func_230529_a_(GuiText.Precise.text())); } } diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index d03dad71e..7d2c1487e 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -273,7 +273,7 @@ public final class ApiBlocks implements IBlocks { }).build(); this.quartzVibrantGlass = deco .block("quartz_vibrant_glass", - () -> new QuartzLampBlock(defaultProps(Material.GLASS).lightValue(15).notSolid())) + () -> new QuartzLampBlock(defaultProps(Material.GLASS).setLightLevel(b -> 15).notSolid())) .addFeatures(AEFeature.DECORATIVE_LIGHTS, AEFeature.QUARTZ_GLASS) .rendering(new BlockRenderingCustomizer() { @Override diff --git a/src/main/java/appeng/core/features/registries/WirelessRegistry.java b/src/main/java/appeng/core/features/registries/WirelessRegistry.java index 7ca6f2692..afd5e6bad 100644 --- a/src/main/java/appeng/core/features/registries/WirelessRegistry.java +++ b/src/main/java/appeng/core/features/registries/WirelessRegistry.java @@ -24,6 +24,7 @@ import java.util.List; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; +import net.minecraft.util.Util; import net.minecraft.world.IBlockReader; import appeng.api.features.ILocatable; @@ -77,28 +78,28 @@ public final class WirelessRegistry implements IWirelessTermRegistry { } if (!this.isWirelessTerminal(item)) { - player.sendMessage(PlayerMessages.DeviceNotWirelessTerminal.get()); + player.sendMessage(PlayerMessages.DeviceNotWirelessTerminal.get(), Util.DUMMY_UUID); return; } final IWirelessTermHandler handler = this.getWirelessTerminalHandler(item); final String unparsedKey = handler.getEncryptionKey(item); if (unparsedKey.isEmpty()) { - player.sendMessage(PlayerMessages.DeviceNotLinked.get()); + player.sendMessage(PlayerMessages.DeviceNotLinked.get(), Util.DUMMY_UUID); return; } final long parsedKey = Long.parseLong(unparsedKey); final ILocatable securityStation = Api.instance().registries().locatable().getLocatableBy(parsedKey); if (securityStation == null) { - player.sendMessage(PlayerMessages.StationCanNotBeLocated.get()); + player.sendMessage(PlayerMessages.StationCanNotBeLocated.get(), Util.DUMMY_UUID); return; } if (handler.hasPower(player, 0.5, item)) { ContainerOpener.openContainer(WirelessTermContainer.TYPE, player, ContainerLocator.forHand(player, hand)); } else { - player.sendMessage(PlayerMessages.DeviceNotPowered.get()); + player.sendMessage(PlayerMessages.DeviceNotPowered.get(), Util.DUMMY_UUID); } } } diff --git a/src/main/java/appeng/core/features/registries/WorldGenRegistry.java b/src/main/java/appeng/core/features/registries/WorldGenRegistry.java index b85839719..1a4fdda2b 100644 --- a/src/main/java/appeng/core/features/registries/WorldGenRegistry.java +++ b/src/main/java/appeng/core/features/registries/WorldGenRegistry.java @@ -25,6 +25,7 @@ import net.minecraft.world.Dimension; import net.minecraft.world.IWorld; import appeng.api.features.IWorldGen; +import net.minecraft.world.server.ServerWorld; public final class WorldGenRegistry implements IWorldGen { @@ -40,19 +41,6 @@ public final class WorldGenRegistry implements IWorldGen { } } - @Override - public void disableWorldGenForProviderID(WorldGenType type, Class provider) { - if (type == null) { - throw new IllegalArgumentException("Bad Type Passed"); - } - - if (provider == null) { - throw new IllegalArgumentException("Bad Provider Passed"); - } - - this.types[type.ordinal()].badProviders.add(provider); - } - @Override public void enableWorldGenForDimension(final WorldGenType type, final ResourceLocation dimensionID) { if (type == null) { @@ -72,7 +60,7 @@ public final class WorldGenRegistry implements IWorldGen { } @Override - public boolean isWorldGenEnabled(final WorldGenType type, final IWorld w) { + public boolean isWorldGenEnabled(final WorldGenType type, final ServerWorld w) { if (type == null) { throw new IllegalArgumentException("Bad Type Passed"); } @@ -81,12 +69,11 @@ public final class WorldGenRegistry implements IWorldGen { throw new IllegalArgumentException("Bad Provider Passed"); } - ResourceLocation id = w.getDimension().getType().getRegistryName(); - final boolean isBadProvider = this.types[type.ordinal()].badProviders.contains(w.getDimension().getClass()); + ResourceLocation id = w.func_234923_W_().func_240901_a_(); final boolean isBadDimension = this.types[type.ordinal()].badDimensions.contains(id); final boolean isGoodDimension = this.types[type.ordinal()].enabledDimensions.contains(id); - if (isBadProvider || isBadDimension) { + if (isBadDimension) { return false; } @@ -99,7 +86,6 @@ public final class WorldGenRegistry implements IWorldGen { private static class TypeSet { - final HashSet> badProviders = new HashSet<>(); final HashSet badDimensions = new HashSet<>(); final HashSet enabledDimensions = new HashSet<>(); } diff --git a/src/main/java/appeng/core/localization/ButtonToolTips.java b/src/main/java/appeng/core/localization/ButtonToolTips.java index 33af3b09e..1a6b2b78f 100644 --- a/src/main/java/appeng/core/localization/ButtonToolTips.java +++ b/src/main/java/appeng/core/localization/ButtonToolTips.java @@ -18,6 +18,7 @@ package appeng.core.localization; +import net.minecraft.util.text.IFormattableTextComponent; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; @@ -70,23 +71,18 @@ public enum ButtonToolTips { FilterMode, FilterModeKeep, FilterModeClear; - private final String root; + private final TranslationTextComponent text; ButtonToolTips() { - this.root = "gui.tooltips.appliedenergistics2"; + this.text = new TranslationTextComponent("gui.tooltips.appliedenergistics2." + this.name()); } - ButtonToolTips(final String r) { - this.root = r; + public ITextComponent text() { + return text; } - @Deprecated - public String getLocal() { - return getTranslationKey().getFormattedText(); - } - - public ITextComponent getTranslationKey() { - return new TranslationTextComponent(this.root + '.' + this.toString()); + public IFormattableTextComponent text(Object... args) { + return new TranslationTextComponent(text.getKey(), args); } } diff --git a/src/main/java/appeng/core/localization/GuiText.java b/src/main/java/appeng/core/localization/GuiText.java index bfab69363..ae0827201 100644 --- a/src/main/java/appeng/core/localization/GuiText.java +++ b/src/main/java/appeng/core/localization/GuiText.java @@ -18,6 +18,7 @@ package appeng.core.localization; +import net.minecraft.util.text.IFormattableTextComponent; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; @@ -85,27 +86,39 @@ public enum GuiText { private final String root; + private final ITextComponent text; + GuiText() { this.root = "gui.appliedenergistics2"; + this.text = new TranslationTextComponent(getTranslationKey()); } GuiText(final String r) { this.root = r; + this.text = new TranslationTextComponent(getTranslationKey()); } - + public String getLocal() { - return this.textComponent().getString(); + return text.getString(); } public String getTranslationKey() { return this.root + '.' + this.toString(); } - public ITextComponent textComponent() { - return new TranslationTextComponent(getTranslationKey()); + public ITextComponent text() { + return text; } - public ITextComponent textComponent(Object... args) { + public IFormattableTextComponent withSuffix(String text) { + return text().deepCopy().func_240702_b_(text); + } + + public IFormattableTextComponent withSuffix(ITextComponent text) { + return text().deepCopy().func_230529_a_(text); + } + + public IFormattableTextComponent text(Object... args) { return new TranslationTextComponent(getTranslationKey(), args); } diff --git a/src/main/java/appeng/core/stats/AppEngAdvancementTrigger.java b/src/main/java/appeng/core/stats/AppEngAdvancementTrigger.java index 36af1101e..557ff8c3d 100644 --- a/src/main/java/appeng/core/stats/AppEngAdvancementTrigger.java +++ b/src/main/java/appeng/core/stats/AppEngAdvancementTrigger.java @@ -28,11 +28,14 @@ import java.util.Set; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; +import net.minecraft.advancements.ICriterionInstance; import net.minecraft.advancements.ICriterionTrigger; import net.minecraft.advancements.PlayerAdvancements; import net.minecraft.advancements.criterion.CriterionInstance; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.loot.ConditionArrayParser; +import net.minecraft.loot.ConditionArraySerializer; import net.minecraft.util.ResourceLocation; import appeng.core.AppEng; @@ -85,7 +88,7 @@ public class AppEngAdvancementTrigger } @Override - public AppEngAdvancementTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) { + public Instance func_230307_a_(JsonObject p_230307_1_, ConditionArrayParser p_230307_2_) { return new AppEngAdvancementTrigger.Instance(this.getId()); } @@ -98,14 +101,26 @@ public class AppEngAdvancementTrigger } } - public static class Instance extends CriterionInstance { - public Instance(ResourceLocation parID) { - super(parID); + public static class Instance implements ICriterionInstance { + private final ResourceLocation id; + + public Instance(ResourceLocation id) { + this.id = id; } public boolean test() { return true; } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public JsonObject func_230240_a_(ConditionArraySerializer p_230240_1_) { + return new JsonObject(); + } } static class Listeners { diff --git a/src/main/java/appeng/core/sync/network/NetworkHandler.java b/src/main/java/appeng/core/sync/network/NetworkHandler.java index 0cd10f6d8..47aec7167 100644 --- a/src/main/java/appeng/core/sync/network/NetworkHandler.java +++ b/src/main/java/appeng/core/sync/network/NetworkHandler.java @@ -25,8 +25,10 @@ import net.minecraft.network.IPacket; import net.minecraft.network.ThreadQuickExitException; import net.minecraft.network.play.ServerPlayNetHandler; import net.minecraft.server.MinecraftServer; +import net.minecraft.util.RegistryKey; import net.minecraft.util.ResourceLocation; import net.minecraft.world.DimensionType; +import net.minecraft.world.World; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.LogicalSide; @@ -119,15 +121,10 @@ public class NetworkHandler { public void sendToAllAround(final BasePacket message, final TargetPoint point) { IPacket pkt = message.toPacket(NetworkDirection.PLAY_TO_CLIENT); - getServer().getPlayerList().sendToAllNearExcept(point.excluded, point.x, point.y, point.z, point.r2, point.dim, + getServer().getPlayerList().sendToAllNearExcept(point.excluded, point.x, point.y, point.z, point.r2, point.world.func_234923_W_(), pkt); } - public void sendToDimension(final BasePacket message, final DimensionType dim) { - getServer().getPlayerList().sendPacketToAllPlayersInDimension(message.toPacket(NetworkDirection.PLAY_TO_CLIENT), - dim); - } - public void sendToServer(final BasePacket message) { Minecraft.getInstance().getConnection().sendPacket(message.toPacket(NetworkDirection.PLAY_TO_SERVER)); } diff --git a/src/main/java/appeng/core/sync/network/TargetPoint.java b/src/main/java/appeng/core/sync/network/TargetPoint.java index e2df6e53d..b9b6a28ab 100644 --- a/src/main/java/appeng/core/sync/network/TargetPoint.java +++ b/src/main/java/appeng/core/sync/network/TargetPoint.java @@ -2,6 +2,7 @@ package appeng.core.sync.network; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.world.DimensionType; +import net.minecraft.world.World; /** * Created by covers1624 on 1/6/20. @@ -13,27 +14,27 @@ public class TargetPoint { public final double y; public final double z; public final double r2; - public final DimensionType dim; + public final World world; - public TargetPoint(double x, double y, double z, double r2, DimensionType dim) { - this(null, x, y, z, r2, dim); + public TargetPoint(double x, double y, double z, double r2, World world) { + this(null, x, y, z, r2, world); } - public TargetPoint(ServerPlayerEntity excluded, double x, double y, double z, double r2, DimensionType dim) { + public TargetPoint(ServerPlayerEntity excluded, double x, double y, double z, double r2, World world) { this.excluded = excluded; this.x = x; this.y = y; this.z = z; this.r2 = r2; - this.dim = dim; + this.world = world; } - public static TargetPoint at(double x, double y, double z, double r2, DimensionType dim) { - return new TargetPoint(x, y, z, r2, dim); + public static TargetPoint at(double x, double y, double z, double r2, World world) { + return new TargetPoint(x, y, z, r2, world); } public static TargetPoint at(ServerPlayerEntity excluded, double x, double y, double z, double r2, - DimensionType dim) { - return new TargetPoint(excluded, x, y, z, r2, dim); + World world) { + return new TargetPoint(excluded, x, y, z, r2, world); } } diff --git a/src/main/java/appeng/core/worlddata/WorldData.java b/src/main/java/appeng/core/worlddata/WorldData.java index a4a0d52f1..0e89e2422 100644 --- a/src/main/java/appeng/core/worlddata/WorldData.java +++ b/src/main/java/appeng/core/worlddata/WorldData.java @@ -62,9 +62,9 @@ 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.func_234923_W_() != ServerWorld.field_234918_g_) { throw new IllegalStateException( - "The server doesn't have an Overworld dimension we could store our data on!"); + "The server doesn't have an overworld we could store our data on!"); } final PlayerData playerData = overworld.getSavedData().getOrCreate(PlayerData::new, PlayerData.NAME); @@ -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.getWorld(ServerWorld.field_234918_g_); instance = new WorldData(overworld); } return instance; diff --git a/src/main/java/appeng/debug/ChunkLoaderTileEntity.java b/src/main/java/appeng/debug/ChunkLoaderTileEntity.java index 9cc3a93bd..9dc2b6aaf 100644 --- a/src/main/java/appeng/debug/ChunkLoaderTileEntity.java +++ b/src/main/java/appeng/debug/ChunkLoaderTileEntity.java @@ -65,7 +65,7 @@ public class ChunkLoaderTileEntity extends AEBaseTileEntity implements ITickable if (!serverWorld.getForcedChunks().contains(chunkPos.asLong())) { AELog.debug("Force-loading chunk @ %d,%d in %s", chunkPos.x, chunkPos.z, - serverWorld.dimension.getType().getRegistryName()); + serverWorld.func_234923_W_()); serverWorld.forceChunk(chunkPos.x, chunkPos.z, false); } } diff --git a/src/main/java/appeng/debug/CubeGeneratorTileEntity.java b/src/main/java/appeng/debug/CubeGeneratorTileEntity.java index a69e174f5..48a47103b 100644 --- a/src/main/java/appeng/debug/CubeGeneratorTileEntity.java +++ b/src/main/java/appeng/debug/CubeGeneratorTileEntity.java @@ -26,6 +26,7 @@ import net.minecraft.item.ItemUseContext; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; +import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.StringTextComponent; @@ -51,7 +52,7 @@ public class CubeGeneratorTileEntity extends AEBaseTileEntity implements ITickab if (this.countdown % 20 == 0) { for (final PlayerEntity e : AppEng.proxy.getPlayers()) { - e.sendMessage(new StringTextComponent("Spawning in... " + (this.countdown / 20))); + e.sendMessage(new StringTextComponent("Spawning in... " + (this.countdown / 20)), Util.DUMMY_UUID); } } @@ -102,7 +103,7 @@ public class CubeGeneratorTileEntity extends AEBaseTileEntity implements ITickab this.size = 64; } - player.sendMessage(new StringTextComponent("Size: " + this.size)); + player.sendMessage(new StringTextComponent("Size: " + this.size), Util.DUMMY_UUID); } else { this.countdown = 20 * 10; this.is = hand; diff --git a/src/main/java/appeng/debug/DebugCardItem.java b/src/main/java/appeng/debug/DebugCardItem.java index 87698cc8b..58ad6bf57 100644 --- a/src/main/java/appeng/debug/DebugCardItem.java +++ b/src/main/java/appeng/debug/DebugCardItem.java @@ -28,6 +28,7 @@ import net.minecraft.item.ItemUseContext; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; +import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.StringTextComponent; import net.minecraft.world.World; @@ -186,7 +187,7 @@ public class DebugCardItem extends AEBaseItem { } private void outputMsg(final Entity player, final String string) { - player.sendMessage(new StringTextComponent(string)); + player.sendMessage(new StringTextComponent(string), Util.DUMMY_UUID); } private String timeMeasurement(final long nanos) { diff --git a/src/main/java/appeng/debug/DebugPartPlacerItem.java b/src/main/java/appeng/debug/DebugPartPlacerItem.java index e9887d000..b0af73c9e 100644 --- a/src/main/java/appeng/debug/DebugPartPlacerItem.java +++ b/src/main/java/appeng/debug/DebugPartPlacerItem.java @@ -9,6 +9,7 @@ import net.minecraft.item.ItemUseContext; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; +import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3i; import net.minecraft.util.text.StringTextComponent; @@ -49,19 +50,19 @@ public class DebugPartPlacerItem extends AEBaseItem { } if (!player.abilities.isCreativeMode) { - player.sendMessage(new StringTextComponent("Only usable in creative mode")); + player.sendMessage(new StringTextComponent("Only usable in creative mode"), Util.DUMMY_UUID); return ActionResultType.FAIL; } TileEntity te = world.getTileEntity(pos); if (!(te instanceof IPartHost)) { - player.sendMessage(new StringTextComponent("Right-click something that will accept parts")); + player.sendMessage(new StringTextComponent("Right-click something that will accept parts"), Util.DUMMY_UUID); return ActionResultType.FAIL; } IPartHost center = (IPartHost) te; IPart cable = center.getPart(AEPartLocation.INTERNAL); if (cable == null) { - player.sendMessage(new StringTextComponent("Clicked part host must have an INSIDE part")); + player.sendMessage(new StringTextComponent("Clicked part host must have an INSIDE part"), Util.DUMMY_UUID); return ActionResultType.FAIL; } diff --git a/src/main/java/appeng/debug/MeteoritePlacerItem.java b/src/main/java/appeng/debug/MeteoritePlacerItem.java index c26eb3763..9b3f3410b 100644 --- a/src/main/java/appeng/debug/MeteoritePlacerItem.java +++ b/src/main/java/appeng/debug/MeteoritePlacerItem.java @@ -27,6 +27,7 @@ import net.minecraft.network.play.server.SChunkDataPacket; import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; +import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.MutableBoundingBox; @@ -69,7 +70,7 @@ public class MeteoritePlacerItem extends AEBaseItem { CraterType craterType = CraterType.values()[tag.getByte(MODE_TAG)]; - player.sendMessage(new StringTextComponent(craterType.name())); + player.sendMessage(new StringTextComponent(craterType.name()), Util.DUMMY_UUID); return ActionResult.resultSuccess(itemStack); } @@ -106,7 +107,7 @@ public class MeteoritePlacerItem extends AEBaseItem { pureCrater, false); if (spawned == null) { - player.sendMessage(new StringTextComponent("Un-suitable Location.")); + player.sendMessage(new StringTextComponent("Un-suitable Location."), Util.DUMMY_UUID); return ActionResultType.FAIL; } @@ -121,14 +122,14 @@ public class MeteoritePlacerItem extends AEBaseItem { placer.place(); player.sendMessage(new StringTextComponent("Spawned at y=" + spawned.getPos().getY() + " range=" + range - + " biomeCategory=" + world.getBiome(pos).getCategory())); + + " biomeCategory=" + world.getBiome(pos).getCategory()), Util.DUMMY_UUID); // The placer will not send chunks to the player since it's used as part // of world-gen normally, so we'll have to do it ourselves. Since this // is a debug tool, we'll not care about being terribly efficient here ChunkPos.getAllInBox(new ChunkPos(spawned.getPos()), 1).forEach(cp -> { Chunk c = world.getChunk(cp.x, cp.z); - player.connection.sendPacket(new SChunkDataPacket(c, 65535)); // 65535 == full chunk + player.connection.sendPacket(new SChunkDataPacket(c, 65535, false)); // 65535 == full chunk }); return ActionResultType.SUCCESS; diff --git a/src/main/java/appeng/debug/ReplicatorCardItem.java b/src/main/java/appeng/debug/ReplicatorCardItem.java index 461549397..917d90761 100644 --- a/src/main/java/appeng/debug/ReplicatorCardItem.java +++ b/src/main/java/appeng/debug/ReplicatorCardItem.java @@ -30,8 +30,12 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Hand; +import net.minecraft.util.RegistryKey; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.registry.Registry; import net.minecraft.util.text.StringTextComponent; import net.minecraft.world.DimensionType; import net.minecraft.world.World; @@ -64,7 +68,7 @@ public class ReplicatorCardItem extends AEBaseItem { tag.putInt("r", replications); - playerIn.sendMessage(new StringTextComponent((replications + 1) + "³ Replications")); + playerIn.sendMessage(new StringTextComponent((replications + 1) + "³ Replications"), Util.DUMMY_UUID); } return super.onItemRightClick(worldIn, playerIn, handIn); @@ -98,7 +102,7 @@ public class ReplicatorCardItem extends AEBaseItem { tag.putInt("y", y); tag.putInt("z", z); tag.putInt("side", side.ordinal()); - tag.putInt("dimid", world.getDimension().getType().getId()); + tag.putString("w", world.func_234923_W_().func_240901_a_().toString()); tag.putInt("r", 0); this.outputMsg(player, "Set replicator source"); @@ -112,8 +116,9 @@ public class ReplicatorCardItem extends AEBaseItem { final int src_y = ish.getInt("y"); final int src_z = ish.getInt("z"); final int src_side = ish.getInt("side"); - final int dimid = ish.getInt("dimid"); - final World src_w = world.getServer().getWorld(DimensionType.getById(dimid)); + final String worldId = ish.getString("w"); + final World src_w = world.getServer() + .getWorld(RegistryKey.func_240903_a_(Registry.WORLD_KEY, new ResourceLocation(worldId))); final int replications = ish.getInt("r") + 1; final TileEntity te = src_w.getTileEntity(new BlockPos(src_x, src_y, src_z)); @@ -182,7 +187,7 @@ public class ReplicatorCardItem extends AEBaseItem { final TileEntity nte = blk.createTileEntity(state, world); final CompoundNBT data = new CompoundNBT(); ote.write(data); - nte.read(data.copy()); + nte.read(state, data.copy()); world.setTileEntity(d, nte); } world.notifyBlockUpdate(d, prev, state, 3); @@ -212,6 +217,6 @@ public class ReplicatorCardItem extends AEBaseItem { } private void outputMsg(final Entity player, final String string) { - player.sendMessage(new StringTextComponent(string)); + player.sendMessage(new StringTextComponent(string), Util.DUMMY_UUID); } } diff --git a/src/main/java/appeng/decorative/solid/SkyStoneBlock.java b/src/main/java/appeng/decorative/solid/SkyStoneBlock.java index 853e344c6..74e89090b 100644 --- a/src/main/java/appeng/decorative/solid/SkyStoneBlock.java +++ b/src/main/java/appeng/decorative/solid/SkyStoneBlock.java @@ -67,8 +67,8 @@ public class SkyStoneBlock extends AEBaseBlock { public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { if (worldIn instanceof ServerWorld) { - WorldData.instance().compassData().service().updateArea(worldIn, new ChunkPos(currentPos), - currentPos.getY()); + ServerWorld serverWorld = (ServerWorld) worldIn; + WorldData.instance().compassData().service().notifyBlockChange(serverWorld, currentPos); } return super.updatePostPlacement(stateIn, facing, facingState, worldIn, currentPos, facingPos); @@ -83,7 +83,8 @@ public class SkyStoneBlock extends AEBaseBlock { super.onReplaced(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().notifyBlockChange(serverWorld, pos); } } diff --git a/src/main/java/appeng/entity/TinyTNTPrimedEntity.java b/src/main/java/appeng/entity/TinyTNTPrimedEntity.java index c87735070..f90533cce 100644 --- a/src/main/java/appeng/entity/TinyTNTPrimedEntity.java +++ b/src/main/java/appeng/entity/TinyTNTPrimedEntity.java @@ -87,7 +87,7 @@ public final class TinyTNTPrimedEntity extends TNTEntity implements IEntityAddit */ @Override public void tick() { - this.handleWaterMovement(); + this.func_233566_aG_(); this.prevPosX = this.getPosX(); this.prevPosY = this.getPosY(); @@ -168,11 +168,11 @@ public final class TinyTNTPrimedEntity extends TNTEntity implements IEntityAddit + ((y + 0.5f) - this.getPosY()) * ((y + 0.5f) - this.getPosY()) + ((z + 0.5f) - this.getPosZ()) * ((z + 0.5f) - this.getPosZ()))); - final float resistance = block.getExplosionResistance(state, this.world, point, this, ex); + final float resistance = block.getExplosionResistance(state, this.world, point, ex); strength -= (resistance + 0.3F) * 0.11f; if (strength > 0.01) { - if (block.getRenderMaterial(state) != Material.AIR) { + if (state.getMaterial() != Material.AIR) { if (block.canDropFromExplosion(ex)) { block.spawnDrops(state, this.world, point); } diff --git a/src/main/java/appeng/fluids/client/gui/FluidFormationPlaneScreen.java b/src/main/java/appeng/fluids/client/gui/FluidFormationPlaneScreen.java index ead2a679d..6ee197b30 100644 --- a/src/main/java/appeng/fluids/client/gui/FluidFormationPlaneScreen.java +++ b/src/main/java/appeng/fluids/client/gui/FluidFormationPlaneScreen.java @@ -45,7 +45,7 @@ public class FluidFormationPlaneScreen extends UpgradeableScreen openPriorityGui())); } diff --git a/src/main/java/appeng/fluids/client/gui/FluidInterfaceScreen.java b/src/main/java/appeng/fluids/client/gui/FluidInterfaceScreen.java index d1245dd19..d2fb64b51 100644 --- a/src/main/java/appeng/fluids/client/gui/FluidInterfaceScreen.java +++ b/src/main/java/appeng/fluids/client/gui/FluidInterfaceScreen.java @@ -58,7 +58,7 @@ public class FluidInterfaceScreen extends UpgradeableScreen openPriorityGui())); + GuiText.Priority.text(), this.itemRenderer, btn -> openPriorityGui())); } @Override @@ -67,7 +67,7 @@ public class FluidInterfaceScreen extends UpgradeableScreen(this.guiLeft - 18, this.guiTop + 88, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL); - addButton(this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.textComponent(), + addButton(this.addButton(new TabButton(this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.text(), this.itemRenderer, btn -> openPriorityGui()))); this.addButton(this.storageFilter); @@ -100,8 +100,8 @@ public class FluidStorageBusScreen extends UpgradeableScreen } @Override - protected void renderHoveredToolTip(MatrixStack matrixStack, int mouseX, int mouseY) { + protected void func_230459_a_(MatrixStack matrixStack, int mouseX, int mouseY) { final Slot slot = this.getSlot(mouseX, mouseY); if (slot instanceof IMEFluidSlot && slot.isEnabled()) { @@ -170,18 +171,17 @@ public class FluidTerminalScreen extends AEBaseMEScreen final String modName = Platform.getModName(Platform.getModId(fluidStack)); - final List list = new ArrayList<>(); - - list.add(fluidStack.getFluidStack().getDisplayName().getString()); - list.add(formattedAmount); - list.add(modName); + final List list = new ArrayList<>(); + list.add(fluidStack.getFluidStack().getDisplayName()); + list.add(new StringTextComponent(formattedAmount)); + list.add(new StringTextComponent(modName)); this.renderTooltip(matrixStack, list, mouseX, mouseY); return; } } - super.renderHoveredToolTip(matrixStack, mouseX, mouseY); + super.func_230459_a_(matrixStack, mouseX, mouseY); } private > void toggleServerSetting(SettingToggleButton btn, boolean backwards) { 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 596edc5ce..f765fb2a4 100644 --- a/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java +++ b/src/main/java/appeng/fluids/client/gui/widgets/FluidTankWidget.java @@ -91,10 +91,8 @@ public class FluidTankWidget extends Widget implements ITooltip { public ITextComponent getMessage() { final IAEFluidStack fluid = this.tank.getFluidInSlot(this.slot); if (fluid != null && fluid.getStackSize() > 0) { - String desc = fluid.getFluid().getAttributes().getDisplayName(fluid.getFluidStack()).getFormattedText(); - String amountToText = fluid.getStackSize() + "mB"; - - return new StringTextComponent(desc + "\n" + amountToText); + return fluid.getFluid().getAttributes().getDisplayName(fluid.getFluidStack()).deepCopy() + .func_240702_b_("\n" + (fluid.getStackSize() + "mB")); } return new StringTextComponent(""); } diff --git a/src/main/java/appeng/fluids/tile/FluidInterfaceTileEntity.java b/src/main/java/appeng/fluids/tile/FluidInterfaceTileEntity.java index 95af9e7af..9628a4ad1 100644 --- a/src/main/java/appeng/fluids/tile/FluidInterfaceTileEntity.java +++ b/src/main/java/appeng/fluids/tile/FluidInterfaceTileEntity.java @@ -22,6 +22,7 @@ import java.util.EnumSet; import javax.annotation.Nullable; +import net.minecraft.block.BlockState; import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; @@ -102,8 +103,8 @@ public class FluidInterfaceTileEntity extends AENetworkTileEntity } @Override - public void read(final CompoundNBT data) { - super.read(data); + public void read(BlockState state, final CompoundNBT data) { + super.read(state, data); this.duality.readFromNBT(data); } diff --git a/src/main/java/appeng/helpers/InvalidPatternHelper.java b/src/main/java/appeng/helpers/InvalidPatternHelper.java index b1d1d90e9..85cfd2f90 100644 --- a/src/main/java/appeng/helpers/InvalidPatternHelper.java +++ b/src/main/java/appeng/helpers/InvalidPatternHelper.java @@ -24,6 +24,7 @@ import java.util.List; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; +import net.minecraft.util.text.IFormattableTextComponent; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; @@ -125,10 +126,10 @@ public class InvalidPatternHelper { } public ITextComponent getFormattedToolTip() { - ITextComponent result = new StringTextComponent(this.getCount() + " ").appendSibling(this.getName()); + IFormattableTextComponent result = new StringTextComponent(this.getCount() + " ").func_230529_a_(this.getName()); if (!this.isValid()) { - result.applyTextStyle(TextFormatting.RED); + result.func_240699_a_(TextFormatting.RED); } return result; diff --git a/src/main/java/appeng/helpers/MetaRotation.java b/src/main/java/appeng/helpers/MetaRotation.java index fe68fc092..61d3a40d2 100644 --- a/src/main/java/appeng/helpers/MetaRotation.java +++ b/src/main/java/appeng/helpers/MetaRotation.java @@ -58,12 +58,12 @@ public class MetaRotation implements IOrientable { public Direction getUp() { final BlockState state = this.w.getBlockState(this.pos); - if (this.facingProp != null && state.has(this.facingProp)) { + if (this.facingProp != null && state.func_235901_b_(this.facingProp) ) { return state.get(this.facingProp); } // TODO 1.10.2-R - Temp - if (state.has(QuartzPillarBlock.AXIS)) { + if (state.func_235901_b_(QuartzPillarBlock.AXIS)) { Axis a = state.get(QuartzPillarBlock.AXIS); switch (a) { case X: diff --git a/src/main/java/appeng/hooks/DynamicDimensions.java b/src/main/java/appeng/hooks/DynamicDimensions.java new file mode 100644 index 000000000..65a6b1190 --- /dev/null +++ b/src/main/java/appeng/hooks/DynamicDimensions.java @@ -0,0 +1,14 @@ +package appeng.hooks; + +import net.minecraft.util.RegistryKey; +import net.minecraft.world.DimensionType; +import net.minecraft.world.World; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.server.ServerWorld; + +public interface DynamicDimensions { + + ServerWorld addWorld(RegistryKey worldId, RegistryKey dimensionTypeId, + ChunkGenerator chunkGenerator); + +} diff --git a/src/main/java/appeng/integration/modules/jei/CondenserCategory.java b/src/main/java/appeng/integration/modules/jei/CondenserCategory.java index 975c32987..1a0691deb 100644 --- a/src/main/java/appeng/integration/modules/jei/CondenserCategory.java +++ b/src/main/java/appeng/integration/modules/jei/CondenserCategory.java @@ -28,6 +28,7 @@ import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.mojang.blaze3d.matrix.MatrixStack; +import jdk.nashorn.internal.objects.annotations.Function; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -43,7 +44,6 @@ import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; import mezz.jei.api.helpers.IGuiHelper; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.category.IRecipeCategory; -import mezz.jei.gui.HoverChecker; import appeng.api.config.CondenserOutput; import appeng.api.definitions.IMaterials; @@ -68,8 +68,6 @@ class CondenserCategory implements IRecipeCategory { private final IDrawable icon; - private final HoverChecker buttonHoverChecker; - private final Map buttonIcons; public CondenserCategory(IGuiHelper guiHelper) { @@ -94,7 +92,6 @@ class CondenserCategory implements IRecipeCategory { guiHelper.drawableBuilder(statesLocation, 16, 112, 14, 14).addPadding(28, 0, 78, 0).build()); this.buttonIcons.put(CondenserOutput.SINGULARITY, guiHelper.drawableBuilder(statesLocation, 32, 112, 14, 14).addPadding(28, 0, 78, 0).build()); - this.buttonHoverChecker = new HoverChecker(28, 28 + 16, 78, 78 + 16); } private ItemStack getOutput(CondenserOutput recipe) { @@ -189,7 +186,7 @@ class CondenserCategory implements IRecipeCategory { @Override public List getTooltipStrings(CondenserOutput output, double mouseX, double mouseY) { - if (this.buttonHoverChecker.checkHover((int) mouseX, (int) mouseY)) { + if (mouseX >= 28 && mouseX < 28 + 16 && mouseY >= 78 && mouseY < 78 + 16) { String key; switch (output) { diff --git a/src/main/java/appeng/integration/modules/jei/InscriberRecipeCategory.java b/src/main/java/appeng/integration/modules/jei/InscriberRecipeCategory.java index 0d9b1d408..6398f3092 100644 --- a/src/main/java/appeng/integration/modules/jei/InscriberRecipeCategory.java +++ b/src/main/java/appeng/integration/modules/jei/InscriberRecipeCategory.java @@ -18,6 +18,7 @@ package appeng.integration.modules.jei; +import com.mojang.blaze3d.matrix.MatrixStack; import net.minecraft.client.resources.I18n; import net.minecraft.util.ResourceLocation; @@ -109,7 +110,7 @@ class InscriberRecipeCategory implements IRecipeCategory { } @Override - public void draw(InscriberRecipe recipe, double mouseX, double mouseY) { - this.progress.draw(); + public void draw(InscriberRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) { + this.progress.draw(matrixStack); } } diff --git a/src/main/java/appeng/integration/modules/theoneprobe/TheOneProbeText.java b/src/main/java/appeng/integration/modules/theoneprobe/TheOneProbeText.java index d68e12753..b2179736e 100644 --- a/src/main/java/appeng/integration/modules/theoneprobe/TheOneProbeText.java +++ b/src/main/java/appeng/integration/modules/theoneprobe/TheOneProbeText.java @@ -32,10 +32,6 @@ public enum TheOneProbeText { this.root = "theoneprobe.appliedenergistics2"; } - public String getTranslationString(Object... args) { - return getTranslationComponent(args).getFormattedText(); - } - public TranslationTextComponent getTranslationComponent(Object... args) { return new TranslationTextComponent(this.getUnlocalized(), args); } diff --git a/src/main/java/appeng/items/misc/CrystalSeedItem.java b/src/main/java/appeng/items/misc/CrystalSeedItem.java index d83572a75..66e45ae1a 100644 --- a/src/main/java/appeng/items/misc/CrystalSeedItem.java +++ b/src/main/java/appeng/items/misc/CrystalSeedItem.java @@ -29,6 +29,7 @@ import net.minecraft.block.material.Material; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemModelsProperties; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.IItemProvider; @@ -71,7 +72,7 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal { super(properties); this.grownItem = Preconditions.checkNotNull(grownItem); // Expose the growth of the seed to the model system - addPropertyOverride(new ResourceLocation("appliedenergistics2:growth"), + ItemModelsProperties.func_239418_a_(this, new ResourceLocation("appliedenergistics2:growth"), (is, w, p) -> getGrowthTicks(is) / (float) GROWTH_TICKS_REQUIRED); } @@ -106,7 +107,7 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal { @OnlyIn(Dist.CLIENT) public void addInformation(final ItemStack stack, final World world, final List lines, final ITooltipFlag advancedTooltips) { - lines.add(ButtonToolTips.DoesntDespawn.getTranslationKey()); + lines.add(ButtonToolTips.DoesntDespawn.text()); lines.add(getGrowthTooltipItem(stack)); super.addInformation(stack, world, lines, advancedTooltips); diff --git a/src/main/java/appeng/items/misc/EncodedPatternItem.java b/src/main/java/appeng/items/misc/EncodedPatternItem.java index 133fb3e2f..d9f44bb92 100644 --- a/src/main/java/appeng/items/misc/EncodedPatternItem.java +++ b/src/main/java/appeng/items/misc/EncodedPatternItem.java @@ -116,15 +116,15 @@ public class EncodedPatternItem extends AEBaseItem { return; } - stack.setDisplayName(GuiText.InvalidPattern.textComponent().deepCopy().func_240701_a_(TextFormatting.RED)); + stack.setDisplayName(GuiText.InvalidPattern.text().deepCopy().func_240701_a_(TextFormatting.RED)); InvalidPatternHelper invalid = new InvalidPatternHelper(stack); - final ITextComponent label = (invalid.isCraftable() ? GuiText.Crafts.textComponent() - : GuiText.Creates.textComponent()).deepCopy().func_240702_b_(": "); + final ITextComponent label = (invalid.isCraftable() ? GuiText.Crafts.text() + : GuiText.Creates.text()).deepCopy().func_240702_b_(": "); final ITextComponent and = new StringTextComponent(" ").deepCopy() - .func_230529_a_(GuiText.And.textComponent()).deepCopy().func_240702_b_(" "); - final ITextComponent with = GuiText.With.textComponent().deepCopy().func_240702_b_(": "); + .func_230529_a_(GuiText.And.text()).deepCopy().func_240702_b_(" "); + final ITextComponent with = GuiText.With.text().deepCopy().func_240702_b_(": "); boolean first = true; for (final InvalidPatternHelper.PatternIngredient output : invalid.getOutputs()) { @@ -139,10 +139,10 @@ public class EncodedPatternItem extends AEBaseItem { } if (invalid.isCraftable()) { - final ITextComponent substitutionLabel = GuiText.Substitute.textComponent().deepCopy() + final ITextComponent substitutionLabel = GuiText.Substitute.text().deepCopy() .func_240702_b_(" "); - final ITextComponent canSubstitute = invalid.canSubstitute() ? GuiText.Yes.textComponent() - : GuiText.No.textComponent(); + final ITextComponent canSubstitute = invalid.canSubstitute() ? GuiText.Yes.text() + : GuiText.No.text(); lines.add(substitutionLabel.deepCopy().func_230529_a_(canSubstitute)); } @@ -160,11 +160,11 @@ public class EncodedPatternItem extends AEBaseItem { final Collection in = details.getInputs(); final Collection out = details.getOutputs(); - final ITextComponent label = (isCrafting ? GuiText.Crafts.textComponent() : GuiText.Creates.textComponent()) + final ITextComponent label = (isCrafting ? GuiText.Crafts.text() : GuiText.Creates.text()) .deepCopy().func_240702_b_(": "); - final ITextComponent and = new StringTextComponent(" ").deepCopy().func_230529_a_(GuiText.And.textComponent()) + final ITextComponent and = new StringTextComponent(" ").deepCopy().func_230529_a_(GuiText.And.text()) .func_240702_b_(" "); - final ITextComponent with = GuiText.With.textComponent().deepCopy().func_240702_b_(": "); + final ITextComponent with = GuiText.With.text().deepCopy().func_240702_b_(": "); boolean first = true; for (final IAEItemStack anOut : out) { @@ -189,8 +189,8 @@ public class EncodedPatternItem extends AEBaseItem { } if (isCrafting) { - final ITextComponent substitutionLabel = GuiText.Substitute.textComponent().deepCopy().func_240702_b_(" "); - final ITextComponent canSubstitute = substitute ? GuiText.Yes.textComponent() : GuiText.No.textComponent(); + final ITextComponent substitutionLabel = GuiText.Substitute.text().deepCopy().func_240702_b_(" "); + final ITextComponent canSubstitute = substitute ? GuiText.Yes.text() : GuiText.No.text(); lines.add(substitutionLabel.deepCopy().func_230529_a_(canSubstitute)); } diff --git a/src/main/java/appeng/items/parts/FacadeItem.java b/src/main/java/appeng/items/parts/FacadeItem.java index 30fc5ccea..cb73ff718 100644 --- a/src/main/java/appeng/items/parts/FacadeItem.java +++ b/src/main/java/appeng/items/parts/FacadeItem.java @@ -77,7 +77,7 @@ public class FacadeItem extends AEBaseItem implements IFacadeItem, IAlphaPassIte try { final ItemStack in = this.getTextureItem(is); if (!in.isEmpty()) { - return super.getDisplayName(is).deepCopy().appendText(" - ").appendSibling(in.getDisplayName()); + return super.getDisplayName(is).deepCopy().func_240702_b_(" - ").func_230529_a_(in.getDisplayName()); } } catch (final Throwable ignored) { diff --git a/src/main/java/appeng/items/storage/SpatialStorageCellItem.java b/src/main/java/appeng/items/storage/SpatialStorageCellItem.java index a13bc0223..71f05688b 100644 --- a/src/main/java/appeng/items/storage/SpatialStorageCellItem.java +++ b/src/main/java/appeng/items/storage/SpatialStorageCellItem.java @@ -23,13 +23,16 @@ import java.util.List; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.RegistryKey; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.registry.Registry; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.DimensionType; import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -57,17 +60,17 @@ public class SpatialStorageCellItem extends AEBaseItem implements ISpatialStorag @Override public void addInformation(final ItemStack stack, final World world, final List lines, final ITooltipFlag advancedTooltips) { - final DimensionType dimType = this.getStoredDimension(stack); - if (dimType == null) { - lines.add(GuiText.Unformatted.textComponent().applyTextStyle(TextFormatting.ITALIC)); - lines.add(GuiText.SpatialCapacity.textComponent(maxRegion, maxRegion, maxRegion)); + final RegistryKey worldId = this.getStoredDimension(stack); + if (worldId == null) { + lines.add(GuiText.Unformatted.text().deepCopy().func_240699_a_(TextFormatting.ITALIC)); + lines.add(GuiText.SpatialCapacity.text(maxRegion, maxRegion, maxRegion)); } else { - SpatialDimensionManager.INSTANCE.addCellDimensionTooltip(dimType, lines); + SpatialDimensionManager.INSTANCE.addCellDimensionTooltip(worldId, lines); } if (advancedTooltips.isAdvanced()) { - if (dimType != null && dimType.getRegistryName() != null) { - lines.add(new StringTextComponent("Dimension: " + dimType.getRegistryName())); + if (worldId != null && worldId.func_240901_a_() != null) { + lines.add(new StringTextComponent("Dimension: " + worldId.func_240901_a_())); } } } @@ -83,12 +86,12 @@ public class SpatialStorageCellItem extends AEBaseItem implements ISpatialStorag } @Override - public DimensionType getStoredDimension(final ItemStack is) { + public RegistryKey getStoredDimension(final ItemStack is) { final CompoundNBT c = is.getTag(); if (c != null && c.contains(TAG_DIMENSION_ID)) { try { - ResourceLocation dimTypeId = new ResourceLocation(c.getString(TAG_DIMENSION_ID)); - return DimensionType.byName(dimTypeId); + ResourceLocation worldId = new ResourceLocation(c.getString(TAG_DIMENSION_ID)); + return RegistryKey.func_240903_a_(Registry.WORLD_KEY, worldId); } catch (Exception e) { AELog.warn("Failed to retrieve storage cell dimension.", e); } @@ -97,8 +100,8 @@ public class SpatialStorageCellItem extends AEBaseItem implements ISpatialStorag } @Override - public TransitionResult doSpatialTransition(final ItemStack is, final World w, final WorldCoord min, - final WorldCoord max, int playerId) { + 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; final int targetZ = max.z - min.z - 1; @@ -108,27 +111,27 @@ public class SpatialStorageCellItem extends AEBaseItem implements ISpatialStorag ISpatialDimension manager = SpatialDimensionManager.INSTANCE; - DimensionType storedDim = this.getStoredDimension(is); - if (storedDim == null) { - storedDim = manager.createNewCellDimension(targetSize); + RegistryKey worldId = this.getStoredDimension(is); + if (worldId == null || manager.getWorld(worldId) == null) { + worldId = manager.createNewCellDimension(targetSize); } - if (storedDim == null) { + if (worldId == null) { // Failed to create the dimension return new TransitionResult(false, 0); } try { - if (manager.isCellDimension(storedDim)) { - World cellWorld = manager.getWorld(storedDim); + if (manager.isCellDimension(worldId)) { + ServerWorld cellWorld = manager.getWorld(worldId); - BlockPos scale = manager.getCellDimensionSize(storedDim); + BlockPos scale = manager.getCellDimensionSize(worldId); if (scale.equals(targetSize)) { if (targetX <= maxSize && targetY <= maxSize && targetZ <= maxSize) { - BlockPos offset = manager.getCellDimensionOrigin(storedDim); + BlockPos offset = manager.getCellDimensionOrigin(worldId); - this.setStoredDimension(is, storedDim); + this.setStoredDimension(is, worldId); StorageHelper.getInstance().swapRegions(w, min.x + 1, min.y + 1, min.z + 1, cellWorld, offset.getX(), offset.getY(), offset.getZ(), targetX - 1, targetY - 1, targetZ - 1); @@ -139,14 +142,14 @@ public class SpatialStorageCellItem extends AEBaseItem implements ISpatialStorag return new TransitionResult(false, 0); } finally { // clean up newly created dimensions that failed transfer - if (manager.isCellDimension(storedDim) && this.getStoredDimension(is) == null) { - manager.deleteCellDimension(storedDim); + if (manager.isCellDimension(worldId) && this.getStoredDimension(is) == null) { + manager.deleteCellDimension(worldId); } } } - private void setStoredDimension(final ItemStack is, DimensionType dim) { + private void setStoredDimension(final ItemStack is, RegistryKey worldId) { final CompoundNBT c = is.getOrCreateTag(); - c.putString(TAG_DIMENSION_ID, dim.getRegistryName().toString()); + c.putString(TAG_DIMENSION_ID, worldId.func_240901_a_().toString()); } } diff --git a/src/main/java/appeng/items/tools/MemoryCardItem.java b/src/main/java/appeng/items/tools/MemoryCardItem.java index a70a2d772..6e16f795a 100644 --- a/src/main/java/appeng/items/tools/MemoryCardItem.java +++ b/src/main/java/appeng/items/tools/MemoryCardItem.java @@ -29,6 +29,7 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; +import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextFormatting; @@ -145,19 +146,19 @@ public class MemoryCardItem extends AEBaseItem implements IMemoryCard { switch (msg) { case SETTINGS_CLEARED: - player.sendMessage(PlayerMessages.SettingCleared.get(), player.getUniqueID()); + player.sendMessage(PlayerMessages.SettingCleared.get(), Util.DUMMY_UUID); break; case INVALID_MACHINE: - player.sendMessage(PlayerMessages.InvalidMachine.get(), player.getUniqueID()); + player.sendMessage(PlayerMessages.InvalidMachine.get(), Util.DUMMY_UUID); break; case SETTINGS_LOADED: - player.sendMessage(PlayerMessages.LoadedSettings.get(), player.getUniqueID()); + player.sendMessage(PlayerMessages.LoadedSettings.get(), Util.DUMMY_UUID); break; case SETTINGS_SAVED: - player.sendMessage(PlayerMessages.SavedSettings.get(), player.getUniqueID()); + player.sendMessage(PlayerMessages.SavedSettings.get(), Util.DUMMY_UUID); break; case SETTINGS_RESET: - player.sendMessage(PlayerMessages.ResetSettings.get(), player.getUniqueID()); + player.sendMessage(PlayerMessages.ResetSettings.get(), Util.DUMMY_UUID); break; default: } diff --git a/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java b/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java index ee946d537..a0b796cf7 100644 --- a/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java +++ b/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java @@ -32,6 +32,7 @@ import net.minecraft.block.BlockState; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; +import net.minecraft.item.ItemModelsProperties; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; import net.minecraft.item.SnowballItem; @@ -106,7 +107,7 @@ public class ColorApplicatorItem extends AEBasePoweredItem public ColorApplicatorItem(Item.Properties props) { super(AEConfig.instance().getColorApplicatorBattery(), props); - addPropertyOverride(new ResourceLocation(AppEng.MOD_ID, "colored"), (itemStack, world, entity) -> { + ItemModelsProperties.func_239418_a_(this, new ResourceLocation(AppEng.MOD_ID, "colored"), (itemStack, world, entity) -> { // If the stack has no color, don't use the colored model since the impact of // calling getColor for every quad is extremely high, if the stack tries to // re-search its @@ -197,7 +198,7 @@ public class ColorApplicatorItem extends AEBasePoweredItem @Override public ITextComponent getDisplayName(final ItemStack is) { - ITextComponent extra = GuiText.Empty.textComponent(); + ITextComponent extra = GuiText.Empty.text(); final AEColor selected = this.getActiveColor(is); @@ -320,7 +321,7 @@ public class ColorApplicatorItem extends AEBasePoweredItem } private boolean recolourBlock(final Block blk, final Direction side, final World w, final BlockPos pos, - final AEColor newColor, @Nullable final PlayerEntity p) { + final AEColor newColor, @Nullable final PlayerEntity p) { final BlockState state = w.getBlockState(pos); Block recolored = BlockRecolorer.recolor(blk, newColor); @@ -333,11 +334,22 @@ public class ColorApplicatorItem extends AEBasePoweredItem return w.setBlockState(pos, newState); } + TileEntity be = w.getTileEntity(pos); + if (be instanceof IColorableTile) { + IColorableTile ct = (IColorableTile) be; + AEColor c = ct.getColor(); + if (c != newColor) { + ct.recolourBlock(side, newColor, null); + return true; + } + return false; + } + if (blk instanceof CableBusBlock && p != null) { return ((CableBusBlock) blk).recolorBlock(w, pos, side, newColor.dye, p); } - return blk.recolorBlock(state, w, pos, side, newColor.dye); + return false; } private static > BlockState copyProp(BlockState oldState, BlockState newState, diff --git a/src/main/java/appeng/items/tools/powered/MatterCannonItem.java b/src/main/java/appeng/items/tools/powered/MatterCannonItem.java index 44cb6060f..71f414e5f 100644 --- a/src/main/java/appeng/items/tools/powered/MatterCannonItem.java +++ b/src/main/java/appeng/items/tools/powered/MatterCannonItem.java @@ -38,6 +38,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.util.Direction; import net.minecraft.util.EntityDamageSource; import net.minecraft.util.Hand; +import net.minecraft.util.Util; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; @@ -165,7 +166,7 @@ public class MatterCannonItem extends AEBasePoweredItem implements IStorageCell< } } else { if (Platform.isServer()) { - p.sendMessage(PlayerMessages.AmmoDepleted.get()); + p.sendMessage(PlayerMessages.AmmoDepleted.get(), Util.DUMMY_UUID); } return new ActionResult<>(ActionResultType.SUCCESS, p.getHeldItem(hand)); } @@ -352,7 +353,7 @@ public class MatterCannonItem extends AEBasePoweredItem implements IStorageCell< if (entityHit instanceof LivingEntity) { final LivingEntity el = (LivingEntity) entityHit; penetration -= dmg; - el.knockBack(p, 0, -direction.x, -direction.z); + el.applyKnockback(0, -direction.x, -direction.z); // el.knockBack( p, 0, Vector3d.x, // Vector3d.z ); el.attackEntityFrom(dmgSrc, dmg); diff --git a/src/main/java/appeng/items/tools/powered/WirelessTerminalItem.java b/src/main/java/appeng/items/tools/powered/WirelessTerminalItem.java index c3d748d2d..88966392f 100644 --- a/src/main/java/appeng/items/tools/powered/WirelessTerminalItem.java +++ b/src/main/java/appeng/items/tools/powered/WirelessTerminalItem.java @@ -71,9 +71,9 @@ public class WirelessTerminalItem extends AEBasePoweredItem implements IWireless final String encKey = tag.getString("encryptionKey"); if (encKey == null || encKey.isEmpty()) { - lines.add(GuiText.Unlinked.textComponent()); + lines.add(GuiText.Unlinked.text()); } else { - lines.add(GuiText.Linked.textComponent()); + lines.add(GuiText.Linked.text()); } } } else { 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 0f47a8bca..e938b999f 100644 --- a/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java +++ b/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java @@ -67,10 +67,10 @@ public abstract class AEBasePoweredItem extends AEBaseItem implements IAEItemPow final double percent = internalCurrentPower / internalMaxPower; - lines.add(GuiText.StoredEnergy.textComponent() - .appendText(':' + MessageFormat.format(" {0,number,#} ", internalCurrentPower)) - .appendSibling(new TranslationTextComponent(PowerUnits.AE.unlocalizedName)) - .appendText(" - " + MessageFormat.format(" {0,number,#.##%} ", percent))); + lines.add(GuiText.StoredEnergy.text().deepCopy() + .func_240702_b_(':' + MessageFormat.format(" {0,number,#} ", internalCurrentPower)) + .func_230529_a_(PowerUnits.AE.textComponent()) + .func_240702_b_(" - " + MessageFormat.format(" {0,number,#.##%} ", percent))); } @Override diff --git a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java index b89589dc0..880396736 100644 --- a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java @@ -1106,7 +1106,7 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU { if (te.hasCustomInventoryName()) { if (this.myName != null) { - this.myName.appendText(" ").appendSibling(te.getCustomInventoryName()); + this.myName.deepCopy().func_240702_b_(" ").func_230529_a_(te.getCustomInventoryName()); } else { this.myName = te.getCustomInventoryName().deepCopy(); } diff --git a/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java b/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java index a9592018c..04a0ffcd1 100644 --- a/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java @@ -162,8 +162,7 @@ public class QuantumCluster implements ILocatable, IAECluster { if (!qc.isDestroyed) { ChunkPos cPos = new ChunkPos(qc.center.getPos()); if (theWorld.getChunkProvider().isChunkLoaded(cPos)) { - final DimensionType id = theWorld.dimension.getType(); - final World cur = theWorld.getServer().getWorld(id); + final World cur = theWorld.getServer().getWorld(theWorld.func_234923_W_()); final TileEntity te = theWorld.getTileEntity(qc.center.getPos()); return te != qc.center || theWorld != cur; diff --git a/src/main/java/appeng/mixins/DimensionTypeMixin.java b/src/main/java/appeng/mixins/DimensionTypeMixin.java new file mode 100644 index 000000000..29fd2a0ad --- /dev/null +++ b/src/main/java/appeng/mixins/DimensionTypeMixin.java @@ -0,0 +1,26 @@ +package appeng.mixins; + +import appeng.spatial.SpatialDimensionManager; +import net.minecraft.server.IDynamicRegistries; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.DimensionType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.OptionalLong; + +@Mixin(DimensionType.class) +public class DimensionTypeMixin { + + @Inject(method = "func_236027_a_", at = @At("TAIL")) + private static void addRegistryDefaults(IDynamicRegistries.Impl registryTracker, CallbackInfoReturnable cir) { + + registryTracker.func_239774_a_(SpatialDimensionManager.STORAGE_DIMENSION_TYPE, + new DimensionType(OptionalLong.of(12000), false, false, false, false, false, false, true, false, + false, 256, BlockTags.INFINIBURN_OVERWORLD.getName(), 1.0f)); + + } + +} diff --git a/src/main/java/appeng/mixins/MinecraftServerMixin.java b/src/main/java/appeng/mixins/MinecraftServerMixin.java new file mode 100644 index 000000000..159b925ad --- /dev/null +++ b/src/main/java/appeng/mixins/MinecraftServerMixin.java @@ -0,0 +1,102 @@ +package appeng.mixins; + +import appeng.hooks.DynamicDimensions; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import net.minecraft.server.IDynamicRegistries; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.RegistryKey; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.Dimension; +import net.minecraft.world.DimensionType; +import net.minecraft.world.World; +import net.minecraft.world.border.IBorderListener; +import net.minecraft.world.border.WorldBorder; +import net.minecraft.world.chunk.listener.IChunkStatusListener; +import net.minecraft.world.gen.ChunkGenerator; +import net.minecraft.world.gen.settings.DimensionGeneratorSettings; +import net.minecraft.world.server.ServerWorld; +import net.minecraft.world.storage.DerivedWorldInfo; +import net.minecraft.world.storage.IServerConfiguration; +import net.minecraft.world.storage.IServerWorldInfo; +import net.minecraft.world.storage.SaveFormat; +import net.minecraft.world.storage.ServerWorldInfo; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Map; +import java.util.concurrent.Executor; + +@Mixin(MinecraftServer.class) +public class MinecraftServerMixin implements DynamicDimensions { + + @Shadow() + private IDynamicRegistries.Impl field_240767_f_; + + @Shadow + private Map, ServerWorld> worlds; + + @Shadow + private IServerConfiguration field_240768_i_; + + @Shadow + private Executor backgroundExecutor; + + @Shadow + private SaveFormat.LevelSave anvilConverterForAnvilFile; + + public ServerWorld addWorld(RegistryKey worldId, RegistryKey dimensionTypeId, + ChunkGenerator chunkGenerator) { + Preconditions.checkArgument(!worlds.containsKey(worldId), "World with id %s already exists.", + worldId.func_240901_a_()); + + // Each worlds must have a corresponding dimension options, otherwise they will + // not be re-created on load + DimensionGeneratorSettings generatorOptions = this.field_240768_i_.func_230418_z_(); + Preconditions.checkArgument(!generatorOptions.func_236224_e_().containsKey(worldId.func_240901_a_()), + "Dimension config with id %s already exists.", worldId.func_240901_a_()); + + DimensionType dimensionType = field_240767_f_.func_230520_a_().func_230516_a_(dimensionTypeId); + Preconditions.checkArgument(dimensionType != null, "dimensionTypeId %s is not registered", dimensionTypeId); + + // Create dimension options with the given world-id and chunk generator + Dimension dimensionOptions = new Dimension( + () -> field_240767_f_.func_230520_a_().func_230516_a_(dimensionTypeId), chunkGenerator); + + IServerWorldInfo serverWorldProperties = this.field_240768_i_.func_230407_G_(); + + // This sucks a little, but during startup, the server will use the same + // listener for every world, + // but it is ultimately only stored in the chunk storage. So we retrieve it from + // the overworld to + // mirror the original code as much as possible + ServerWorld overworld = worlds.get(ServerWorld.field_234918_g_); + Preconditions.checkState(overworld != null, "Overworld does not exist!"); + IChunkStatusListener worldGenerationProgressListener = ((ThreadedAnvilChunkStorageAccessor) overworld + .getChunkProvider().chunkManager).getWorldGenerationProgressListener(); + + // Inherit seed + WorldBorder from overworld + long seed = overworld.getSeed(); + WorldBorder worldBorder = overworld.getWorldBorder(); + + MinecraftServer self = (MinecraftServer) (Object) this; + DerivedWorldInfo unmodifiableLevelProperties = new DerivedWorldInfo(this.field_240768_i_, + serverWorldProperties); + ServerWorld world = new ServerWorld(self, this.backgroundExecutor, this.anvilConverterForAnvilFile, unmodifiableLevelProperties, + worldId, dimensionTypeId, dimensionType, worldGenerationProgressListener, chunkGenerator, false, seed, + ImmutableList.of(), false); + worldBorder.addListener(new IBorderListener.Impl(world.getWorldBorder())); + this.worlds.put(worldId, world); + + // Adding it here will cause the world to be re-created on server restart + RegistryKey dimOptKey = RegistryKey.func_240903_a_(Registry.DIMENSION_KEY, worldId.func_240901_a_()); + generatorOptions.func_236224_e_().register(dimOptKey, dimensionOptions); + generatorOptions.func_236224_e_().func_239662_d_(dimOptKey); // Otherwise it wont be saved + // Ensure the save properties are saved, or the world will potentially be lost + // on restart + this.anvilConverterForAnvilFile.func_237288_a_(this.field_240767_f_, this.field_240768_i_, self.getPlayerList().getHostPlayerData()); + + return world; + } + +} diff --git a/src/main/java/appeng/mixins/SkyPropertiesMixin.java b/src/main/java/appeng/mixins/SkyPropertiesMixin.java new file mode 100644 index 000000000..cb2c9ab0b --- /dev/null +++ b/src/main/java/appeng/mixins/SkyPropertiesMixin.java @@ -0,0 +1,25 @@ +package appeng.mixins; + +import appeng.spatial.SpatialDimensionManager; +import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.util.RegistryKey; +import net.minecraft.world.DimensionType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Optional; + +@Mixin(DimensionRenderInfo.class) +public class SkyPropertiesMixin { + + @Inject(method = "func_239215_a_", at = @At("HEAD"), cancellable = true, remap = false) + private static void byDimensionType(Optional> optional, + CallbackInfoReturnable ci) { + if (optional.orElse(null) == SpatialDimensionManager.STORAGE_DIMENSION_TYPE) { + ci.setReturnValue(SpatialDimensionManager.STORAGE_SKY); + } + } + +} diff --git a/src/main/java/appeng/mixins/SkyRenderMixin.java b/src/main/java/appeng/mixins/SkyRenderMixin.java new file mode 100644 index 000000000..b7f5ee18d --- /dev/null +++ b/src/main/java/appeng/mixins/SkyRenderMixin.java @@ -0,0 +1,29 @@ +package appeng.mixins; + +import appeng.client.render.SpatialSkyRender; +import appeng.spatial.SpatialDimensionManager; +import com.mojang.blaze3d.matrix.MatrixStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.WorldRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(WorldRenderer.class) +public class SkyRenderMixin { + + @Shadow(aliases = {"mc"}) + private Minecraft client; + + @SuppressWarnings("ConstantConditions") + @Inject(method = "renderSky", at = @At("HEAD"), cancellable = true) + public void renderSky(MatrixStack matrices, float tickDelta, CallbackInfo ci) { + if (client.world.func_234922_V_() == SpatialDimensionManager.STORAGE_DIMENSION_TYPE) { + SpatialSkyRender.getInstance().render(matrices); + ci.cancel(); + } + } + +} diff --git a/src/main/java/appeng/mixins/ThreadedAnvilChunkStorageAccessor.java b/src/main/java/appeng/mixins/ThreadedAnvilChunkStorageAccessor.java new file mode 100644 index 000000000..1a7a0cf9a --- /dev/null +++ b/src/main/java/appeng/mixins/ThreadedAnvilChunkStorageAccessor.java @@ -0,0 +1,14 @@ +package appeng.mixins; + +import net.minecraft.world.chunk.listener.IChunkStatusListener; +import net.minecraft.world.server.ChunkManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ChunkManager.class) +public interface ThreadedAnvilChunkStorageAccessor { + + @Accessor("field_219266_t") + IChunkStatusListener getWorldGenerationProgressListener(); + +} diff --git a/src/main/java/appeng/mixins/TntAccessor.java b/src/main/java/appeng/mixins/TntAccessor.java new file mode 100644 index 000000000..93e442caa --- /dev/null +++ b/src/main/java/appeng/mixins/TntAccessor.java @@ -0,0 +1,20 @@ +package appeng.mixins; + +import net.minecraft.block.TNTBlock; +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import javax.annotation.Nullable; + +@Mixin(TNTBlock.class) +public interface TntAccessor { + + @Invoker + static void callPrimeTnt(World world, BlockPos pos, @Nullable LivingEntity igniter) { + throw new AssertionError("Mixin dummy"); + } + +} diff --git a/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java b/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java index be3a2213c..29071a678 100644 --- a/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java +++ b/src/main/java/appeng/parts/automation/AnnihilationPlanePart.java @@ -481,7 +481,7 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab || material == Material.WATER || material.isLiquid(); return !ignoreMaterials && hardness >= 0f && w.isBlockLoaded(pos) - && w.canMineBlockBody(Platform.getPlayer(w), pos); + && w.isBlockModifiable(Platform.getPlayer(w), pos); } protected List obtainBlockDrops(final ServerWorld w, final BlockPos pos) { @@ -493,7 +493,7 @@ public class AnnihilationPlanePart extends BasicStatePart implements IGridTickab ItemStack harvestTool = createHarvestTool(state); if (harvestTool == null) { - if (!state.getMaterial().isToolNotRequired()) { + if (!state.getRequiresTool()) { harvestTool = ItemStack.EMPTY; } else { // In case the block does NOT allow us to harvest it without a tool, or the diff --git a/src/main/java/appeng/parts/reporting/AbstractMonitorPart.java b/src/main/java/appeng/parts/reporting/AbstractMonitorPart.java index 21309f33d..f1882cc79 100644 --- a/src/main/java/appeng/parts/reporting/AbstractMonitorPart.java +++ b/src/main/java/appeng/parts/reporting/AbstractMonitorPart.java @@ -29,6 +29,7 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.PacketBuffer; import net.minecraft.util.Direction; import net.minecraft.util.Hand; +import net.minecraft.util.Util; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.vector.Vector3d; import net.minecraftforge.api.distmarker.Dist; @@ -178,7 +179,7 @@ public abstract class AbstractMonitorPart extends AbstractDisplayPart if (player.getHeldItem(hand).isEmpty()) { this.isLocked = !this.isLocked; - player.sendMessage((this.isLocked ? PlayerMessages.isNowLocked : PlayerMessages.isNowUnlocked).get()); + player.sendMessage((this.isLocked ? PlayerMessages.isNowLocked : PlayerMessages.isNowUnlocked).get(), Util.DUMMY_UUID); this.getHost().markForSave(); this.getHost().markForUpdate(); } diff --git a/src/main/java/appeng/server/subcommands/TestMeteoritesCommand.java b/src/main/java/appeng/server/subcommands/TestMeteoritesCommand.java index c54ab8fca..2cfc6d719 100644 --- a/src/main/java/appeng/server/subcommands/TestMeteoritesCommand.java +++ b/src/main/java/appeng/server/subcommands/TestMeteoritesCommand.java @@ -35,6 +35,7 @@ import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.text.IFormattableTextComponent; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; @@ -103,7 +104,7 @@ public class TestMeteoritesCommand implements ISubCommand { chunksChecked++; ChunkPos cp = new ChunkPos(cx, cz); BlockPos p = new BlockPos(cp.getXStart(), 0, cp.getZStart()); - BlockPos nearest = MeteoriteStructure.INSTANCE.findNearest(world, generator, p, 0, false); + BlockPos nearest = generator.func_235956_a_(world, MeteoriteStructure.INSTANCE, p, 0, false); if (nearest != null) { IChunk chunk = world.getChunk(cx, cz, ChunkStatus.STRUCTURE_STARTS); // The actual relevant information is in the structure piece @@ -168,13 +169,13 @@ public class TestMeteoritesCommand implements ISubCommand { settings.getFallout().name().toLowerCase())); } - ITextComponent msg = new StringTextComponent(" #" + (i + 1) + " "); - msg.deepCopy().func_230529_a_(getClickablePosition(world, settings, pos)).appendSibling(restOfLine); + IFormattableTextComponent msg = new StringTextComponent(" #" + (i + 1) + " "); + msg.func_230529_a_(getClickablePosition(world, settings, pos)).func_230529_a_(restOfLine); // Add a tooltip ITextComponent tooltip = new StringTextComponent(settings.toString() + "\nBiome: ").deepCopy() .func_230529_a_(world.getBiome(pos).getDisplayName()); - msg.applyTextStyle(style -> style.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip))); + msg.func_240700_a_(style -> style.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip))); sender.sendFeedback(msg, true); } @@ -192,12 +193,12 @@ public class TestMeteoritesCommand implements ISubCommand { String displayText = String.format(Locale.ROOT, "pos=%d,%d,%d", tpPos.getX(), tpPos.getY(), tpPos.getZ()); String tpCommand = String.format(Locale.ROOT, "/tp @s %d %d %d", tpPos.getX(), tpPos.getY(), tpPos.getZ()); - return new StringTextComponent(displayText).applyTextStyle(TextFormatting.UNDERLINE) - .applyTextStyle(style -> style.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, tpCommand))); + return new StringTextComponent(displayText).func_240699_a_(TextFormatting.UNDERLINE) + .func_240700_a_(style -> style.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, tpCommand))); } private static MeteoriteStructurePiece getMeteoritePieceFromChunk(IChunk chunk) { - StructureStart start = chunk.getStructureStart(MeteoriteStructure.INSTANCE.getStructureName()); + StructureStart start = chunk.func_230342_a_(MeteoriteStructure.INSTANCE); if (start != null && start.getComponents().size() > 0 && start.getComponents().get(0) instanceof MeteoriteStructurePiece) { diff --git a/src/main/java/appeng/services/CompassService.java b/src/main/java/appeng/services/CompassService.java index 83a1cbe69..02df50e56 100644 --- a/src/main/java/appeng/services/CompassService.java +++ b/src/main/java/appeng/services/CompassService.java @@ -18,38 +18,34 @@ package appeng.services; -import java.util.HashMap; -import java.util.Map; +import appeng.api.util.DimensionalCoord; +import appeng.core.Api; +import appeng.services.compass.CompassReader; +import appeng.services.compass.ICompassCallback; +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.IWorld; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunk; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +import javax.annotation.Nonnull; +import java.util.WeakHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; -import javax.annotation.Nonnull; - -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.DimensionType; -import net.minecraft.world.IWorld; -import net.minecraft.world.chunk.IChunk; -import net.minecraft.world.server.ServerWorld; -import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; - -import appeng.api.util.DimensionalCoord; -import appeng.core.Api; -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; @@ -73,10 +69,13 @@ public final class CompassService { // FIXME this is never registered @SubscribeEvent public void unloadWorld(final WorldEvent.Unload event) { - DimensionType dim = event.getWorld().getDimension().getType(); + if (!(event.getWorld() instanceof ServerWorld)) { + return; + } - if (Platform.isServer() && this.worldSet.containsKey(dim)) { - final CompassReader compassReader = this.worldSet.remove(dim); + ServerWorld world = (ServerWorld) event.getWorld(); + if (this.worldSet.containsKey(world)) { + final CompassReader compassReader = this.worldSet.remove(world); compassReader.close(); } } @@ -91,32 +90,51 @@ public final class CompassService { } } - public void updateArea(final IWorld w, ChunkPos chunkPos) { - this.updateArea(w, chunkPos, CHUNK_SIZE); - this.updateArea(w, chunkPos, CHUNK_SIZE + 32); - this.updateArea(w, chunkPos, CHUNK_SIZE + 64); - this.updateArea(w, chunkPos, CHUNK_SIZE + 96); - - this.updateArea(w, chunkPos, CHUNK_SIZE + 128); - this.updateArea(w, chunkPos, CHUNK_SIZE + 160); - this.updateArea(w, chunkPos, CHUNK_SIZE + 192); - this.updateArea(w, chunkPos, CHUNK_SIZE + 224); + public void tryUpdateArea(final IWorld w, ChunkPos chunkPos) { + // If this seems weird: during worldgen, WorldAccess is a specific region, but + // getWorld is + // still the server world. We do need to use the world access to get the chunk + // in question + // though, since during worldgen, it's not comitted to the actual world yet. + World world = w.getWorld(); + if (!(world instanceof ServerWorld)) { + return; + } + IChunk chunk = w.getChunk(chunkPos.x, chunkPos.z); + updateArea((ServerWorld) world, chunk); } - public Future updateArea(final IWorld w, ChunkPos chunkPos, int y) { + public void updateArea(final ServerWorld w, IChunk chunk) { + this.updateArea(w, chunk, CHUNK_SIZE); + this.updateArea(w, chunk, CHUNK_SIZE + 32); + this.updateArea(w, chunk, CHUNK_SIZE + 64); + this.updateArea(w, chunk, CHUNK_SIZE + 96); + + this.updateArea(w, chunk, CHUNK_SIZE + 128); + this.updateArea(w, chunk, CHUNK_SIZE + 160); + this.updateArea(w, chunk, CHUNK_SIZE + 192); + this.updateArea(w, chunk, CHUNK_SIZE + 224); + } + + /** + * Notifies the compass service that a skystone block has either been placed or + * replaced at the give position. + */ + public void notifyBlockChange(final ServerWorld w, BlockPos pos) { + IChunk chunk = w.getChunk(pos); + updateArea(w, chunk, pos.getY()); + } + + private Future updateArea(final ServerWorld w, IChunk c, int y) { this.jobSize++; - final int cx = chunkPos.x; final int cdy = y >> 5; - final int cz = chunkPos.z; - final int low_y = cdy << 5; final int hi_y = low_y + 32; // lower level... - final IChunk c = w.getChunk(cx, cz); - - DimensionType dim = w.getDimension().getType(); + int cx = c.getPos().x; + int cz = c.getPos().z; Block skyStoneBlock = Api.instance().definitions().blocks().skyStoneBlock().block(); BlockPos.Mutable pos = new BlockPos.Mutable(); @@ -128,13 +146,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 +172,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 +199,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 +218,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 +241,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/spatial/CachedPlane.java b/src/main/java/appeng/spatial/CachedPlane.java index 2d7478c6b..b3fc61fe3 100644 --- a/src/main/java/appeng/spatial/CachedPlane.java +++ b/src/main/java/appeng/spatial/CachedPlane.java @@ -45,6 +45,7 @@ import appeng.api.util.WorldCoord; import appeng.core.AELog; import appeng.core.Api; import appeng.core.worlddata.WorldData; +import net.minecraft.world.server.ServerWorld; public class CachedPlane { private final int x_size; @@ -59,13 +60,13 @@ public class CachedPlane { private final Column[][] myColumns; private final List tiles = new ArrayList<>(); private final List> ticks = new ArrayList<>(); - private final World world; + private final ServerWorld world; private final IMovableRegistry reg = Api.instance().registries().movable(); private final List updates = new ArrayList<>(); private int verticalBits; private final BlockState matrixBlockState; - public CachedPlane(final World w, final int minX, final int minY, final int minZ, final int maxX, final int maxY, + public CachedPlane(final ServerWorld w, final int minX, final int minY, final int minZ, final int maxX, final int maxY, final int maxZ) { Block matrixFrameBlock = Api.instance().definitions().blocks().matrixFrame().maybeBlock().orElse(null); @@ -159,7 +160,7 @@ public class CachedPlane { if (tePOS.getX() >= minX && tePOS.getX() <= maxX && tePOS.getY() >= minY && tePOS.getY() <= maxY && tePOS.getZ() >= minZ && tePOS.getZ() <= maxZ) { this.ticks.add(new NextTickListEntry<>(tePOS, entry.getTarget(), - entry.scheduledTime - gameTime, entry.priority)); + entry.field_235017_b_ - gameTime, entry.priority)); } } } @@ -263,7 +264,7 @@ public class CachedPlane { private void addTick(final int x, final int y, final int z, final NextTickListEntry entry) { BlockPos where = new BlockPos(x + this.x_offset, y + this.y_offset, z + this.z_offset); - this.world.getPendingBlockTicks().scheduleTick(where, entry.getTarget(), (int) entry.scheduledTime, + this.world.getPendingBlockTicks().scheduleTick(where, entry.getTarget(), (int) entry.field_235017_b_, entry.priority); } @@ -315,12 +316,10 @@ public class CachedPlane { final Chunk c = this.myChunks[x][z]; - for (int y = 1; y < 255; y += 32) { - WorldData.instance().compassData().service().updateArea(this.getWorld(), c.getPos(), y); - } + WorldData.instance().compassData().service().updateArea(this.getWorld(), c); // FIXME this was sending chunks to players... - SChunkDataPacket cdp = new SChunkDataPacket(c, verticalBits); + SChunkDataPacket cdp = new SChunkDataPacket(c, verticalBits, false); ((ServerChunkProvider) world.getChunkProvider()).chunkManager.getTrackingPlayers(c.getPos(), false) .forEach(spe -> spe.connection.sendPacket(cdp)); @@ -336,7 +335,7 @@ public class CachedPlane { return this.updates; } - World getWorld() { + ServerWorld getWorld() { return this.world; } diff --git a/src/main/java/appeng/spatial/SpatialDimensionExtraData.java b/src/main/java/appeng/spatial/SpatialDimensionExtraData.java index 5912c87f2..3faad64e5 100644 --- a/src/main/java/appeng/spatial/SpatialDimensionExtraData.java +++ b/src/main/java/appeng/spatial/SpatialDimensionExtraData.java @@ -1,70 +1,70 @@ package appeng.spatial; -import javax.annotation.Nullable; - -import io.netty.buffer.Unpooled; - -import net.minecraft.network.PacketBuffer; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; import net.minecraft.util.math.BlockPos; - -import appeng.core.AELog; +import net.minecraft.world.storage.WorldSavedData; /** - * Helps with encoding and decoding the extra data we attach to the spatial - * {@link net.minecraft.world.dimension.DimensionType} as "extra data". Keep in - * mind this data will also be sent to the client unless - * {@link net.minecraftforge.common.ModDimension#write(PacketBuffer, boolean)} - * is overridden. + * Helps with encoding and decoding the extra data we attach to each created + * storage dimension world as persistent state. */ -public final class SpatialDimensionExtraData { +public final class SpatialDimensionExtraData extends WorldSavedData { + + /** + * ID of this data when it is attached to a world. + */ + public static final String ID = "ae2_spatial_info"; // Used to allow forward compatibility private static final int CURRENT_FORMAT = 1; + private static final String TAG_FORMAT = "format"; + + private static final String TAG_SIZE = "size"; + /** * The storage size of this dimension. This is dicateted by the pylon structure * size used to perform the first transfer into this dimension. Once it's set, * it cannot be changed anymore. */ - private final BlockPos size; + private BlockPos size = BlockPos.ZERO; - public SpatialDimensionExtraData(BlockPos size) { - this.size = size; + public SpatialDimensionExtraData() { + super(ID); } - public PacketBuffer write() { - PacketBuffer buf = new PacketBuffer(Unpooled.buffer()); - buf.writeByte(CURRENT_FORMAT); - buf.writeBlockPos(size); - buf.capacity(buf.writerIndex()); // This cuts the backing buffer to the required size - return buf; + public SpatialDimensionExtraData(BlockPos size) { + super(ID); + this.size = size; } public BlockPos getSize() { return size; } - @Nullable - public static SpatialDimensionExtraData read(@Nullable PacketBuffer buf) { - if (buf == null) { - return null; + public void setSize(BlockPos size) { + this.size = size; + setDirty(true); + } + + @Override + public void read(CompoundNBT tag) { + int version = tag.getInt(TAG_FORMAT); + if (version != CURRENT_FORMAT) { + // Currently no new format has been defined, as such anything but the current + // version is invalid + throw new IllegalStateException("Invalid AE2 spatial info version: " + version); } - try { - buf.readerIndex(0); - byte version = buf.readByte(); - if (version != CURRENT_FORMAT) { - // Currently no new format has been defined, as such anything but the current - // version is invalid - return null; - } + size = NBTUtil.readBlockPos(tag.getCompound(TAG_SIZE)); + } - BlockPos size = buf.readBlockPos(); - return new SpatialDimensionExtraData(size); - } catch (IndexOutOfBoundsException e) { - AELog.warn(e, "Failed to read spatial storage dimension data."); - return null; - } + @Override + public CompoundNBT write(CompoundNBT tag) { + tag.putInt(TAG_FORMAT, CURRENT_FORMAT); + tag.put(TAG_SIZE, NBTUtil.writeBlockPos(size)); + return tag; } } diff --git a/src/main/java/appeng/spatial/SpatialDimensionManager.java b/src/main/java/appeng/spatial/SpatialDimensionManager.java index cbacf493b..65243d5a0 100644 --- a/src/main/java/appeng/spatial/SpatialDimensionManager.java +++ b/src/main/java/appeng/spatial/SpatialDimensionManager.java @@ -23,14 +23,19 @@ import java.util.Locale; import javax.annotation.Nullable; +import appeng.hooks.DynamicDimensions; +import net.minecraft.client.world.DimensionRenderInfo; import net.minecraft.network.PacketBuffer; import net.minecraft.server.MinecraftServer; +import net.minecraft.util.RegistryKey; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.registry.Registry; import net.minecraft.util.text.ITextComponent; import net.minecraft.world.DimensionType; +import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraftforge.common.DimensionManager; import net.minecraftforge.fml.server.ServerLifecycleHooks; import appeng.api.storage.ISpatialDimension; @@ -40,6 +45,35 @@ import appeng.core.localization.GuiText; public final class SpatialDimensionManager implements ISpatialDimension { + // A region file is 512x512 blocks (32x32 chunks), + // to avoid creating the 4 regions around 0,0,0, + // we move the origin to the middle of region 0,0 + public static final BlockPos REGION_CENTER = new BlockPos(512 / 2, 64, 512 / 2); + + public static final RegistryKey STORAGE_DIMENSION_TYPE = RegistryKey.func_240903_a_(Registry.DIMENSION_TYPE_KEY, + AppEng.makeId("storage_cell")); + + // See the fabric version of this to get any idea what its doing + public static final DimensionRenderInfo STORAGE_SKY = new DimensionRenderInfo(Float.NaN /* disables clouds */, false, + DimensionRenderInfo.FogType.NONE /* we use a custom render mixin */, true, false) { + + @Override + public Vector3d func_230494_a_(Vector3d p_230494_1_, float p_230494_2_) { + return Vector3d.ZERO; + } + + @Override + public boolean func_230493_a_(int p_230493_1_, int p_230493_2_) { + return false; + } + + @Nullable + @Override + public float[] func_230492_a_(float p_230492_1_, float p_230492_2_) { + return null; + } + }; + public static final ISpatialDimension INSTANCE = new SpatialDimensionManager(); private static final String DIM_ID_PREFIX = "spatial_"; @@ -48,18 +82,27 @@ public final class SpatialDimensionManager implements ISpatialDimension { } @Override - public ServerWorld getWorld(DimensionType cellDim) { - return DimensionManager.getWorld(getServer(), cellDim, true, true); + public ServerWorld getWorld(RegistryKey cellDim) { + MinecraftServer server = getServer(); + return server.getWorld(cellDim); } @Override - public DimensionType createNewCellDimension(BlockPos size) { + public RegistryKey createNewCellDimension(BlockPos size) { ResourceLocation dimKey = findFreeDimensionId(); AELog.info("Allocating storage cell dimension '%s'", dimKey); - PacketBuffer extraData = new SpatialDimensionExtraData(size).write(); + DynamicDimensions dynamicDimensions = (DynamicDimensions) getServer(); - return DimensionManager.registerDimension(dimKey, StorageCellModDimension.INSTANCE, extraData, true); + RegistryKey worldId = RegistryKey.func_240903_a_(Registry.WORLD_KEY, dimKey); + + ServerWorld world = dynamicDimensions.addWorld(worldId, STORAGE_DIMENSION_TYPE, StorageChunkGenerator.INSTANCE); + + SpatialDimensionExtraData spatialExtraData = world.getSavedData() + .getOrCreate(SpatialDimensionExtraData::new, SpatialDimensionExtraData.ID); + spatialExtraData.setSize(size); + + return worldId; } /** @@ -68,8 +111,8 @@ public final class SpatialDimensionManager implements ISpatialDimension { */ private ResourceLocation findFreeDimensionId() { int maxId = 0; - for (DimensionType dimensionType : DimensionType.getAll()) { - ResourceLocation regName = dimensionType.getRegistryName(); + for (RegistryKey worldId : getServer().func_240770_D_()) { + ResourceLocation regName = worldId.func_240901_a_(); if (regName == null || !AppEng.MOD_ID.equals(regName.getNamespace())) { continue; } @@ -89,46 +132,56 @@ public final class SpatialDimensionManager implements ISpatialDimension { ++maxId; - return new ResourceLocation(AppEng.MOD_ID, DIM_ID_PREFIX + maxId); + return AppEng.makeId(DIM_ID_PREFIX + maxId); } @Override - public void deleteCellDimension(DimensionType cellDim) { - AELog.info("Unregistering storage cell dimension %s", cellDim.getRegistryName()); + public void deleteCellDimension(RegistryKey worldId) { + AELog.info("Unregistering storage cell dimension %s", worldId.func_240901_a_()); MinecraftServer server = getServer(); - ServerWorld world = DimensionManager.getWorld(server, cellDim, false, false); - if (world != null) { - DimensionManager.unloadWorld(world); - } - DimensionManager.unloadWorlds(server, true); - DimensionManager.unregisterDimension(cellDim.getId()); +// FIXME FABRIC ServerWorld world = DimensionManager.getWorld(server, worldId, false, false); +// FIXME FABRIC if (world != null) { +// FIXME FABRIC DimensionManager.unloadWorld(world); +// FIXME FABRIC } +// FIXME FABRIC DimensionManager.unloadWorlds(server, true); +// FIXME FABRIC DimensionManager.unregisterDimension(worldId.getId()); + throw new IllegalStateException(); } @Override - public boolean isCellDimension(DimensionType cellDim) { - // Check if the cell dimension type is even registered - if (cellDim.getRegistryName() == null || !cellDim.getRegistryName().equals(DimensionType.getKey(cellDim))) { + public boolean isCellDimension(RegistryKey worldId) { + ResourceLocation id = worldId.func_240901_a_(); + if (!id.getNamespace().equals(AppEng.MOD_ID)) { + return false; // World belongs to a different mod + } + if (!id.getPath().startsWith(DIM_ID_PREFIX)) { return false; } - return cellDim.getModType() instanceof StorageCellModDimension; + // Check that the world has the right dimension type + ServerWorld world = getServer().getWorld(worldId); + if (world == null) { + return false; // Non-existent world + } + + return world.func_234922_V_().equals(STORAGE_DIMENSION_TYPE); } @Override - public BlockPos getCellDimensionOrigin(DimensionType cellDim) { - return StorageCellDimension.REGION_CENTER; + public BlockPos getCellDimensionOrigin(RegistryKey worldId) { + return REGION_CENTER; } @Override - public BlockPos getCellDimensionSize(DimensionType cellDim) { - SpatialDimensionExtraData extraData = getExtraData(cellDim); + public BlockPos getCellDimensionSize(RegistryKey worldId) { + SpatialDimensionExtraData extraData = getExtraData(worldId); return extraData != null ? extraData.getSize() : BlockPos.ZERO; } @Override - public void addCellDimensionTooltip(DimensionType cellDim, List lines) { + public void addCellDimensionTooltip(RegistryKey worldId, List lines) { // Check if the cell dimension type is even registered - ResourceLocation registryName = cellDim.getRegistryName(); + ResourceLocation registryName = worldId.func_240901_a_(); if (registryName == null || !AppEng.MOD_ID.equals(registryName.getNamespace())) { return; } @@ -138,8 +191,8 @@ public final class SpatialDimensionManager implements ISpatialDimension { } // Add the actual stored size - BlockPos size = SpatialDimensionManager.INSTANCE.getCellDimensionSize(cellDim); - lines.add(GuiText.StoredSize.textComponent(size.getX(), size.getY(), size.getZ())); + BlockPos size = SpatialDimensionManager.INSTANCE.getCellDimensionSize(worldId); + lines.add(GuiText.StoredSize.text(size.getX(), size.getY(), size.getZ())); // Add a serial number to allows players to keep different cells apart int dimId; @@ -152,15 +205,17 @@ public final class SpatialDimensionManager implements ISpatialDimension { // Try to make this a little more flavorful. String serialNumber = String.format(Locale.ROOT, "SP-%04d", dimId); - lines.add(GuiText.SerialNumber.textComponent(serialNumber)); + lines.add(GuiText.SerialNumber.text(serialNumber)); } @Nullable - private SpatialDimensionExtraData getExtraData(DimensionType cellDim) { - if (!(cellDim.getModType() instanceof StorageCellModDimension)) { + private SpatialDimensionExtraData getExtraData(RegistryKey worldId) { + ServerWorld world = getWorld(worldId); + if (world == null) { return null; } - return SpatialDimensionExtraData.read(cellDim.getData()); + + return world.getSavedData().get(SpatialDimensionExtraData::new, SpatialDimensionExtraData.ID); } private static MinecraftServer getServer() { diff --git a/src/main/java/appeng/spatial/StorageCellBiome.java b/src/main/java/appeng/spatial/StorageCellBiome.java index dee00faf2..0f7cc1bd6 100644 --- a/src/main/java/appeng/spatial/StorageCellBiome.java +++ b/src/main/java/appeng/spatial/StorageCellBiome.java @@ -18,14 +18,9 @@ package appeng.spatial; -import net.minecraft.util.SharedSeedRandom; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IWorld; -import net.minecraft.world.IWorldReader; import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.ChunkGenerator; -import net.minecraft.world.gen.GenerationSettings; -import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.biome.BiomeAmbience; +import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder; import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -34,15 +29,14 @@ public class StorageCellBiome extends Biome { public static final StorageCellBiome INSTANCE = new StorageCellBiome(); - static { - INSTANCE.setRegistryName("appliedenergistics2:storage"); - } - public StorageCellBiome() { - super(new Biome.Builder().surfaceBuilder(SurfaceBuilder.NOPE, SurfaceBuilder.STONE_STONE_GRAVEL_CONFIG) + super(new Biome.Builder() + .surfaceBuilder(new ConfiguredSurfaceBuilder<>(SurfaceBuilder.NOPE, SurfaceBuilder.STONE_STONE_GRAVEL_CONFIG)) .precipitation(RainType.NONE).category(Category.NONE).depth(0).scale(1) // Copied from the vanilla void biome - .temperature(0.5F).downfall(0.5F).waterColor(4159204).waterFogColor(329011).parent(null)); + .temperature(0.5F).downfall(0.5F) + .func_235097_a_(new BiomeAmbience.Builder().func_235246_b_(4159204).func_235248_c_(329011).func_235239_a_(0).func_235238_a_()) + .parent(null)); } @Override @@ -51,24 +45,4 @@ public class StorageCellBiome extends Biome { return 0x111111; } - @Override - public boolean doesWaterFreeze(IWorldReader worldIn, BlockPos pos) { - return false; - } - - @Override - public boolean doesWaterFreeze(IWorldReader worldIn, BlockPos water, boolean mustBeAtEdge) { - return false; - } - - @Override - public boolean doesSnowGenerate(IWorldReader worldIn, BlockPos pos) { - return false; - } - - @Override - public void decorate(GenerationStage.Decoration stage, ChunkGenerator chunkGenerator, - IWorld worldIn, long seed, SharedSeedRandom random, BlockPos pos) { - // Nothing should ever generate here... - } } diff --git a/src/main/java/appeng/spatial/StorageCellDimension.java b/src/main/java/appeng/spatial/StorageCellDimension.java deleted file mode 100644 index ae2ef5a6a..000000000 --- a/src/main/java/appeng/spatial/StorageCellDimension.java +++ /dev/null @@ -1,133 +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.spatial; - -import javax.annotation.Nullable; - -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.world.Dimension; -import net.minecraft.world.DimensionType; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.gen.ChunkGenerator; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.IRenderHandler; - -import appeng.client.render.SpatialSkyRender; - -public class StorageCellDimension extends Dimension { - - // A region file is 512x512 blocks (32x32 chunks), - // to avoid creating the 4 regions around 0,0,0, - // we move the origin to the middle of region 0,0 - public static final BlockPos REGION_CENTER = new BlockPos(512 / 2, 64, 512 / 2); - - public StorageCellDimension(World world, DimensionType dimensionType) { - // FIXME: check light value - super(world, dimensionType, 1.0f); - } - - @Override - public ChunkGenerator createChunkGenerator() { - return new StorageChunkGenerator(this.world); - } - - @Override - public float calculateCelestialAngle(final long par1, final float par3) { - return 0; - } - - @Override - public boolean isSurfaceWorld() { - return false; - } - - @Override - @OnlyIn(Dist.CLIENT) - public float[] calcSunriseSunsetColors(final float celestialAngle, final float partialTicks) { - return null; - } - - @Override - public Vector3d getFogColor(final float par1, final float par2) { - return new Vector3d(0.07, 0.07, 0.07); - } - - @Override - public boolean canRespawnHere() { - return false; - } - - @Override - @OnlyIn(Dist.CLIENT) - public boolean isSkyColored() { - return true; - } - - @Override - public boolean doesXZShowFog(final int par1, final int par2) { - return false; - } - - @Override - public IRenderHandler getSkyRenderer() { - return SpatialSkyRender.getInstance(); - } - - @Override - public boolean isDaytime() { - return false; - } - - @Override - public BlockPos getSpawnCoordinate() { - return REGION_CENTER; - } - - @Override - public boolean isHighHumidity(final BlockPos pos) { - return false; - } - - @Override - public boolean canDoLightning(final Chunk chunk) { - return false; - } - - @Override - public boolean canDoRainSnowIce(Chunk chunk) { - return false; - } - - @Nullable - @Override - public BlockPos findSpawn(ChunkPos chunkPosIn, boolean checkValid) { - return getSpawnCoordinate(); - } - - @Nullable - @Override - public BlockPos findSpawn(int posX, int posZ, boolean checkValid) { - return getSpawnCoordinate(); - } - -} diff --git a/src/main/java/appeng/spatial/StorageCellModDimension.java b/src/main/java/appeng/spatial/StorageCellModDimension.java deleted file mode 100644 index a7980ecb2..000000000 --- a/src/main/java/appeng/spatial/StorageCellModDimension.java +++ /dev/null @@ -1,43 +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.spatial; - -import java.util.function.BiFunction; - -import net.minecraft.world.Dimension; -import net.minecraft.world.DimensionType; -import net.minecraft.world.World; -import net.minecraftforge.common.ModDimension; - -import appeng.core.AppEng; - -public class StorageCellModDimension extends ModDimension { - - public static final StorageCellModDimension INSTANCE = new StorageCellModDimension(); - - static { - INSTANCE.setRegistryName(AppEng.MOD_ID, "storage_cell"); - } - - @Override - public BiFunction getFactory() { - return StorageCellDimension::new; - } - -} diff --git a/src/main/java/appeng/spatial/StorageChunkGenerator.java b/src/main/java/appeng/spatial/StorageChunkGenerator.java index c46869337..be9d10cd5 100644 --- a/src/main/java/appeng/spatial/StorageChunkGenerator.java +++ b/src/main/java/appeng/spatial/StorageChunkGenerator.java @@ -18,38 +18,63 @@ package appeng.spatial; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.Blockreader; +import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; -import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeManager; 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.gen.ChunkGenerator; -import net.minecraft.world.gen.GenerationSettings; +import net.minecraft.world.gen.GenerationStage; import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.WorldGenRegion; import appeng.core.Api; +import net.minecraft.world.gen.feature.structure.StructureManager; +import net.minecraft.world.gen.settings.DimensionStructuresSettings; -public class StorageChunkGenerator extends ChunkGenerator { +import java.util.Arrays; +import java.util.Collections; +import java.util.Optional; + +public class StorageChunkGenerator extends ChunkGenerator { + + private final Blockreader columnSample; + + public static final StorageChunkGenerator INSTANCE = new StorageChunkGenerator(); + + public static final Codec CODEC = RecordCodecBuilder + .create((instance) -> instance.stable(INSTANCE)); private final BlockState defaultBlockState; - public StorageChunkGenerator(final World world) { - super(world, createBiomeProvider(), createSettings()); + private StorageChunkGenerator() { + super(createBiomeProvider(), createSettings()); this.defaultBlockState = Api.instance().definitions().blocks().matrixFrame().block().getDefaultState(); + + // Vertical sample is mostly used for Feature generation, for those purposes + // we're all filled with matrix blocks + BlockState[] columnSample = new BlockState[256]; + Arrays.fill(columnSample, this.defaultBlockState); + this.columnSample = new Blockreader(columnSample); + } + + @Override + protected Codec func_230347_a_() { + return CODEC; } private static BiomeProvider createBiomeProvider() { - SingleBiomeProviderSettings biomeSettings = new SingleBiomeProviderSettings(null); - biomeSettings.setBiome(StorageCellBiome.INSTANCE); - return new SingleBiomeProvider(biomeSettings); + return new SingleBiomeProvider(StorageCellBiome.INSTANCE); } - private static GenerationSettings createSettings() { - return new GenerationSettings(); + private static DimensionStructuresSettings createSettings() { + return new DimensionStructuresSettings(Optional.empty(), Collections.emptyMap()); } @Override @@ -75,22 +100,34 @@ public class StorageChunkGenerator extends ChunkGenerator { } @Override - public int getGroundHeight() { + public int func_230356_f_() { return 0; } @Override - public void makeBase(IWorld worldIn, IChunk chunkIn) { + public ChunkGenerator func_230349_a_(long p_230349_1_) { + return this; } @Override - public int getHeight(int p_222529_1_, int p_222529_2_, Heightmap.Type heightmapType) { + public void func_230352_b_(IWorld world, StructureManager accessor, IChunk chunk) { + } + + public IBlockReader func_230348_a_(int x, int z) { + return columnSample; + } + + @Override + public int func_222529_a(int p_222529_1_, int p_222529_2_, Heightmap.Type heightmapType) { return 0; } @Override - public void decorate(WorldGenRegion region) { - // Do not decorate chunks at all + public void func_230351_a_(WorldGenRegion region, StructureManager accessor) { + } + + @Override + public void func_230350_a_(long seed, BiomeManager access, IChunk chunk, GenerationStage.Carving carver) { } } diff --git a/src/main/java/appeng/spatial/StorageHelper.java b/src/main/java/appeng/spatial/StorageHelper.java index 329ae680b..a3ba7f351 100644 --- a/src/main/java/appeng/spatial/StorageHelper.java +++ b/src/main/java/appeng/spatial/StorageHelper.java @@ -97,11 +97,11 @@ public class StorageHelper { newWorld.getChunkProvider().getChunk(MathHelper.floor(link.x) >> 4, MathHelper.floor(link.z) >> 4, ChunkStatus.FULL, true); - if (entity instanceof ServerPlayerEntity && link.dim.getDimension() instanceof StorageCellDimension) { + if (entity instanceof ServerPlayerEntity && link.dim.func_234922_V_() == SpatialDimensionManager.STORAGE_DIMENSION_TYPE) { AppEng.instance().getAdvancementTriggers().getSpatialExplorer().trigger((ServerPlayerEntity) entity); } - entity.changeDimension(link.dim.getDimension().getType(), new METeleporter(link)); + entity.changeDimension(link.dim, new METeleporter(link)); if (!passengersOnOtherSide.isEmpty()) { for (Entity passanger : passengersOnOtherSide) { @@ -136,7 +136,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) { Api.instance().definitions().blocks().matrixFrame().maybeBlock() .ifPresent(matrixFrameBlock -> this.transverseEdges(dstX - 1, dstY - 1, dstZ - 1, dstX + scaleX + 1, @@ -222,12 +222,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 AxisAlignedBB srcBox, final double x, final double y, + TelDestination(final ServerWorld dimension, final AxisAlignedBB 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)); diff --git a/src/main/java/appeng/tile/crafting/MolecularAssemblerTileEntity.java b/src/main/java/appeng/tile/crafting/MolecularAssemblerTileEntity.java index 535aa852f..649778c67 100644 --- a/src/main/java/appeng/tile/crafting/MolecularAssemblerTileEntity.java +++ b/src/main/java/appeng/tile/crafting/MolecularAssemblerTileEntity.java @@ -426,7 +426,7 @@ public class MolecularAssemblerTileEntity extends AENetworkInvTileEntity final IAEItemStack item = AEItemStack.fromItemStack(output); if (item != null) { final TargetPoint where = new TargetPoint(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 32, - this.world.func_230315_m_()); + this.world); NetworkHandler.instance() .sendToAllAround(new AssemblerAnimationPacket(this.pos, (byte) speed, item), where); } diff --git a/src/main/java/appeng/tile/spatial/SpatialIOPortTileEntity.java b/src/main/java/appeng/tile/spatial/SpatialIOPortTileEntity.java index a31edaca4..5f5b0d3ad 100644 --- a/src/main/java/appeng/tile/spatial/SpatialIOPortTileEntity.java +++ b/src/main/java/appeng/tile/spatial/SpatialIOPortTileEntity.java @@ -26,6 +26,7 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; import net.minecraftforge.items.IItemHandler; import appeng.api.config.Actionable; @@ -115,6 +116,11 @@ public class SpatialIOPortTileEntity extends AENetworkInvTileEntity implements I @Override public Void call(final World world) throws Exception { + if (!(this.world instanceof ServerWorld)) { + return null; + } + ServerWorld serverWorld = (ServerWorld) this.world; + final ItemStack cell = this.inv.getStackInSlot(0); if (this.isSpatialCell(cell) && this.inv.getStackInSlot(1).isEmpty()) { final IGrid gi = this.getProxy().getGrid(); @@ -134,7 +140,7 @@ public class SpatialIOPortTileEntity extends AENetworkInvTileEntity implements I 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); diff --git a/src/main/java/appeng/tile/storage/SkyChestTileEntity.java b/src/main/java/appeng/tile/storage/SkyChestTileEntity.java index dd397ddfe..be8ed037e 100644 --- a/src/main/java/appeng/tile/storage/SkyChestTileEntity.java +++ b/src/main/java/appeng/tile/storage/SkyChestTileEntity.java @@ -71,11 +71,6 @@ public class SkyChestTileEntity extends AEBaseInvTileEntity implements ITickable return c; // TESR yo! } - @Override - public boolean canRenderBreaking() { - return true; - } - @Override public IItemHandler getInternalInventory() { return this.inv; diff --git a/src/main/java/appeng/util/Platform.java b/src/main/java/appeng/util/Platform.java index 28c0a3fd5..4d67d8655 100644 --- a/src/main/java/appeng/util/Platform.java +++ b/src/main/java/appeng/util/Platform.java @@ -47,6 +47,7 @@ import net.minecraft.item.crafting.IRecipe; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Util; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.EntityRayTraceResult; @@ -62,6 +63,7 @@ import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.util.FakePlayerFactory; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.ModList; @@ -232,7 +234,7 @@ public class Platform { if (!dc.isInWorld(player.world)) { return false; } - return player.world.canMineBlockBody(player, dc.getPos()); + return player.world.isBlockModifiable(player, dc.getPos()); } public static boolean checkPermissions(final PlayerEntity player, final Object accessInterface, @@ -255,7 +257,7 @@ public class Platform { final ISecurityGrid sg = g.getCache(ISecurityGrid.class); if (!sg.hasPermission(player, requiredPermission)) { player.sendMessage(new TranslationTextComponent("appliedenergistics2.permission_denied") - .applyTextStyle(TextFormatting.RED)); + .func_240699_a_(TextFormatting.RED), Util.DUMMY_UUID); // FIXME trace logging? return false; } @@ -667,7 +669,7 @@ public class Platform { } public static LookDirection getPlayerRay(final PlayerEntity playerIn) { - double reachDistance = playerIn.getAttribute(PlayerEntity.REACH_DISTANCE).getValue(); + double reachDistance = playerIn.getAttribute(ForgeMod.REACH_DISTANCE.get()).getValue(); return getPlayerRay(playerIn, reachDistance); } diff --git a/src/main/java/appeng/worldgen/ChargedQuartzOreConfig.java b/src/main/java/appeng/worldgen/ChargedQuartzOreConfig.java index ad4021231..54cb492c9 100644 --- a/src/main/java/appeng/worldgen/ChargedQuartzOreConfig.java +++ b/src/main/java/appeng/worldgen/ChargedQuartzOreConfig.java @@ -1,9 +1,11 @@ package appeng.worldgen; import com.google.common.collect.ImmutableMap; +import com.mojang.serialization.Codec; import com.mojang.serialization.Dynamic; import com.mojang.serialization.DynamicOps; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.world.gen.feature.IFeatureConfig; @@ -16,6 +18,12 @@ import appeng.core.AEConfig; */ public class ChargedQuartzOreConfig implements IFeatureConfig { + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance + .group(BlockState.field_235877_b_.fieldOf("target").forGetter((config) -> config.target), + BlockState.field_235877_b_.fieldOf("state").forGetter((config) -> config.state), + Codec.FLOAT.fieldOf("chance").withDefault(0f).forGetter((config) -> config.chance)) + .apply(instance, ChargedQuartzOreConfig::new)); + public final BlockState target; public final BlockState state; public final float chance; @@ -26,20 +34,4 @@ public class ChargedQuartzOreConfig implements IFeatureConfig { this.chance = chance; } - @Override - public Dynamic serialize(DynamicOps ops) { - return new Dynamic<>(ops, - ops.createMap( - ImmutableMap.of(ops.createString("target"), BlockState.serialize(ops, this.target).getValue(), - ops.createString("state"), BlockState.serialize(ops, this.state).getValue(), - ops.createString("chance"), ops.createFloat(this.chance)))); - } - - public static ChargedQuartzOreConfig deserialize(Dynamic p_214657_0_) { - BlockState target = p_214657_0_.get("target").map(BlockState::deserialize).orElse(Blocks.AIR.getDefaultState()); - BlockState state = p_214657_0_.get("state").map(BlockState::deserialize).orElse(Blocks.AIR.getDefaultState()); - float chance = p_214657_0_.get("chance").asFloat(AEConfig.instance().getSpawnChargedChance()); - return new ChargedQuartzOreConfig(target, state, chance); - } - } diff --git a/src/main/java/appeng/worldgen/ChargedQuartzOreFeature.java b/src/main/java/appeng/worldgen/ChargedQuartzOreFeature.java index 7735f355e..887b10d5b 100644 --- a/src/main/java/appeng/worldgen/ChargedQuartzOreFeature.java +++ b/src/main/java/appeng/worldgen/ChargedQuartzOreFeature.java @@ -1,9 +1,6 @@ package appeng.worldgen; -import java.util.Random; - import com.mojang.serialization.Codec; - import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.ISeedReader; @@ -11,31 +8,25 @@ import net.minecraft.world.chunk.IChunk; import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.feature.Feature; -import net.minecraft.world.gen.feature.ReplaceBlockFeature; import net.minecraft.world.gen.feature.structure.StructureManager; -import appeng.core.AppEng; +import java.util.Random; /** - * Extends {@link ReplaceBlockFeature} by also allowing for a replacement - * chance. In addition, the feature will check every block in the chunk. + * Extends {@link net.minecraft.world.gen.feature.OreFeature} by also allowing + * for a replacement chance. In addition, the feature will check every block in + * the chunk. */ public class ChargedQuartzOreFeature extends Feature { - public static final ChargedQuartzOreFeature INSTANCE = new ChargedQuartzOreFeature( - ChargedQuartzOreConfig::deserialize); + public static final ChargedQuartzOreFeature INSTANCE = new ChargedQuartzOreFeature(ChargedQuartzOreConfig.CODEC); - static { - INSTANCE.setRegistryName(AppEng.MOD_ID, "charged_quartz_ore"); - } - - public ChargedQuartzOreFeature(Codec p_i51444_1_) { - super(p_i51444_1_); + public ChargedQuartzOreFeature(Codec codec) { + super(codec); } @Override - public boolean func_230362_a_(ISeedReader worldIn, StructureManager sm, ChunkGenerator generator, Random rand, - BlockPos pos, ChargedQuartzOreConfig config) { + public boolean func_230362_a_(ISeedReader worldIn, StructureManager structureAccessor, ChunkGenerator generator, Random rand, BlockPos pos, ChargedQuartzOreConfig config) { ChunkPos chunkPos = new ChunkPos(pos); BlockPos.Mutable bpos = new BlockPos.Mutable(); diff --git a/src/main/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java b/src/main/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java deleted file mode 100644 index caa3eaf26..000000000 --- a/src/main/java/appeng/worldgen/meteorite/MeteoriteSpawnData.java +++ /dev/null @@ -1,176 +0,0 @@ -package appeng.worldgen.meteorite; - -import java.util.ArrayList; -import java.util.Collection; - -import javax.annotation.Nullable; - -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.INBT; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.IWorld; -import net.minecraft.world.server.ServerWorld; -import net.minecraft.world.storage.WorldSavedData; -import net.minecraftforge.fml.server.ServerLifecycleHooks; - -import it.unimi.dsi.fastutil.longs.LongOpenHashSet; - -/** - * This is per-world data to track where Meteorites have been spawned. - */ -public final class MeteoriteSpawnData { - - private static final String NAME = "ae2_meteorite_spawns"; - - private final SavedData data; - - private MeteoriteSpawnData(SavedData data) { - this.data = data; - } - - public void setGenerated(ChunkPos chunkPos) { - synchronized (data) { - // edit. - data.generated.add(chunkPos.asLong()); - data.markDirty(); - } - } - - public boolean hasGenerated(ChunkPos pos) { - synchronized (data) { - return data.generated.contains(pos.asLong()); - } - } - - @Nullable - private CompoundNBT getSpawnData(int chunkX, int chunkZ, boolean create) { - chunkX /= 16; - chunkZ /= 16; - String key = chunkX + "," + chunkZ; - INBT inbt = data.spawns.get(key); - if (!(inbt instanceof CompoundNBT)) { - if (create) { - inbt = new CompoundNBT(); - data.spawns.put(key, inbt); - data.markDirty(); - } else { - return null; - } - } - return (CompoundNBT) inbt; - } - - /** - * Checks whether another meteorite has spawned within the given block range of - * the given position. - */ - public boolean isMeteoriteSpawnInRange(BlockPos pos, int rangeSquared) { - synchronized (data) { - ChunkPos chunkPos = new ChunkPos(pos); - CompoundNBT spawnData = getSpawnData(chunkPos.x, chunkPos.z, false); - if (spawnData == null) { - return false; - } - final int size = spawnData.getInt("num"); - for (int i = 0; i < size; i++) { - CompoundNBT existingSettingsNbt = spawnData.getCompound(String.valueOf(i)); - BlockPos existingPos = PlacedMeteoriteSettings.read(existingSettingsNbt).getPos(); - int deltaX = (existingPos.getX() - pos.getX()); - int deltaZ = (existingPos.getZ() - pos.getZ()); - if (deltaX * deltaX + deltaZ * deltaZ <= rangeSquared) { - return true; - } - } - } - return false; - } - - public boolean tryAddSpawnedMeteorite(PlacedMeteoriteSettings settings, int minDistanceSquared) { - synchronized (data) { - if (isMeteoriteSpawnInRange(settings.getPos(), minDistanceSquared)) { - return false; - } - - addSpawnedMeteorite(settings); - } - return true; - } - - public void addSpawnedMeteorite(PlacedMeteoriteSettings settings) { - synchronized (data) { - ChunkPos chunkPos = new ChunkPos(settings.getPos()); - CompoundNBT spawnData = getSpawnData(chunkPos.x, chunkPos.z, true); - final int size = spawnData.getInt("num"); - spawnData.put(String.valueOf(size), settings.write(new CompoundNBT())); - spawnData.putInt("num", size + 1); - data.markDirty(); - } - } - - public Collection getNearByMeteorites(int chunkX, int chunkZ) { - final Collection ll = new ArrayList<>(); - - synchronized (data) { - for (int x = -1; x <= 1; x++) { - for (int z = -1; z <= 1; z++) { - final int cx = x + (chunkX >> 4); - final int cz = z + (chunkZ >> 4); - - final CompoundNBT data = getSpawnData(cx << 4, cz << 4, false); - - if (data != null) { - // edit. - final int size = data.getInt("num"); - for (int s = 0; s < size; s++) { - CompoundNBT settingsNbt = data.getCompound(String.valueOf(s)); - ll.add(PlacedMeteoriteSettings.read(settingsNbt)); - } - } - } - } - } - - return ll; - } - - public synchronized static MeteoriteSpawnData get(IWorld world) { - ServerWorld serverWorld; - if (world instanceof ServerWorld) { - serverWorld = (ServerWorld) world; - } else { - MinecraftServer server = ServerLifecycleHooks.getCurrentServer(); - serverWorld = server.getWorld(world.getDimension().getType()); - } - - SavedData savedData = serverWorld.getSavedData().getOrCreate(SavedData::new, NAME); - return new MeteoriteSpawnData(savedData); - } - - private static class SavedData extends WorldSavedData { - - private LongOpenHashSet generated; - private CompoundNBT spawns; - - public SavedData() { - super(NAME); - this.generated = new LongOpenHashSet(); - this.spawns = new CompoundNBT(); - } - - @Override - public synchronized void read(CompoundNBT nbt) { - this.generated = new LongOpenHashSet(nbt.getLongArray("generated")); - this.spawns = nbt.getCompound("spawns"); - } - - @Override - public synchronized CompoundNBT write(CompoundNBT compound) { - compound.putLongArray("generated", generated.toLongArray()); - compound.put("spawns", spawns); - return compound; - } - } - -} diff --git a/src/main/java/appeng/worldgen/meteorite/MeteoriteStructure.java b/src/main/java/appeng/worldgen/meteorite/MeteoriteStructure.java index d7aeadf2e..dcf0c5b2f 100644 --- a/src/main/java/appeng/worldgen/meteorite/MeteoriteStructure.java +++ b/src/main/java/appeng/worldgen/meteorite/MeteoriteStructure.java @@ -4,10 +4,15 @@ import java.util.Random; import com.mojang.serialization.Codec; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SharedSeedRandom; +import net.minecraft.util.math.ChunkPos; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.BiomeManager; +import net.minecraft.world.biome.provider.BiomeProvider; import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.feature.NoFeatureConfig; +import net.minecraft.world.gen.feature.StructureFeature; import net.minecraft.world.gen.feature.structure.Structure; import appeng.core.AELog; @@ -15,56 +20,23 @@ import appeng.core.AppEng; public class MeteoriteStructure extends Structure { - public static final Structure INSTANCE = new MeteoriteStructure(NoFeatureConfig.field_236558_a_); + public static final ResourceLocation ID = AppEng.makeId("meteorite"); - static { - INSTANCE.setRegistryName(AppEng.MOD_ID, "meteorite"); - } + public static final Structure INSTANCE = new MeteoriteStructure( + NoFeatureConfig.field_236558_a_); - public MeteoriteStructure(Codec p_i231997_1_) { - super(p_i231997_1_); + public MeteoriteStructure(Codec configCodec) { + super(configCodec); } @Override - public boolean func_230363_a_(BiomeManager biomeManagerIn, ChunkGenerator generator, Random randIn, int chunkX, - int chunkZ, Biome biomeIn) { - if (super.func_230363_a_(biomeManagerIn, generator, randIn, chunkX, chunkZ, biomeIn)) { - // In case the biome blacklist fails, we still double-check here that we're not - // generating chunks for - // the nether or end. - if (generator.getClass().equals(EndChunkGenerator.class) - || generator.getClass().equals(NetherChunkGenerator.class)) { - AELog.warn("ignoring attempt to generate meteorite in nether/end."); - return false; - } - - int i = chunkX >> 4; - int j = chunkZ >> 4; - randIn.setSeed((long) (i ^ j << 4) ^ generator.getSeed()); - randIn.nextInt(); - return randIn.nextBoolean(); - } - return false; + protected boolean func_230363_a_(ChunkGenerator generator, BiomeProvider biomeSource, long seed, SharedSeedRandom randIn, int chunkX, int chunkZ, Biome biome, ChunkPos chunkPos2, NoFeatureConfig featureConfig) { + return randIn.nextBoolean(); } @Override - public String getStructureName() { - return INSTANCE.getRegistryName().toString(); - } - - @Override - public int getSize() { - return 2; - } - - @Override - public Structure.IStartFactory getStartFactory() { + public IStartFactory getStartFactory() { return MeteoriteStructureStart::new; } - @Override - protected int getSeedModifier() { - return 124895654; - } - } diff --git a/src/main/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java b/src/main/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java index c29cd77dc..14a8b870d 100644 --- a/src/main/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java +++ b/src/main/java/appeng/worldgen/meteorite/MeteoriteStructurePiece.java @@ -23,9 +23,11 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.world.ISeedReader; import net.minecraft.world.IWorld; import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.feature.structure.IStructurePieceType; +import net.minecraft.world.gen.feature.structure.StructureManager; import net.minecraft.world.gen.feature.structure.StructurePiece; import net.minecraft.world.gen.feature.template.TemplateManager; @@ -85,12 +87,11 @@ public class MeteoriteStructurePiece extends StructurePiece { } @Override - public boolean create(IWorld world, ChunkGenerator chunkGeneratorIn, Random rand, MutableBoundingBox bounds, - ChunkPos chunkPos) { + public boolean func_230383_a_(ISeedReader world, StructureManager p_230383_2_, ChunkGenerator chunkGeneratorIn, Random rand, MutableBoundingBox bounds, ChunkPos chunkPos, BlockPos p_230383_7_) { 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; } } diff --git a/src/main/java/appeng/worldgen/meteorite/MeteoriteStructureStart.java b/src/main/java/appeng/worldgen/meteorite/MeteoriteStructureStart.java index 180cd0ba4..81a3193bb 100644 --- a/src/main/java/appeng/worldgen/meteorite/MeteoriteStructureStart.java +++ b/src/main/java/appeng/worldgen/meteorite/MeteoriteStructureStart.java @@ -18,25 +18,26 @@ import net.minecraft.world.biome.Biome.TempCategory; import net.minecraft.world.gen.ChunkGenerator; import net.minecraft.world.gen.Heightmap; import net.minecraft.world.gen.Heightmap.Type; +import net.minecraft.world.gen.feature.NoFeatureConfig; import net.minecraft.world.gen.feature.structure.Structure; import net.minecraft.world.gen.feature.structure.StructureStart; import net.minecraft.world.gen.feature.template.TemplateManager; import appeng.worldgen.meteorite.fallout.FalloutMode; -public class MeteoriteStructureStart extends StructureStart { +public class MeteoriteStructureStart extends StructureStart { private final ITag sandTag = BlockTags.getCollection().getOrCreate(new ResourceLocation("minecraft:sand")); private final ITag terracottaTag = BlockTags.getCollection() .getOrCreate(new ResourceLocation("forge:terracotta")); - public MeteoriteStructureStart(Structure p_i225815_1_, int p_i225815_2_, int p_i225815_3_, + public MeteoriteStructureStart(Structure p_i225815_1_, int p_i225815_2_, int p_i225815_3_, MutableBoundingBox p_i225815_4_, int p_i225815_5_, long p_i225815_6_) { super(p_i225815_1_, p_i225815_2_, p_i225815_3_, p_i225815_4_, p_i225815_5_, p_i225815_6_); } - public void init(ChunkGenerator generator, TemplateManager templateManagerIn, int chunkX, int chunkZ, - Biome biome) { + public void func_230364_a_(ChunkGenerator generator, TemplateManager templateManagerIn, int chunkX, int chunkZ, + Biome biome, NoFeatureConfig config) { final int centerX = chunkX * 16 + this.rand.nextInt(16); final int centerZ = chunkZ * 16 + this.rand.nextInt(16); final float meteoriteRadius = (this.rand.nextFloat() * 6.0f) + 2; @@ -53,7 +54,7 @@ public class MeteoriteStructureStart extends StructureStart { int scanRadius = (int) Math.max(1, meteoriteRadius * 2); for (int x = -scanRadius; x <= scanRadius; x++) { for (int z = -scanRadius; z <= scanRadius; z++) { - int h = generator.getHeight(centerX + x, centerZ + z, heightmapType); + int h = generator.func_222529_a(centerX + x, centerZ + z, heightmapType); stats.add(h); } } @@ -88,7 +89,7 @@ public class MeteoriteStructureStart extends StructureStart { * @return true, if it found a single block of water */ private boolean locateWaterAroundTheCrater(ChunkGenerator generator, BlockPos pos, float radius) { - final int seaLevel = generator.getSeaLevel(); + final int seaLevel = generator.func_230356_f_(); final int maxY = seaLevel - 1; BlockPos.Mutable blockPos = new BlockPos.Mutable(); @@ -105,7 +106,7 @@ public class MeteoriteStructureStart extends StructureStart { final double distanceFrom = dx * dx + dz * dz; if (maxY > h + distanceFrom * 0.0175 && maxY < h + distanceFrom * 0.02) { - int heigth = generator.getHeight(blockPos.getX(), blockPos.getZ(), Heightmap.Type.OCEAN_FLOOR); + int heigth = generator.func_222529_a(blockPos.getX(), blockPos.getZ(), Heightmap.Type.OCEAN_FLOOR); if (heigth < seaLevel) { return true; } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 69da5a62b..a2e859b7d 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,12 +1,12 @@ # GUI rendering -protected net.minecraft.client.gui.screen.inventory.ContainerScreen func_146977_a(Lnet/minecraft/inventory/container/Slot;)V # drawSlot +protected net.minecraft.client.gui.screen.inventory.ContainerScreen func_238746_a_(Lcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/inventory/container/Slot;)V # drawSlot public net.minecraft.client.gui.widget.TextFieldWidget func_146188_c(IIII)V # drawSelectionBox public net.minecraft.client.gui.widget.TextFieldWidget func_146208_g()I # getMaxStringLength protected net.minecraft.inventory.container.Container field_75149_d # listeners # Reusing RedstoneParticle for ChargedOreFX -protected net.minecraft.client.particle.RedstoneParticle (Lnet/minecraft/world/World;DDDDDDLnet/minecraft/particles/RedstoneParticleData;Lnet/minecraft/client/particle/IAnimatedSprite;)V +protected net.minecraft.client.particle.RedstoneParticle (Lnet/minecraft/client/world/ClientWorld;DDDDDDLnet/minecraft/particles/RedstoneParticleData;Lnet/minecraft/client/particle/IAnimatedSprite;)V # We need to change yPos of existing slots to resize the container public-f net.minecraft.inventory.container.Slot field_75223_e # xPos @@ -17,3 +17,6 @@ public net.minecraft.item.crafting.RecipeManager func_215366_a(Lnet/minecraft/it # To disable water-bobbing of item entities (for growing crystals) protected net.minecraft.entity.item.ItemEntity func_203043_v()V # applyFloatMotion + +# Registration of custom DimensionType +public net.minecraft.world.DimensionType (Ljava/util/OptionalLong;ZZZZZZZZZILnet/minecraft/util/ResourceLocation;F)V diff --git a/src/test/java/appeng/core/worlddata/SpatialDimensionExtraDataTest.java b/src/test/java/appeng/core/worlddata/SpatialDimensionExtraDataTest.java deleted file mode 100644 index fe2e32241..000000000 --- a/src/test/java/appeng/core/worlddata/SpatialDimensionExtraDataTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package appeng.core.worlddata; - -import static org.junit.Assert.*; - -import org.junit.Test; - -import io.netty.buffer.Unpooled; - -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.math.BlockPos; - -import appeng.spatial.SpatialDimensionExtraData; - -public class SpatialDimensionExtraDataTest { - - /** - * The returned buffer should have just the right capacity. - */ - @Test - public void testCreatedBufferSize() { - PacketBuffer buffer = new SpatialDimensionExtraData(BlockPos.ZERO).write(); - assertEquals(1 + 8 + 8, buffer.array().length); - } - - @Test - public void testReadWriteSize() { - BlockPos capacity = new BlockPos(1, 2, 3); - PacketBuffer buffer = new SpatialDimensionExtraData(capacity).write(); - - PacketBuffer readBackBuf = new PacketBuffer(Unpooled.wrappedBuffer(buffer.array())); - SpatialDimensionExtraData extraData = SpatialDimensionExtraData.read(readBackBuf); - assertNotNull(extraData); - assertEquals(capacity, extraData.getSize()); - } - - /** - * Gracefully handle format version errors. - */ - @Test - public void testHandleInvalidFormatVersion() { - PacketBuffer buffer = new SpatialDimensionExtraData(BlockPos.ZERO).write(); - buffer.writerIndex(0); - buffer.writeByte(5); - - PacketBuffer readBackBuf = new PacketBuffer(Unpooled.wrappedBuffer(buffer.array())); - assertNull(SpatialDimensionExtraData.read(readBackBuf)); - } - -} \ No newline at end of file