diff --git a/src/api/java/appeng/api/storage/IStorageChannel.java b/src/api/java/appeng/api/storage/IStorageChannel.java index 58c3eaaf5..e455a12c4 100644 --- a/src/api/java/appeng/api/storage/IStorageChannel.java +++ b/src/api/java/appeng/api/storage/IStorageChannel.java @@ -95,7 +95,7 @@ public interface IStorageChannel> * @throws IOException */ @Nullable - T readFromPacket( @Nonnull PacketBuffer input ) throws IOException; + T readFromPacket( @Nonnull PacketBuffer input ); /** * create from nbt data diff --git a/src/api/java/appeng/api/storage/data/IAEStack.java b/src/api/java/appeng/api/storage/data/IAEStack.java index 1f6707fd2..3b402654c 100644 --- a/src/api/java/appeng/api/storage/data/IAEStack.java +++ b/src/api/java/appeng/api/storage/data/IAEStack.java @@ -164,7 +164,7 @@ public interface IAEStack> * * @throws IOException */ - void writeToPacket( PacketBuffer data ) throws IOException; + void writeToPacket( PacketBuffer data ); /** * Clone the Item / Fluid Stack diff --git a/src/main/java/appeng/block/AEBaseTileBlock.java b/src/main/java/appeng/block/AEBaseTileBlock.java index ceb3d83bd..6109ab2c6 100644 --- a/src/main/java/appeng/block/AEBaseTileBlock.java +++ b/src/main/java/appeng/block/AEBaseTileBlock.java @@ -26,7 +26,10 @@ import java.util.function.Supplier; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import appeng.block.networking.BlockCableBus; import appeng.client.render.FacingToRotation; +import appeng.tile.networking.TileCableBus; +import appeng.tile.storage.TileSkyChest; import com.google.common.collect.Lists; import net.minecraft.block.Block; @@ -133,8 +136,16 @@ public abstract class AEBaseTileBlock extends AEBaseBlock return this.tileEntityFactory.get(); } + @Override + public void dropXpOnBlockBreak(World worldIn, BlockPos pos, int amount) { + super.dropXpOnBlockBreak(worldIn, pos, amount); + } + @Override public void onReplaced(BlockState state, World w, BlockPos pos, BlockState newState, boolean isMoving) { + if (newState.getBlock() == state.getBlock()) { + return; // Just a block state change + } final AEBaseTile te = this.getTileEntity( w, pos ); if( te != null ) @@ -236,10 +247,10 @@ public abstract class AEBaseTileBlock extends AEBaseBlock return ActionResultType.FAIL; } - // FIXME if( tile instanceof TileCableBus || tile instanceof TileSkyChest ) - // { - // return ActionResultType.FAIL; - // } + if( tile instanceof TileCableBus || tile instanceof TileSkyChest) + { + return ActionResultType.FAIL; + } final ItemStack[] itemDropCandidates = Platform.getBlockDrops( world, pos ); final ItemStack op = new ItemStack( this ); @@ -266,7 +277,7 @@ public abstract class AEBaseTileBlock extends AEBaseBlock return ActionResultType.FAIL; } - if( heldItem.getItem() instanceof IMemoryCard /* FIXME && !( this instanceof BlockCableBus ) */ ) + if( heldItem.getItem() instanceof IMemoryCard && !( this instanceof BlockCableBus) ) { final IMemoryCard memoryCard = (IMemoryCard) heldItem.getItem(); final AEBaseTile tileEntity = this.getTileEntity( world, pos ); diff --git a/src/main/java/appeng/block/crafting/AbstractCraftingUnitBlock.java b/src/main/java/appeng/block/crafting/AbstractCraftingUnitBlock.java index 9e5322901..2aaac845d 100644 --- a/src/main/java/appeng/block/crafting/AbstractCraftingUnitBlock.java +++ b/src/main/java/appeng/block/crafting/AbstractCraftingUnitBlock.java @@ -70,6 +70,10 @@ public abstract class AbstractCraftingUnitBlock exte @Override public void onReplaced(BlockState state, World w, BlockPos pos, BlockState newState, boolean isMoving) { + if (newState.getBlock() == state.getBlock()) { + return; // Just a block state change + } + final TileCraftingTile cp = this.getTileEntity( w, pos ); if( cp != null ) { diff --git a/src/main/java/appeng/block/misc/BlockSecurityStation.java b/src/main/java/appeng/block/misc/BlockSecurityStation.java index 3750d5124..7e34b12a7 100644 --- a/src/main/java/appeng/block/misc/BlockSecurityStation.java +++ b/src/main/java/appeng/block/misc/BlockSecurityStation.java @@ -91,7 +91,7 @@ public class BlockSecurityStation extends AEBaseTileBlock final TileSecurityStation tg = this.getTileEntity( w, pos ); if( tg != null ) { - if( Platform.isClient() ) + if( w.isRemote() ) { return ActionResultType.SUCCESS; } diff --git a/src/main/java/appeng/block/networking/BlockCableBus.java b/src/main/java/appeng/block/networking/BlockCableBus.java index 6490606f7..321287cf4 100644 --- a/src/main/java/appeng/block/networking/BlockCableBus.java +++ b/src/main/java/appeng/block/networking/BlockCableBus.java @@ -339,7 +339,7 @@ public class BlockCableBus extends AEBaseTileBlock /* FIXME implem @Override public void onBlockClicked(BlockState state, World worldIn, BlockPos pos, PlayerEntity player) { - if( Platform.isClient() ) + if( worldIn.isRemote() ) { final RayTraceResult rtr = Minecraft.getInstance().objectMouseOver; if( rtr instanceof BlockRayTraceResult) diff --git a/src/main/java/appeng/block/qnb/BlockQuantumBase.java b/src/main/java/appeng/block/qnb/BlockQuantumBase.java index f6747dfc9..3fd5cf8f0 100644 --- a/src/main/java/appeng/block/qnb/BlockQuantumBase.java +++ b/src/main/java/appeng/block/qnb/BlockQuantumBase.java @@ -86,6 +86,10 @@ public abstract class BlockQuantumBase extends AEBaseTileBlock final TileChest tg = this.getTileEntity( w, pos ); if( tg != null && !p.isCrouching() ) { - if( Platform.isClient() ) + if( w.isRemote() ) { return ActionResultType.SUCCESS; } diff --git a/src/main/java/appeng/bootstrap/components/IItemColorRegistrationComponent.java b/src/main/java/appeng/bootstrap/components/IItemColorRegistrationComponent.java new file mode 100644 index 000000000..1f3fc5d40 --- /dev/null +++ b/src/main/java/appeng/bootstrap/components/IItemColorRegistrationComponent.java @@ -0,0 +1,11 @@ +package appeng.bootstrap.components; + +import appeng.bootstrap.IBootstrapComponent; +import net.minecraft.client.renderer.color.BlockColors; +import net.minecraft.client.renderer.color.ItemColors; + +public interface IItemColorRegistrationComponent extends IBootstrapComponent { + + void register(ItemColors itemColors, BlockColors blockColors); + +} diff --git a/src/main/java/appeng/bootstrap/components/ItemColorComponent.java b/src/main/java/appeng/bootstrap/components/ItemColorComponent.java index e4e04cf0d..3a6d1cf58 100644 --- a/src/main/java/appeng/bootstrap/components/ItemColorComponent.java +++ b/src/main/java/appeng/bootstrap/components/ItemColorComponent.java @@ -19,15 +19,14 @@ package appeng.bootstrap.components; -import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.color.BlockColors; import net.minecraft.client.renderer.color.IItemColor; +import net.minecraft.client.renderer.color.ItemColors; import net.minecraft.item.Item; -import net.minecraftforge.api.distmarker.Dist; -public class ItemColorComponent implements IInitComponent +public class ItemColorComponent implements IItemColorRegistrationComponent { - private final Item item; private final IItemColor itemColor; @@ -39,8 +38,8 @@ public class ItemColorComponent implements IInitComponent } @Override - public void initialize() + public void register(ItemColors itemColors, BlockColors blockColors) { - Minecraft.getInstance().getItemColors().register( this.itemColor, this.item ); + itemColors.register( this.itemColor, this.item ); } } diff --git a/src/main/java/appeng/client/ClientHelper.java b/src/main/java/appeng/client/ClientHelper.java index 1ce6a351e..8f868e178 100644 --- a/src/main/java/appeng/client/ClientHelper.java +++ b/src/main/java/appeng/client/ClientHelper.java @@ -19,7 +19,6 @@ package appeng.client; -import java.io.IOException; import java.util.*; import appeng.client.render.effects.*; @@ -27,7 +26,6 @@ import appeng.core.AEConfig; import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.packets.PacketAssemblerAnimation; import appeng.core.sync.packets.PacketValueConfig; -import com.mojang.blaze3d.platform.GlStateManager; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.util.InputMappings; @@ -39,22 +37,17 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.client.event.InputEvent; import net.minecraftforge.client.event.RenderLivingEvent; -import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.client.registry.ClientRegistry; import appeng.api.parts.CableRenderMode; -import appeng.api.util.AEColor; import appeng.block.AEBaseBlock; -import appeng.core.AELog; import appeng.core.AppEng; import appeng.helpers.IMouseWheelItem; import appeng.server.ServerHelper; import appeng.util.Platform; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.registries.ForgeRegistries; public class ClientHelper extends ServerHelper @@ -63,24 +56,11 @@ public class ClientHelper extends ServerHelper private final EnumMap bindings = new EnumMap<>( ActionKey.class ); - @Override - public void preinit() + public void clientInit() { - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientInit); MinecraftForge.EVENT_BUS.addListener(this::postPlayerRender); MinecraftForge.EVENT_BUS.addListener(this::wheelEvent); - // Do not register the Fullbright hacks if Optifine is present or if the Forge lighting is disabled - // FIXME if( !FMLClientHandler.instance().hasOptifine() && ForgeModContainer.forgeLightPipelineEnabled ) - // FIXME { - // FIXME ModelLoaderRegistry.registerLoader( UVLModelLoader.INSTANCE ); - // FIXME } - // FIXME RenderingRegistry.registerEntityRenderingHandler( EntityTinyTNTPrimed.class, manager -> new RenderTinyTNTPrimed( manager ) ); - // FIXME RenderingRegistry.registerEntityRenderingHandler( EntityFloatingItem.class, manager -> new RenderFloatingItem( manager ) ); - } - - private void clientInit(FMLClientSetupEvent event) - { for( ActionKey key : ActionKey.values() ) { final KeyBinding binding = new KeyBinding( key.getTranslationKey(), key.getDefaultKey(), KEY_CATEGORY ); diff --git a/src/main/java/appeng/client/gui/AEBaseGui.java b/src/main/java/appeng/client/gui/AEBaseGui.java index 285219033..762f1434c 100644 --- a/src/main/java/appeng/client/gui/AEBaseGui.java +++ b/src/main/java/appeng/client/gui/AEBaseGui.java @@ -92,26 +92,6 @@ public abstract class AEBaseGui extends ContainerScre super(container, playerInventory, title); } - protected static String join( final Collection toolTip, final String delimiter ) - { - final Joiner joiner = Joiner.on( delimiter ); - - return joiner.join( toolTip ); - } - - protected int getQty( final Button btn ) - { - try - { - final DecimalFormat df = new DecimalFormat( "+#;-#" ); - return df.parse( btn.getMessage() ).intValue(); - } - catch( final ParseException e ) - { - return 0; - } - } - @Override public void init() { @@ -157,6 +137,7 @@ public abstract class AEBaseGui extends ContainerScre this.drawTooltip( c, mouseX - this.guiLeft, mouseY - this.guiTop ); } RenderSystem.popMatrix(); + RenderSystem.enableDepthTest(); this.renderHoveredToolTip( mouseX, mouseY ); @@ -182,11 +163,9 @@ public abstract class AEBaseGui extends ContainerScre if( this.isPointInRegion( left, top, slot.getWidth(), slot.getHeight(), mouseX, mouseY ) && slot.canClick( this.minecraft.player ) ) { - RenderSystem.disableLighting(); RenderSystem.colorMask( true, true, true, false ); this.fillGradient( left, top, right, bottom, -2130706433, -2130706433 ); RenderSystem.colorMask( true, true, true, true ); - RenderSystem.enableLighting(); } } } @@ -390,45 +369,38 @@ public abstract class AEBaseGui extends ContainerScre return; } -// FIXME if( slot instanceof SlotPatternTerm ) -// FIXME { -// FIXME if( mouseButton == 6 ) -// FIXME { -// FIXME return; // prevent weird double clicks.. -// FIXME } -// FIXME -// FIXME try -// FIXME { -// FIXME NetworkHandler.instance().sendToServer( ( (SlotPatternTerm) slot ).getRequest( hasShiftDown() ) ); -// FIXME } -// FIXME catch( final IOException e ) -// FIXME { -// FIXME AELog.debug( e ); -// FIXME } -// FIXME } -// FIXME else if( slot instanceof SlotCraftingTerm ) -// FIXME { -// FIXME if( mouseButton == 6 ) -// FIXME { -// FIXME return; // prevent weird double clicks.. -// FIXME } -// FIXME -// FIXME InventoryAction action = null; -// FIXME if( hasShiftDown() ) -// FIXME { -// FIXME action = InventoryAction.CRAFT_SHIFT; -// FIXME } -// FIXME else -// FIXME { -// FIXME // Craft stack on right-click, craft single on left-click -// FIXME action = ( mouseButton == 1 ) ? InventoryAction.CRAFT_STACK : InventoryAction.CRAFT_ITEM; -// FIXME } -// FIXME -// FIXME final PacketInventoryAction p = new PacketInventoryAction( action, slotIdx, 0 ); -// FIXME NetworkHandler.instance().sendToServer( p ); -// FIXME -// FIXME return; -// FIXME } + if( slot instanceof SlotPatternTerm ) + { + if( mouseButton == 6 ) + { + return; // prevent weird double clicks.. + } + + NetworkHandler.instance().sendToServer( ( (SlotPatternTerm) slot ).getRequest( hasShiftDown() ) ); + } + else if( slot instanceof SlotCraftingTerm ) + { + if( mouseButton == 6 ) + { + return; // prevent weird double clicks.. + } + + InventoryAction action = null; + if( hasShiftDown() ) + { + action = InventoryAction.CRAFT_SHIFT; + } + else + { + // Craft stack on right-click, craft single on left-click + action = ( mouseButton == 1 ) ? InventoryAction.CRAFT_STACK : InventoryAction.CRAFT_ITEM; + } + + final PacketInventoryAction p = new PacketInventoryAction( action, slotIdx, 0 ); + NetworkHandler.instance().sendToServer( p ); + + return; + } if( InputMappings.isKeyDown(Minecraft.getInstance().getMainWindow().getHandle(), GLFW.GLFW_KEY_SPACE) ) { @@ -777,7 +749,6 @@ public abstract class AEBaseGui extends ContainerScre if( fs != null && this.isPowered() ) { - RenderSystem.disableLighting(); RenderSystem.disableBlend(); final Fluid fluid = fs.getFluid(); FluidAttributes fluidAttributes = fluid.getAttributes(); @@ -793,7 +764,6 @@ public abstract class AEBaseGui extends ContainerScre RenderSystem.color3f( red, green, blue ); blit(s.xPos, s.yPos, 0 /* FIXME: Validate this was previous the controls zindex */, 16, 16, sprite); - RenderSystem.enableLighting(); RenderSystem.enableBlend(); this.fluidStackSizeRenderer.renderStackSize( this.font, fs, s.xPos, s.yPos ); @@ -823,7 +793,6 @@ public abstract class AEBaseGui extends ContainerScre final int uv_x = aes.getIcon() - uv_y * 16; RenderSystem.enableBlend(); - RenderSystem.disableLighting(); RenderSystem.enableTexture(); RenderSystem.blendFunc( GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA ); RenderSystem.color4f( 1.0f, 1.0f, 1.0f, 1.0f ); @@ -897,9 +866,7 @@ public abstract class AEBaseGui extends ContainerScre // FIXME this.zLevel = 100.0F; this.itemRenderer.zLevel = 100.0F; - RenderSystem.disableLighting(); fill( s.xPos, s.yPos, 16 + s.xPos, 16 + s.yPos, 0x66ff6666 ); - RenderSystem.enableLighting(); // FIXME this.zLevel = 0.0F; this.itemRenderer.zLevel = 0.0F; diff --git a/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java b/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java index 93feb4988..7b5642c32 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java +++ b/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java @@ -19,7 +19,6 @@ package appeng.client.gui.implementations; -import java.io.IOException; import java.util.List; import appeng.container.implementations.ContainerCraftingStatus; @@ -107,6 +106,7 @@ public class GuiMEMonitorable extends AEBaseME final GuiScrollbar scrollbar = new GuiScrollbar(); this.setScrollBar( scrollbar ); this.repo = new ItemRepo( scrollbar, this ); + setScrollBar(); this.xSize = 185; this.ySize = 204; @@ -333,11 +333,11 @@ public class GuiMEMonitorable extends AEBaseME craftingGridOffsetX = Integer.MAX_VALUE; craftingGridOffsetY = Integer.MAX_VALUE; - for( final Object s : this.container.inventorySlots ) + for( final Slot s : this.container.inventorySlots ) { if( s instanceof AppEngSlot ) { - if( ( (Slot) s ).xPos < 197 ) + if( s.xPos < 197 ) { this.repositionSlot( (AppEngSlot) s ); } @@ -345,11 +345,10 @@ public class GuiMEMonitorable extends AEBaseME if( s instanceof SlotCraftingMatrix || s instanceof SlotFakeCraftingMatrix ) { - final Slot g = (Slot) s; - if( g.xPos > 0 && g.yPos > 0 ) + if( s.xPos > 0 && s.yPos > 0 ) { - craftingGridOffsetX = Math.min( craftingGridOffsetX, g.xPos ); - craftingGridOffsetY = Math.min( craftingGridOffsetY, g.yPos ); + craftingGridOffsetX = Math.min( craftingGridOffsetX, s.xPos ); + craftingGridOffsetY = Math.min( craftingGridOffsetY, s.yPos ); } } } @@ -457,8 +456,7 @@ public class GuiMEMonitorable extends AEBaseME protected void repositionSlot( final AppEngSlot s ) { - // FIXME .... it's final now, WHAT DO WE DO ARGH - // s.yPos = s.getY() + this.ySize - 78 - 5; + s.yPos = s.getY() + this.ySize - 78 - 5; } @Override diff --git a/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java b/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java index 004022486..0330f0163 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java @@ -149,6 +149,6 @@ public class GuiPatternTerm extends GuiMEMonitorable { final int offsetPlayerSide = s.isPlayerSide() ? 5 : 3; - // FIXME OH NOOOOO WE CANNOT, ITS FINAL s.yPos = s.getY() + this.ySize - 78 - offsetPlayerSide; + s.yPos = s.getY() + this.ySize - 78 - offsetPlayerSide; } } diff --git a/src/main/java/appeng/client/gui/widgets/MEGuiTextField.java b/src/main/java/appeng/client/gui/widgets/MEGuiTextField.java index b6eaa34d7..cd2147175 100644 --- a/src/main/java/appeng/client/gui/widgets/MEGuiTextField.java +++ b/src/main/java/appeng/client/gui/widgets/MEGuiTextField.java @@ -163,6 +163,7 @@ public class MEGuiTextField extends TextFieldWidget tessellator.draw(); RenderSystem.disableColorLogicOp(); RenderSystem.enableTexture(); + RenderSystem.color4f( 1, 1, 1, 1 ); } } diff --git a/src/main/java/appeng/client/me/SlotDisconnected.java b/src/main/java/appeng/client/me/SlotDisconnected.java index d4885d46a..96cde88e6 100644 --- a/src/main/java/appeng/client/me/SlotDisconnected.java +++ b/src/main/java/appeng/client/me/SlotDisconnected.java @@ -19,6 +19,7 @@ package appeng.client.me; +import appeng.items.misc.ItemEncodedPattern; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -62,15 +63,15 @@ public class SlotDisconnected extends AppEngSlot if( Platform.isClient() ) { final ItemStack is = super.getStack(); - // FIXME if( !is.isEmpty() && is.getItem() instanceof ItemEncodedPattern ) - // FIXME { - // FIXME final ItemEncodedPattern iep = (ItemEncodedPattern) is.getItem(); - // FIXME final ItemStack out = iep.getOutput( is ); - // FIXME if( !out.isEmpty() ) - // FIXME { - // FIXME return out; - // FIXME } - // FIXME } + if( !is.isEmpty() && is.getItem() instanceof ItemEncodedPattern) + { + final ItemEncodedPattern iep = (ItemEncodedPattern) is.getItem(); + final ItemStack out = iep.getOutput( is ); + if( !out.isEmpty() ) + { + return out; + } + } } return super.getStack(); } diff --git a/src/main/java/appeng/client/render/StackSizeRenderer.java b/src/main/java/appeng/client/render/StackSizeRenderer.java index 59ed5ac15..94a2ff648 100644 --- a/src/main/java/appeng/client/render/StackSizeRenderer.java +++ b/src/main/java/appeng/client/render/StackSizeRenderer.java @@ -53,7 +53,6 @@ public class StackSizeRenderer { final String craftLabelText = AEConfig.instance().useTerminalUseLargeFont() ? GuiText.LargeFontCraft.getLocal() : GuiText.SmallFontCraft .getLocal(); - RenderSystem.disableLighting(); RenderSystem.disableDepthTest(); RenderSystem.disableBlend(); RenderSystem.pushMatrix(); @@ -62,7 +61,6 @@ public class StackSizeRenderer final int Y = (int) ( ( (float) yPos + offset + 16.0f - 7.0f * scaleFactor ) * inverseScaleFactor ); fontRenderer.drawStringWithShadow( craftLabelText, X, Y, 16777215 ); RenderSystem.popMatrix(); - RenderSystem.enableLighting(); RenderSystem.enableDepthTest(); RenderSystem.enableBlend(); } @@ -71,7 +69,6 @@ public class StackSizeRenderer { final String stackSize = this.getToBeRenderedStackSize( aeStack.getStackSize() ); - RenderSystem.disableLighting(); RenderSystem.disableDepthTest(); RenderSystem.disableBlend(); RenderSystem.pushMatrix(); @@ -80,7 +77,6 @@ public class StackSizeRenderer final int Y = (int) ( ( (float) yPos + offset + 16.0f - 7.0f * scaleFactor ) * inverseScaleFactor ); fontRenderer.drawStringWithShadow( stackSize, X, Y, 16777215 ); RenderSystem.popMatrix(); - RenderSystem.enableLighting(); RenderSystem.enableDepthTest(); RenderSystem.enableBlend(); } diff --git a/src/main/java/appeng/container/AEBaseContainer.java b/src/main/java/appeng/container/AEBaseContainer.java index 7ef45b1cf..508ea37e6 100644 --- a/src/main/java/appeng/container/AEBaseContainer.java +++ b/src/main/java/appeng/container/AEBaseContainer.java @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; +import appeng.container.slot.*; import appeng.core.Api; import appeng.core.sync.packets.PacketInventoryAction; import appeng.core.sync.packets.PacketValueConfig; @@ -56,12 +57,6 @@ import appeng.api.storage.data.IAEItemStack; import appeng.client.me.SlotME; import appeng.container.guisync.GuiSync; import appeng.container.guisync.SyncData; -import appeng.container.slot.AppEngSlot; -import appeng.container.slot.SlotDisabled; -import appeng.container.slot.SlotFake; -import appeng.container.slot.SlotInaccessible; -import appeng.container.slot.SlotPlayerHotBar; -import appeng.container.slot.SlotPlayerInv; import appeng.core.AELog; import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.packets.PacketTargetItemStack; @@ -92,6 +87,8 @@ public abstract class AEBaseContainer extends Container private boolean sentCustomName; private int ticksSinceCheck = 900; private IAEItemStack clientRequestedTargetItem = null; + // Slots that were created to represent the player inventory + private List playerInventorySlots = null; public AEBaseContainer( ContainerType containerType, int id, final PlayerInventory ip, final TileEntity myTile, final IPart myPart ) { @@ -409,7 +406,7 @@ public abstract class AEBaseContainer extends Container { final AppEngSlot cs = (AppEngSlot) inventorySlot; - if( !( cs.isPlayerSide() ) && !( cs instanceof SlotFake ) /* FIXME && !( cs instanceof SlotCraftingMatrix ) */ ) + if( !( cs.isPlayerSide() ) && !( cs instanceof SlotFake ) && !( cs instanceof SlotCraftingMatrix) ) { if( cs.isItemValid( tis ) ) { @@ -428,7 +425,7 @@ public abstract class AEBaseContainer extends Container { final AppEngSlot cs = (AppEngSlot) inventorySlot; - if( ( cs.isPlayerSide() ) && !( cs instanceof SlotFake ) /* FIXME && !( cs instanceof SlotCraftingMatrix ) */ ) + if( ( cs.isPlayerSide() ) && !( cs instanceof SlotFake ) && !( cs instanceof SlotCraftingMatrix ) ) { if( cs.isItemValid( tis ) ) { @@ -658,18 +655,18 @@ public abstract class AEBaseContainer extends Container { final Slot s = this.getSlot( slot ); -// FIXME if( s instanceof SlotCraftingTerm ) -// FIXME { -// FIXME switch( action ) -// FIXME { -// FIXME case CRAFT_SHIFT: -// FIXME case CRAFT_ITEM: -// FIXME case CRAFT_STACK: -// FIXME ( (SlotCraftingTerm) s ).doClick( action, player ); -// FIXME this.updateHeld( player ); -// FIXME default: -// FIXME } -// FIXME } + if( s instanceof SlotCraftingTerm ) + { + switch( action ) + { + case CRAFT_SHIFT: + case CRAFT_ITEM: + case CRAFT_STACK: + ( (SlotCraftingTerm) s ).doClick( action, player ); + this.updateHeld( player ); + default: + } + } if( s instanceof SlotFake ) { @@ -742,7 +739,7 @@ public abstract class AEBaseContainer extends Container for( final Object j : this.inventorySlots ) { - if( j instanceof Slot && j.getClass() == s.getClass() /* FIXME && !( j instanceof SlotCraftingTerm ) */ ) + if( j instanceof Slot && j.getClass() == s.getClass() && !( j instanceof SlotCraftingTerm ) ) { from.add( (Slot) j ); } @@ -1014,17 +1011,10 @@ public abstract class AEBaseContainer extends Container { if( Platform.isServer() ) { - try - { - NetworkHandler.instance() - .sendTo( - new PacketInventoryAction( InventoryAction.UPDATE_HAND, 0, AEItemStack.fromItemStack( p.inventory.getItemStack() ) ), - p ); - } - catch( final IOException e ) - { - AELog.debug( e ); - } + NetworkHandler.instance() + .sendTo( + new PacketInventoryAction( InventoryAction.UPDATE_HAND, 0, AEItemStack.fromItemStack( p.inventory.getItemStack() ) ), + p ); } } diff --git a/src/main/java/appeng/container/guisync/SyncData.java b/src/main/java/appeng/container/guisync/SyncData.java index 5e41c70c5..7138b7db8 100644 --- a/src/main/java/appeng/container/guisync/SyncData.java +++ b/src/main/java/appeng/container/guisync/SyncData.java @@ -27,6 +27,7 @@ import appeng.container.AEBaseContainer; import appeng.core.AELog; import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.packets.PacketProgressBar; +import appeng.core.sync.packets.PacketValueConfig; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.container.IContainerListener; @@ -66,27 +67,20 @@ public class SyncData this.send( c, val ); } } - catch( final IllegalArgumentException e ) - { - AELog.debug( e ); - } - catch( final IllegalAccessException e ) - { - AELog.debug( e ); - } - catch( final IOException e ) + catch( final IllegalArgumentException | IllegalAccessException e ) { AELog.debug( e ); } + } - private void send( final IContainerListener o, final Object val ) throws IOException + private void send( final IContainerListener o, final Object val ) { if( val instanceof String ) { if( o instanceof ServerPlayerEntity) { - // FIXME NetworkHandler.instance().sendTo( new PacketValueConfig( "SyncDat." + this.channel, (String) val ), (ServerPlayerEntity) o ); + NetworkHandler.instance().sendTo( new PacketValueConfig( "SyncDat." + this.channel, (String) val ), (ServerPlayerEntity) o ); } } else if( this.field.getType().isEnum() ) diff --git a/src/main/java/appeng/container/helper/AbstractContainerHelper.java b/src/main/java/appeng/container/helper/AbstractContainerHelper.java new file mode 100644 index 000000000..5e71143a9 --- /dev/null +++ b/src/main/java/appeng/container/helper/AbstractContainerHelper.java @@ -0,0 +1,59 @@ +package appeng.container.helper; + +import appeng.api.config.SecurityPermissions; +import appeng.api.networking.IGrid; +import appeng.api.networking.IGridNode; +import appeng.api.networking.energy.IEnergyGrid; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.ISecurityGrid; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; + +abstract class AbstractContainerHelper { + + private final SecurityPermissions requiredPermission; + + public AbstractContainerHelper(SecurityPermissions requiredPermission) { + this.requiredPermission = requiredPermission; + } + + protected boolean checkPermission(PlayerEntity player, Object accessInterface) { + + // FIXME: Check permissions... + if (requiredPermission != null && accessInterface instanceof IActionHost) + { + final IGridNode gn = ( (IActionHost) accessInterface ).getActionableNode(); + if( gn != null ) + { + final IGrid g = gn.getGrid(); + if( g != null ) + { + final boolean requirePower = false; + if( requirePower ) + { + final IEnergyGrid eg = g.getCache( IEnergyGrid.class ); + if( !eg.isNetworkPowered() ) + { + // FIXME trace logging? + return false; + } + } + + final ISecurityGrid sg = g.getCache( ISecurityGrid.class ); + if( !sg.hasPermission( player, this.requiredPermission ) ) + { + player.sendMessage(new TranslationTextComponent("appliedenergistics2.permission_denied") + .applyTextStyle(TextFormatting.RED)); + // FIXME trace logging? + return false; + } + } + } + } + + return true; + + } + +} diff --git a/src/main/java/appeng/container/helper/PartContainerHelper.java b/src/main/java/appeng/container/helper/PartContainerHelper.java index a58f87eaa..e8b172d73 100644 --- a/src/main/java/appeng/container/helper/PartContainerHelper.java +++ b/src/main/java/appeng/container/helper/PartContainerHelper.java @@ -23,7 +23,7 @@ import net.minecraftforge.fml.network.NetworkHooks; * @param * @param

The type of part this container is for. */ -public final class PartContainerHelper { +public final class PartContainerHelper extends AbstractContainerHelper { private final Class

partClass; @@ -36,6 +36,7 @@ public final class PartContainerHelper factory, Class

partClass, SecurityPermissions requiredPermission) { + super(requiredPermission); this.partClass = partClass; this.factory = factory; this.requiredPermission = requiredPermission; @@ -79,6 +80,10 @@ public final class PartContainerHelper */ // FIXME: This is also used in contexts where access is via an item that implements I or exposes I via IGuiItemObject -public final class PartOrTileContainerHelper { +public final class PartOrTileContainerHelper extends AbstractContainerHelper { private final Class interfaceClass; @@ -35,6 +43,7 @@ public final class PartOrTileContainerHelper { } public PartOrTileContainerHelper(ContainerFactory factory, Class interfaceClass, SecurityPermissions requiredPermission) { + super(requiredPermission); this.interfaceClass = interfaceClass; this.factory = factory; this.requiredPermission = requiredPermission; @@ -61,16 +70,19 @@ public final class PartOrTileContainerHelper { I accessInterface = getHostFromLocator(player, locator); + if (accessInterface == null) { + return false; + } + + if (!checkPermission(player, accessInterface)) { + return false; + } + // Use block name at position // FIXME: this is not right, we'd need to check the part's item stack, or custom naming interface impl // FIXME: Should move this up, because at this point, it's hard to know where the terminal host came from (part or tile) ITextComponent title = player.world.getBlockState(locator.getBlockPos()).getBlock().getNameTextComponent(); - // FIXME: Check permissions... - if (requiredPermission != null) { - throw new IllegalStateException(); // NOT YET IMPLEMENTED - } - INamedContainerProvider container = new SimpleNamedContainerProvider( (wnd, p, pl) -> { C c = factory.create(wnd, p, accessInterface); @@ -80,7 +92,7 @@ public final class PartOrTileContainerHelper { return c; }, title ); - NetworkHooks.openGui((ServerPlayerEntity) player, container, locator.getBlockPos()); + NetworkHooks.openGui((ServerPlayerEntity) player, container, locator::write); return true; } @@ -92,6 +104,7 @@ public final class PartOrTileContainerHelper { } TileEntity tileEntity = player.world.getTileEntity(locator.getBlockPos()); + // The tile entity itself can host a terminal (i.e. Chest!) if (interfaceClass.isInstance(tileEntity)) { return interfaceClass.cast(tileEntity); @@ -99,10 +112,15 @@ public final class PartOrTileContainerHelper { // But it could also be a part attached to the tile entity IPartHost partHost = (IPartHost) tileEntity; IPart part = partHost.getPart(locator.getSide()); + if (part == null) { + return null; + } + if (interfaceClass.isInstance(part)) { return interfaceClass.cast(part); } else { - // FIXME: Logging? + AELog.debug("Trying to open a container @ {} for a {}, but the container requires {}", + locator, part.getClass(), interfaceClass); return null; } } else { diff --git a/src/main/java/appeng/container/helper/TileContainerHelper.java b/src/main/java/appeng/container/helper/TileContainerHelper.java index 1095672c1..63a654930 100644 --- a/src/main/java/appeng/container/helper/TileContainerHelper.java +++ b/src/main/java/appeng/container/helper/TileContainerHelper.java @@ -14,7 +14,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fml.network.NetworkHooks; -public final class TileContainerHelper { +public final class TileContainerHelper extends AbstractContainerHelper { private final Class tileEntityClass; @@ -27,6 +27,7 @@ public final class TileContainerHelper factory, Class tileEntityClass, SecurityPermissions requiredPermission) { + super(requiredPermission); this.tileEntityClass = tileEntityClass; this.factory = factory; this.requiredPermission = requiredPermission; @@ -61,14 +62,13 @@ public final class TileContainerHelper { C c = factory.create(wnd, p, te); diff --git a/src/main/java/appeng/container/slot/SlotPatternTerm.java b/src/main/java/appeng/container/slot/SlotPatternTerm.java index 687ebd2e2..eddb7e63d 100644 --- a/src/main/java/appeng/container/slot/SlotPatternTerm.java +++ b/src/main/java/appeng/container/slot/SlotPatternTerm.java @@ -50,7 +50,7 @@ public class SlotPatternTerm extends SlotCraftingTerm this.groupNum = groupNumber; } - public AppEngPacket getRequest( final boolean shift ) throws IOException + public AppEngPacket getRequest( final boolean shift ) { return new PacketPatternSlot( this .getPattern(), Api.INSTANCE.storage().getStorageChannel( IItemStorageChannel.class ).createStack( this.getStack() ), shift ); diff --git a/src/main/java/appeng/container/slot/SlotPlayerInv.java b/src/main/java/appeng/container/slot/SlotPlayerInv.java index 721c78976..3b273817c 100644 --- a/src/main/java/appeng/container/slot/SlotPlayerInv.java +++ b/src/main/java/appeng/container/slot/SlotPlayerInv.java @@ -27,9 +27,9 @@ import net.minecraftforge.items.IItemHandler; public class SlotPlayerInv extends AppEngSlot { - public SlotPlayerInv( final IItemHandler par1iInventory, final int par2, final int par3, final int par4 ) + public SlotPlayerInv( final IItemHandler par1iInventory, final int idx, final int x, final int y ) { - super( par1iInventory, par2, par3, par4 ); + super( par1iInventory, idx, x, y ); this.setPlayerSide( true ); } diff --git a/src/main/java/appeng/core/AELog.java b/src/main/java/appeng/core/AELog.java index 2b0651190..7f6bccdad 100644 --- a/src/main/java/appeng/core/AELog.java +++ b/src/main/java/appeng/core/AELog.java @@ -23,6 +23,7 @@ import javax.annotation.Nonnull; import appeng.tile.AEBaseTile; import appeng.util.Platform; +import net.minecraft.block.BlockState; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -42,7 +43,7 @@ public final class AELog private static final Logger SERVER = LogManager.getFormatterLogger( LOGGER_PREFIX + SERVER_SUFFIX ); private static final Logger CLIENT = LogManager.getFormatterLogger( LOGGER_PREFIX + CLIENT_SUFFIX ); - private static final String BLOCK_UPDATE = "Block Update of %s @ ( %s )"; + private static final String BLOCK_UPDATE = "Block Update of %s @ ( %s ). State %s -> %s"; private static final String DEFAULT_EXCEPTION_MESSAGE = "Exception: "; @@ -318,13 +319,15 @@ public final class AELog * * @see AELog#log(Level, String, Object...) * @param pos + * @param currentState + * @param newState * @param aeBaseTile */ - public static void blockUpdate( @Nonnull final BlockPos pos, @Nonnull final AEBaseTile aeBaseTile ) + public static void blockUpdate(@Nonnull final BlockPos pos, @Nonnull BlockState currentState, @Nonnull BlockState newState, @Nonnull final AEBaseTile aeBaseTile) { if( AEConfig.instance().isFeatureEnabled( AEFeature.UPDATE_LOGGING ) ) { - info( BLOCK_UPDATE, aeBaseTile.getClass().getName(), pos ); + info( BLOCK_UPDATE, aeBaseTile.getClass().getName(), pos, currentState, newState ); } } diff --git a/src/main/java/appeng/core/AppEng.java b/src/main/java/appeng/core/AppEng.java index e07f5bbc7..3cf13973f 100644 --- a/src/main/java/appeng/core/AppEng.java +++ b/src/main/java/appeng/core/AppEng.java @@ -20,6 +20,7 @@ package appeng.core; import java.io.File; +import java.util.concurrent.TimeUnit; import java.util.function.Supplier; import appeng.block.paint.PaintSplotchesModel; @@ -27,6 +28,7 @@ import appeng.block.qnb.QnbFormedModel; import appeng.bootstrap.components.IClientSetupComponent; import appeng.bootstrap.components.IInitComponent; import appeng.bootstrap.components.IPostInitComponent; +import appeng.bootstrap.components.ItemColorComponent; import appeng.client.ClientHelper; import appeng.client.render.DummyFluidItemModel; import appeng.client.render.SimpleModelLoader; @@ -34,6 +36,7 @@ import appeng.client.render.crafting.CraftingCubeModelLoader; import appeng.client.render.model.*; import appeng.client.render.spatial.SpatialPylonModel; import appeng.core.stats.AdvancementTriggers; +import appeng.core.sync.network.NetworkHandler; import appeng.core.worlddata.WorldData; import appeng.hooks.TickHandler; import appeng.parts.PartPlacement; @@ -41,6 +44,7 @@ import appeng.server.AECommand; import appeng.server.ServerHelper; import appeng.services.VersionChecker; import appeng.services.version.VersionCheckerConfig; +import com.google.common.base.Stopwatch; import net.minecraft.block.Block; import net.minecraft.entity.EntityType; import net.minecraft.inventory.container.ContainerType; @@ -51,6 +55,7 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.ColorHandlerEvent; import net.minecraftforge.client.model.ModelLoaderRegistry; import net.minecraftforge.client.model.geometry.IModelGeometry; import net.minecraftforge.common.MinecraftForge; @@ -70,6 +75,7 @@ import net.minecraftforge.fml.event.server.FMLServerStartingEvent; import net.minecraftforge.fml.event.server.FMLServerStoppedEvent; import net.minecraftforge.fml.event.server.FMLServerStoppingEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.fml.network.NetworkRegistry; import javax.annotation.Nonnull; @@ -137,6 +143,7 @@ public final class AppEng // Register client-only events DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> modEventBus.addListener(this::clientSetup)); DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> modEventBus.addListener(registration::modelRegistryEvent)); + DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> modEventBus.addListener(registration::registerItemColors)); MinecraftForge.EVENT_BUS.addListener( TickHandler.INSTANCE::unloadWorld ); MinecraftForge.EVENT_BUS.addListener( TickHandler.INSTANCE::onTick ); @@ -164,10 +171,24 @@ public final class AppEng this.startService( "AE2 VersionChecker", versionCheckerThread ); } + registerNetworkHandler(); + } @OnlyIn(Dist.CLIENT) private void clientSetup(FMLClientSetupEvent event) { + + ((ClientHelper) proxy).clientInit(); + + // Do not register the Fullbright hacks if Optifine is present or if the Forge lighting is disabled + // FIXME if( !FMLClientHandler.instance().hasOptifine() && ForgeModContainer.forgeLightPipelineEnabled ) + // FIXME { + // FIXME ModelLoaderRegistry.registerLoader( UVLModelLoader.INSTANCE ); + // FIXME } + + // FIXME RenderingRegistry.registerEntityRenderingHandler( EntityTinyTNTPrimed.class, manager -> new RenderTinyTNTPrimed( manager ) ); + // FIXME RenderingRegistry.registerEntityRenderingHandler( EntityFloatingItem.class, manager -> new RenderFloatingItem( manager ) ); + final ApiDefinitions definitions = Api.INSTANCE.definitions(); definitions.getRegistry().getBootstrapComponents( IClientSetupComponent.class ).forEachRemaining(IClientSetupComponent::setup); @@ -297,26 +318,23 @@ public final class AppEng // // AELog.info( "Initialization ( ended after " + start.elapsed( TimeUnit.MILLISECONDS ) + "ms )" ); // } -// -// @EventHandler -// private void postInit( final FMLPostInitializationEvent event ) -// { -// final Stopwatch start = Stopwatch.createStarted(); -// AELog.info( "Post Initialization ( started )" ); -// -// this.registration.postInit( event ); -// IntegrationRegistry.INSTANCE.postInit(); -// CrashReportExtender.registerCrashCallable( new IntegrationCrashEnhancement() ); -// -// AppEng.proxy.postInit(); -// AEConfig.instance().save(); -// -// NetworkRegistry.INSTANCE.registerGuiHandler( this, GuiBridge.GUI_Handler ); -// NetworkHandler.init( "AE2" ); -// -// AELog.info( "Post Initialization ( ended after " + start.elapsed( TimeUnit.MILLISECONDS ) + "ms )" ); -// } -// + + private void registerNetworkHandler() + { + final Stopwatch start = Stopwatch.createStarted(); + AELog.info( "Post Initialization ( started )" ); + + // FIXME IntegrationRegistry.INSTANCE.postInit(); + // FIXME CrashReportExtender.registerCrashCallable( new IntegrationCrashEnhancement() ); + + AppEng.proxy.postInit(); + AEConfig.instance().save(); + + NetworkHandler.init( new ResourceLocation(MOD_ID, "main") ); + + AELog.info( "Post Initialization ( ended after " + start.elapsed( TimeUnit.MILLISECONDS ) + "ms )" ); + } + // @EventHandler // private void handleIMCEvent( final FMLInterModComms.IMCEvent event ) // { diff --git a/src/main/java/appeng/core/CommonHelper.java b/src/main/java/appeng/core/CommonHelper.java index 43b31fc8a..eb35837fb 100644 --- a/src/main/java/appeng/core/CommonHelper.java +++ b/src/main/java/appeng/core/CommonHelper.java @@ -40,8 +40,6 @@ import appeng.core.sync.AppEngPacket; public abstract class CommonHelper { - public abstract void preinit(); - public abstract World getWorld(); public abstract void bindTileEntitySpecialRenderer( Class tile, AEBaseBlock blk ); diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index 14633e131..eb769fe0d 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -104,6 +104,7 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.ColorHandlerEvent; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.event.ParticleFactoryRegisterEvent; import net.minecraftforge.client.event.TextureStitchEvent; @@ -881,4 +882,10 @@ final class Registration new AECommand().register(evt.getCommandDispatcher()); } + @OnlyIn(Dist.CLIENT) + public void registerItemColors(ColorHandlerEvent.Item event) { + final ApiDefinitions definitions = Api.INSTANCE.definitions(); + definitions.getRegistry().getBootstrapComponents( IItemColorRegistrationComponent.class ).forEachRemaining(c -> c.register(event.getItemColors(), event.getBlockColors())); + } + } diff --git a/src/main/java/appeng/core/api/ApiStorage.java b/src/main/java/appeng/core/api/ApiStorage.java index b16b18b64..49161659a 100644 --- a/src/main/java/appeng/core/api/ApiStorage.java +++ b/src/main/java/appeng/core/api/ApiStorage.java @@ -160,7 +160,7 @@ public class ApiStorage implements IStorageHelper } @Override - public IAEItemStack readFromPacket( PacketBuffer input ) throws IOException + public IAEItemStack readFromPacket( PacketBuffer input ) { Preconditions.checkNotNull( input ); @@ -215,7 +215,7 @@ public class ApiStorage implements IStorageHelper } @Override - public IAEFluidStack readFromPacket( PacketBuffer input ) throws IOException + public IAEFluidStack readFromPacket( PacketBuffer input ) { Preconditions.checkNotNull( input ); diff --git a/src/main/java/appeng/core/api/definitions/ApiItems.java b/src/main/java/appeng/core/api/definitions/ApiItems.java index 66d999c22..61ac62366 100644 --- a/src/main/java/appeng/core/api/definitions/ApiItems.java +++ b/src/main/java/appeng/core/api/definitions/ApiItems.java @@ -112,7 +112,6 @@ public final class ApiItems implements IItems private final IItemDefinition encodedPattern; private final IItemDefinition colorApplicator; - private final IItemDefinition paintBall; private final AEColoredItemDefinition coloredPaintBall; private final AEColoredItemDefinition coloredLumenPaintBall; @@ -296,12 +295,13 @@ public final class ApiItems implements IItems .rendering( new ItemEncodedPatternRendering() ) .build(); - this.paintBall = registry.item( "paint_ball", ItemPaintBall::new ) + IItemDefinition paintBall = registry.item( "paint_ball", ItemPaintBall::new ) .features( AEFeature.PAINT_BALLS ) .rendering( new ItemPaintBallRendering() ) .build(); - this.coloredPaintBall = registry.colored( this.paintBall, 0 ); - this.coloredLumenPaintBall = registry.colored( this.paintBall, 20 ); + // FIXME these are both wrong + this.coloredPaintBall = registry.colored( paintBall, 0 ); + this.coloredLumenPaintBall = registry.colored( paintBall, 20 ); FeatureFactory debugTools = registry.features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE ); this.toolEraser = debugTools.item( "debug_eraser", ToolEraser::new ).build(); @@ -567,11 +567,6 @@ public final class ApiItems implements IItems return this.coloredLumenPaintBall; } - public IItemDefinition paintBall() - { - return this.paintBall; - } - public IItemDefinition toolEraser() { return this.toolEraser; diff --git a/src/main/java/appeng/core/features/registries/cell/BasicItemCellGuiHandler.java b/src/main/java/appeng/core/features/registries/cell/BasicItemCellGuiHandler.java index 25dcd39e6..f76f8aee8 100644 --- a/src/main/java/appeng/core/features/registries/cell/BasicItemCellGuiHandler.java +++ b/src/main/java/appeng/core/features/registries/cell/BasicItemCellGuiHandler.java @@ -4,6 +4,7 @@ package appeng.core.features.registries.cell; import appeng.container.ContainerLocator; import appeng.container.ContainerOpener; +import appeng.container.implementations.ContainerMEMonitorable; import appeng.container.implementations.ContainerWireless; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -34,6 +35,6 @@ public class BasicItemCellGuiHandler implements ICellGuiHandler @Override public void openChestGui( final PlayerEntity player, final IChestOrDrive chest, final ICellHandler cellHandler, final IMEInventoryHandler inv, final ItemStack is, final IStorageChannel chan ) { - ContainerOpener.openContainer(ContainerWireless.TYPE, player, ContainerLocator.forTileEntitySide((TileEntity) chest, chest.getUp())); + ContainerOpener.openContainer(ContainerMEMonitorable.TYPE, player, ContainerLocator.forTileEntitySide((TileEntity) chest, chest.getUp())); } } diff --git a/src/main/java/appeng/core/sync/AppEngPacket.java b/src/main/java/appeng/core/sync/AppEngPacket.java index 6b1f2d6af..46706532e 100644 --- a/src/main/java/appeng/core/sync/AppEngPacket.java +++ b/src/main/java/appeng/core/sync/AppEngPacket.java @@ -19,6 +19,7 @@ package appeng.core.sync; +import appeng.core.sync.network.NetworkHandler; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.IPacket; import net.minecraft.network.PacketBuffer; @@ -28,6 +29,7 @@ import appeng.core.AEConfig; import appeng.core.AELog; import appeng.api.features.AEFeature; import appeng.core.sync.network.INetworkInfo; +import org.apache.commons.lang3.tuple.Pair; public abstract class AppEngPacket @@ -41,8 +43,7 @@ public abstract class AppEngPacket public final int getPacketID() { - throw new IllegalStateException(); - // FIXME return AppEngPacketHandlerBase.PacketTypes.getID( this.getClass() ).ordinal(); + return AppEngPacketHandlerBase.PacketTypes.getID( this.getClass() ).ordinal(); } public void clientPacketData( final INetworkInfo network, final PlayerEntity player ) @@ -68,7 +69,6 @@ public abstract class AppEngPacket AELog.info( this.getClass().getName() + " : " + p.readableBytes() ); } - // FIXME return direction.buildPacket( Pair.of( p, 0 ), NetworkHandler.instance().getChannel() ).getThis(); - return null; + return direction.buildPacket( Pair.of( p, 0 ), NetworkHandler.instance().getChannel() ).getThis(); } } diff --git a/src/main/java/appeng/core/sync/AppEngPacketHandlerBase.java b/src/main/java/appeng/core/sync/AppEngPacketHandlerBase.java index e67cce219..6237b8d8f 100644 --- a/src/main/java/appeng/core/sync/AppEngPacketHandlerBase.java +++ b/src/main/java/appeng/core/sync/AppEngPacketHandlerBase.java @@ -61,70 +61,63 @@ public class AppEngPacketHandlerBase public enum PacketTypes { - PACKET_COMPASS_REQUEST( PacketCompassRequest::new ), + PACKET_COMPASS_REQUEST( PacketCompassRequest.class, PacketCompassRequest::new ), - PACKET_COMPASS_RESPONSE( PacketCompassResponse::new ), + PACKET_COMPASS_RESPONSE( PacketCompassResponse.class, PacketCompassResponse::new ), - PACKET_INVENTORY_ACTION( PacketInventoryAction::new ), + PACKET_INVENTORY_ACTION( PacketInventoryAction.class, PacketInventoryAction::new ), - PACKET_ME_INVENTORY_UPDATE( PacketMEInventoryUpdate::new ), + PACKET_ME_INVENTORY_UPDATE( PacketMEInventoryUpdate.class, PacketMEInventoryUpdate::new ), - PACKET_ME_FLUID_INVENTORY_UPDATE( PacketMEFluidInventoryUpdate::new ), + PACKET_ME_FLUID_INVENTORY_UPDATE( PacketMEFluidInventoryUpdate.class, PacketMEFluidInventoryUpdate::new ), - PACKET_CONFIG_BUTTON( PacketConfigButton::new ), + PACKET_CONFIG_BUTTON( PacketConfigButton.class, PacketConfigButton::new ), - PACKET_PART_PLACEMENT( PacketPartPlacement::new ), + PACKET_PART_PLACEMENT( PacketPartPlacement.class, PacketPartPlacement::new ), - PACKET_LIGHTNING( PacketLightning::new ), + PACKET_LIGHTNING( PacketLightning.class, PacketLightning::new ), - PACKET_MATTER_CANNON( PacketMatterCannon::new ), + PACKET_MATTER_CANNON( PacketMatterCannon.class, PacketMatterCannon::new ), - PACKET_MOCK_EXPLOSION( PacketMockExplosion::new ), + PACKET_MOCK_EXPLOSION( PacketMockExplosion.class, PacketMockExplosion::new ), - PACKET_VALUE_CONFIG( PacketValueConfig::new ), + PACKET_VALUE_CONFIG( PacketValueConfig.class, PacketValueConfig::new ), - PACKET_TRANSITION_EFFECT( PacketTransitionEffect::new ), + PACKET_TRANSITION_EFFECT( PacketTransitionEffect.class, PacketTransitionEffect::new ), - PACKET_PROGRESS_VALUE( PacketProgressBar::new ), + PACKET_PROGRESS_VALUE( PacketProgressBar.class, PacketProgressBar::new ), - PACKET_CLICK( PacketClick::new ), + PACKET_CLICK( PacketClick.class, PacketClick::new ), - PACKET_SWITCH_GUIS( PacketSwitchGuis::new ), + PACKET_SWITCH_GUIS( PacketSwitchGuis.class, PacketSwitchGuis::new ), - PACKET_SWAP_SLOTS( PacketSwapSlots::new ), + PACKET_SWAP_SLOTS( PacketSwapSlots.class, PacketSwapSlots::new ), - PACKET_PATTERN_SLOT( PacketPatternSlot::new ), + PACKET_PATTERN_SLOT( PacketPatternSlot.class, PacketPatternSlot::new ), - PACKET_RECIPE_JEI( PacketJEIRecipe::new ), + PACKET_RECIPE_JEI( PacketJEIRecipe.class, PacketJEIRecipe::new ), - PACKET_TARGET_ITEM( PacketTargetItemStack::new ), + PACKET_TARGET_ITEM( PacketTargetItemStack.class, PacketTargetItemStack::new ), - PACKET_TARGET_FLUID( PacketTargetFluidStack::new ), + PACKET_TARGET_FLUID( PacketTargetFluidStack.class, PacketTargetFluidStack::new ), - PACKET_CRAFTING_REQUEST( PacketCraftRequest::new ), + PACKET_CRAFTING_REQUEST( PacketCraftRequest.class, PacketCraftRequest::new ), - PACKET_ASSEMBLER_ANIMATION( PacketAssemblerAnimation::new ), + PACKET_ASSEMBLER_ANIMATION( PacketAssemblerAnimation.class, PacketAssemblerAnimation::new ), - PACKET_COMPRESSED_NBT( PacketCompressedNBT::new ), + PACKET_COMPRESSED_NBT( PacketCompressedNBT.class, PacketCompressedNBT::new ), - PACKET_PAINTED_ENTITY( PacketPaintedEntity::new ), + PACKET_PAINTED_ENTITY( PacketPaintedEntity.class, PacketPaintedEntity::new ), - PACKET_FLUID_TANK( PacketFluidSlot::new ); + PACKET_FLUID_TANK( PacketFluidSlot.class, PacketFluidSlot::new ); - private final Class packetClass; private final Function factory; - PacketTypes( Function factory ) + PacketTypes( Class packetClass, Function factory ) { - Type c = TypeResolver.resolveGenericType( Function.class, factory.getClass() ); - if( c == TypeResolver.Unknown.class ) - { - throw new IllegalStateException("Failed to resolve type for AE packet type: " + factory.toString()); - } - this.packetClass = (Class) c; this.factory = factory; - REVERSE_LOOKUP.put( this.packetClass, this ); + REVERSE_LOOKUP.put(packetClass, this ); } public static PacketTypes getPacket( final int id ) diff --git a/src/main/java/appeng/core/sync/network/NetworkHandler.java b/src/main/java/appeng/core/sync/network/NetworkHandler.java index ff20f771f..eec9a5e3a 100644 --- a/src/main/java/appeng/core/sync/network/NetworkHandler.java +++ b/src/main/java/appeng/core/sync/network/NetworkHandler.java @@ -72,8 +72,7 @@ public class NetworkHandler { try { - // FIXME return new AppEngClientPacketHandler(); - return null; + return new AppEngClientPacketHandler(); } catch( final Throwable t ) { @@ -85,8 +84,7 @@ public class NetworkHandler { try { - // FIXME return new AppEngServerPacketHandler(); - return null; + return new AppEngServerPacketHandler(); } catch( final Throwable t ) { diff --git a/src/main/java/appeng/core/sync/packets/PacketAssemblerAnimation.java b/src/main/java/appeng/core/sync/packets/PacketAssemblerAnimation.java index d24e6a863..f0febf07f 100644 --- a/src/main/java/appeng/core/sync/packets/PacketAssemblerAnimation.java +++ b/src/main/java/appeng/core/sync/packets/PacketAssemblerAnimation.java @@ -56,7 +56,7 @@ public class PacketAssemblerAnimation extends AppEngPacket } // api - public PacketAssemblerAnimation( final BlockPos pos, final byte rate, final IAEItemStack is ) throws IOException + public PacketAssemblerAnimation( final BlockPos pos, final byte rate, final IAEItemStack is ) { final PacketBuffer data = new PacketBuffer( Unpooled.buffer() ); diff --git a/src/main/java/appeng/core/sync/packets/PacketCompressedNBT.java b/src/main/java/appeng/core/sync/packets/PacketCompressedNBT.java index 351d2183a..aa05b9433 100644 --- a/src/main/java/appeng/core/sync/packets/PacketCompressedNBT.java +++ b/src/main/java/appeng/core/sync/packets/PacketCompressedNBT.java @@ -27,6 +27,7 @@ import java.io.OutputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; +import appeng.client.gui.implementations.GuiInterfaceTerminal; import io.netty.buffer.Unpooled; import net.minecraft.client.Minecraft; @@ -61,7 +62,7 @@ public class PacketCompressedNBT extends AppEngPacket { @Override - public int read() throws IOException + public int read() { if( stream.readableBytes() <= 0 ) { @@ -80,6 +81,7 @@ public class PacketCompressedNBT extends AppEngPacket } } + // FIXME: this is pointless, PacketBuffer.writeNBT will already compress // api public PacketCompressedNBT( final CompoundNBT din ) throws IOException { @@ -93,7 +95,7 @@ public class PacketCompressedNBT extends AppEngPacket { @Override - public void write( final int value ) throws IOException + public void write( final int value ) { PacketCompressedNBT.this.data.writeByte( value ); } @@ -111,9 +113,9 @@ public class PacketCompressedNBT extends AppEngPacket { final Screen gs = Minecraft.getInstance().currentScreen; - // FIXME if( gs instanceof GuiInterfaceTerminal ) - // FIXME { - // FIXME ( (GuiInterfaceTerminal) gs ).postUpdate( this.in ); - // FIXME } + if( gs instanceof GuiInterfaceTerminal) + { + ( (GuiInterfaceTerminal) gs ).postUpdate( this.in ); + } } } diff --git a/src/main/java/appeng/core/sync/packets/PacketInventoryAction.java b/src/main/java/appeng/core/sync/packets/PacketInventoryAction.java index 59b1a1746..2c20ea0be 100644 --- a/src/main/java/appeng/core/sync/packets/PacketInventoryAction.java +++ b/src/main/java/appeng/core/sync/packets/PacketInventoryAction.java @@ -19,21 +19,10 @@ package appeng.core.sync.packets; -import java.io.IOException; - -import appeng.container.ContainerOpener; -import appeng.container.implementations.ContainerInscriber; -import io.netty.buffer.Unpooled; - -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; - import appeng.api.storage.data.IAEItemStack; import appeng.container.AEBaseContainer; import appeng.container.ContainerLocator; +import appeng.container.ContainerOpener; import appeng.container.implementations.ContainerCraftAmount; import appeng.core.AppEng; import appeng.core.sync.AppEngPacket; @@ -41,6 +30,11 @@ import appeng.core.sync.network.INetworkInfo; import appeng.helpers.InventoryAction; import appeng.util.Platform; import appeng.util.item.AEItemStack; +import io.netty.buffer.Unpooled; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; public class PacketInventoryAction extends AppEngPacket @@ -68,7 +62,7 @@ public class PacketInventoryAction extends AppEngPacket } // api - public PacketInventoryAction( final InventoryAction action, final int slot, final IAEItemStack slotItem ) throws IOException + public PacketInventoryAction( final InventoryAction action, final int slot, final IAEItemStack slotItem ) { if( Platform.isClient() ) diff --git a/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java b/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java index 39135449d..c65ac8adf 100644 --- a/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java +++ b/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java @@ -83,7 +83,7 @@ public class PacketJEIRecipe extends AppEngPacket } // api - public PacketJEIRecipe( final CompoundNBT recipe ) throws IOException + public PacketJEIRecipe( final CompoundNBT recipe ) { final PacketBuffer data = new PacketBuffer(Unpooled.buffer()); diff --git a/src/main/java/appeng/core/sync/packets/PacketMEFluidInventoryUpdate.java b/src/main/java/appeng/core/sync/packets/PacketMEFluidInventoryUpdate.java index f8db15d43..c4f8a1754 100644 --- a/src/main/java/appeng/core/sync/packets/PacketMEFluidInventoryUpdate.java +++ b/src/main/java/appeng/core/sync/packets/PacketMEFluidInventoryUpdate.java @@ -80,12 +80,10 @@ public class PacketMEFluidInventoryUpdate extends AppEngPacket this.list = new LinkedList<>(); this.ref = stream.readByte(); - // int originalBytes = stream.readableBytes(); - try( final GZIPInputStream gzReader = new GZIPInputStream( new InputStream() { @Override - public int read() throws IOException + public int read() { if( stream.readableBytes() <= 0 ) { @@ -140,7 +138,7 @@ public class PacketMEFluidInventoryUpdate extends AppEngPacket this.compressFrame = new GZIPOutputStream( new OutputStream() { @Override - public void write( final int value ) throws IOException + public void write( final int value ) { PacketMEFluidInventoryUpdate.this.data.writeByte( value ); } diff --git a/src/main/java/appeng/core/sync/packets/PacketMEInventoryUpdate.java b/src/main/java/appeng/core/sync/packets/PacketMEInventoryUpdate.java index 60c5c6cfe..5a50317f5 100644 --- a/src/main/java/appeng/core/sync/packets/PacketMEInventoryUpdate.java +++ b/src/main/java/appeng/core/sync/packets/PacketMEInventoryUpdate.java @@ -29,6 +29,10 @@ import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import javax.annotation.Nullable; +import appeng.client.gui.implementations.GuiCraftConfirm; +import appeng.client.gui.implementations.GuiCraftingCPU; +import appeng.client.gui.implementations.GuiMEMonitorable; +import appeng.client.gui.implementations.GuiNetworkStatus; import io.netty.buffer.Unpooled; import net.minecraft.client.Minecraft; @@ -80,7 +84,7 @@ public class PacketMEInventoryUpdate extends AppEngPacket try( GZIPInputStream gzReader = new GZIPInputStream( new InputStream() { @Override - public int read() throws IOException + public int read() { if( stream.readableBytes() <= 0 ) { @@ -134,7 +138,7 @@ public class PacketMEInventoryUpdate extends AppEngPacket this.compressFrame = new GZIPOutputStream( new OutputStream() { @Override - public void write( final int value ) throws IOException + public void write( final int value ) { PacketMEInventoryUpdate.this.data.writeByte( value ); } @@ -149,25 +153,25 @@ public class PacketMEInventoryUpdate extends AppEngPacket { final Screen gs = Minecraft.getInstance().currentScreen; -// FIXME if( gs instanceof GuiCraftConfirm ) -// FIXME { -// FIXME ( (GuiCraftConfirm) gs ).postUpdate( this.list, this.ref ); -// FIXME } -// FIXME -// FIXME if( gs instanceof GuiCraftingCPU ) -// FIXME { -// FIXME ( (GuiCraftingCPU) gs ).postUpdate( this.list, this.ref ); -// FIXME } -// FIXME -// FIXME if( gs instanceof GuiMEMonitorable ) -// FIXME { -// FIXME ( (GuiMEMonitorable) gs ).postUpdate( this.list ); -// FIXME } -// FIXME -// FIXME if( gs instanceof GuiNetworkStatus ) -// FIXME { -// FIXME ( (GuiNetworkStatus) gs ).postUpdate( this.list ); -// FIXME } + if( gs instanceof GuiCraftConfirm) + { + ( (GuiCraftConfirm) gs ).postUpdate( this.list, this.ref ); + } + + if( gs instanceof GuiCraftingCPU) + { + ( (GuiCraftingCPU) gs ).postUpdate( this.list, this.ref ); + } + + if( gs instanceof GuiMEMonitorable) + { + ( (GuiMEMonitorable) gs ).postUpdate( this.list ); + } + + if( gs instanceof GuiNetworkStatus) + { + ( (GuiNetworkStatus) gs ).postUpdate( this.list ); + } } @Nullable diff --git a/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java b/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java index 90d84c34d..1f5ceeaf4 100644 --- a/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java +++ b/src/main/java/appeng/core/sync/packets/PacketPatternSlot.java @@ -72,7 +72,7 @@ public class PacketPatternSlot extends AppEngPacket } // api - public PacketPatternSlot( final IItemHandler pat, final IAEItemStack slotItem, final boolean shift ) throws IOException + public PacketPatternSlot( final IItemHandler pat, final IAEItemStack slotItem, final boolean shift ) { this.slotItem = slotItem; @@ -94,7 +94,7 @@ public class PacketPatternSlot extends AppEngPacket this.configureWrite( data ); } - private void writeItem( final IAEItemStack slotItem, final PacketBuffer data ) throws IOException + private void writeItem( final IAEItemStack slotItem, final PacketBuffer data ) { if( slotItem == null ) { diff --git a/src/main/java/appeng/debug/ToolDebugCard.java b/src/main/java/appeng/debug/ToolDebugCard.java index 886497de9..95d721a50 100644 --- a/src/main/java/appeng/debug/ToolDebugCard.java +++ b/src/main/java/appeng/debug/ToolDebugCard.java @@ -62,7 +62,7 @@ public class ToolDebugCard extends AEBaseItem @Override public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) { - if( Platform.isClient() ) + if( context.getWorld().isRemote() ) { return ActionResultType.PASS; } diff --git a/src/main/java/appeng/debug/ToolEraser.java b/src/main/java/appeng/debug/ToolEraser.java index 03a37e6a9..3748fc32a 100644 --- a/src/main/java/appeng/debug/ToolEraser.java +++ b/src/main/java/appeng/debug/ToolEraser.java @@ -45,7 +45,7 @@ public class ToolEraser extends AEBaseItem @Override public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) { - if( Platform.isClient() ) + if( context.getWorld().isRemote() ) { return ActionResultType.PASS; } diff --git a/src/main/java/appeng/debug/ToolMeteoritePlacer.java b/src/main/java/appeng/debug/ToolMeteoritePlacer.java index 0580a6447..8179034f3 100644 --- a/src/main/java/appeng/debug/ToolMeteoritePlacer.java +++ b/src/main/java/appeng/debug/ToolMeteoritePlacer.java @@ -40,7 +40,7 @@ public class ToolMeteoritePlacer extends AEBaseItem @Override public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) { - if( Platform.isClient() ) + if( context.getWorld().isRemote() ) { return ActionResultType.PASS; } diff --git a/src/main/java/appeng/debug/ToolReplicatorCard.java b/src/main/java/appeng/debug/ToolReplicatorCard.java index 1a0030f37..891d62324 100644 --- a/src/main/java/appeng/debug/ToolReplicatorCard.java +++ b/src/main/java/appeng/debug/ToolReplicatorCard.java @@ -53,7 +53,7 @@ public class ToolReplicatorCard extends AEBaseItem @Override public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) { - if( Platform.isClient() ) + if( context.getWorld().isRemote() ) { return ActionResultType.PASS; } diff --git a/src/main/java/appeng/decorative/solid/BlockSkyStone.java b/src/main/java/appeng/decorative/solid/BlockSkyStone.java index b3ee8c732..b988f9517 100644 --- a/src/main/java/appeng/decorative/solid/BlockSkyStone.java +++ b/src/main/java/appeng/decorative/solid/BlockSkyStone.java @@ -80,6 +80,10 @@ public class BlockSkyStone extends AEBaseBlock @Override public void onReplaced(BlockState state, World w, BlockPos pos, BlockState newState, boolean isMoving) { + if (newState.getBlock() == state.getBlock()) { + return; // Just a block state change + } + super.onReplaced(state, w, pos, newState, isMoving); if( Platform.isServer() ) diff --git a/src/main/java/appeng/entity/EntityChargedQuartz.java b/src/main/java/appeng/entity/EntityChargedQuartz.java index 1515957b4..bfc6404bf 100644 --- a/src/main/java/appeng/entity/EntityChargedQuartz.java +++ b/src/main/java/appeng/entity/EntityChargedQuartz.java @@ -67,7 +67,7 @@ public final class EntityChargedQuartz extends AEBaseEntityItem return; } - if( Platform.isClient() && this.delay > 30 && AEConfig.instance().isEnableEffects() ) + if( world.isRemote && this.delay > 30 && AEConfig.instance().isEnableEffects() ) { AppEng.proxy.spawnEffect( EffectType.Lightning, this.world, this.getPosX(), this.getPosY(), this.getPosZ(), null ); this.delay = 0; diff --git a/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidSlot.java b/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidSlot.java index e2076ce4e..a15b0c535 100644 --- a/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidSlot.java +++ b/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidSlot.java @@ -45,7 +45,6 @@ public class GuiFluidSlot extends GuiCustomSlot final IAEFluidStack fs = this.getFluidStack(); if( fs != null ) { - RenderSystem.disableLighting(); RenderSystem.disableBlend(); final Fluid fluid = fs.getFluid(); final FluidAttributes attributes = fluid.getAttributes(); diff --git a/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidTank.java b/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidTank.java index 345f3ae70..021df69f6 100644 --- a/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidTank.java +++ b/src/main/java/appeng/fluids/client/gui/widgets/GuiFluidTank.java @@ -52,7 +52,6 @@ public class GuiFluidTank extends Widget implements ITooltip if( this.visible ) { RenderSystem.disableBlend(); - RenderSystem.disableLighting(); fill( this.x, this.y, this.x + this.width, this.y + this.height, AEColor.GRAY.blackVariant | 0xFF000000 ); diff --git a/src/main/java/appeng/fluids/client/render/FluidStackSizeRenderer.java b/src/main/java/appeng/fluids/client/render/FluidStackSizeRenderer.java index 6bf02a1dc..f63b38966 100644 --- a/src/main/java/appeng/fluids/client/render/FluidStackSizeRenderer.java +++ b/src/main/java/appeng/fluids/client/render/FluidStackSizeRenderer.java @@ -60,7 +60,6 @@ public class FluidStackSizeRenderer { final String stackSize = this.getToBeRenderedStackSize( aeStack.getStackSize() ); - RenderSystem.disableLighting(); RenderSystem.disableDepthTest(); RenderSystem.disableBlend(); RenderSystem.pushMatrix(); @@ -69,7 +68,6 @@ public class FluidStackSizeRenderer final int Y = (int) ( ( (float) yPos + offset + 16.0f - 7.0f * scaleFactor ) * inverseScaleFactor ); fontRenderer.drawStringWithShadow( stackSize, X, Y, 16777215 ); RenderSystem.popMatrix(); - RenderSystem.enableLighting(); RenderSystem.enableDepthTest(); RenderSystem.enableBlend(); } diff --git a/src/main/java/appeng/fluids/util/AEFluidStack.java b/src/main/java/appeng/fluids/util/AEFluidStack.java index 4e9d90d14..eec9c0c65 100644 --- a/src/main/java/appeng/fluids/util/AEFluidStack.java +++ b/src/main/java/appeng/fluids/util/AEFluidStack.java @@ -110,43 +110,6 @@ public final class AEFluidStack extends AEStack implements IAEFlu return fluid; } - public static IAEFluidStack fromPacket( final PacketBuffer buffer ) throws IOException - { - final byte mask = buffer.readByte(); - final byte stackType = (byte) ( ( mask & 0x0C ) >> 2 ); - final byte countReqType = (byte) ( ( mask & 0x30 ) >> 4 ); - final boolean isCraftable = ( mask & 0x40 ) > 0; - final boolean hasTagCompound = ( mask & 0x80 ) > 0; - - // don't send this... - final CompoundNBT d = new CompoundNBT(); - - d.putString( "FluidName", buffer.readString() ); - d.putByte( "Amount", (byte) 0 ); - - if( hasTagCompound ) - { - d.put( "Tag", buffer.readCompoundTag() ); - } - - final long stackSize = getPacketValue( stackType, buffer ); - final long countRequestable = getPacketValue( countReqType, buffer ); - - final FluidStack fluidStack = FluidStack.loadFluidStackFromNBT( d ); - - if( fluidStack == null ) - { - return null; - } - - final AEFluidStack fluid = AEFluidStack.fromFluidStack( fluidStack ); - // fluid.priority = (int) priority; - fluid.setStackSize( stackSize ); - fluid.setCountRequestable( countRequestable ); - fluid.setCraftable( isCraftable ); - return fluid; - } - @Override public void add( final IAEFluidStack option ) { @@ -299,8 +262,45 @@ public final class AEFluidStack extends AEStack implements IAEFlu return ItemStack.EMPTY; } + public static IAEFluidStack fromPacket( final PacketBuffer buffer ) + { + final byte mask = buffer.readByte(); + final byte stackType = (byte) ( ( mask & 0x0C ) >> 2 ); + final byte countReqType = (byte) ( ( mask & 0x30 ) >> 4 ); + final boolean isCraftable = ( mask & 0x40 ) > 0; + final boolean hasTagCompound = ( mask & 0x80 ) > 0; + + // don't send this... + final CompoundNBT d = new CompoundNBT(); + + d.putString( "FluidName", buffer.readString() ); + d.putByte( "Amount", (byte) 0 ); + + if( hasTagCompound ) + { + d.put( "Tag", buffer.readCompoundTag() ); + } + + final long stackSize = getPacketValue( stackType, buffer ); + final long countRequestable = getPacketValue( countReqType, buffer ); + + final FluidStack fluidStack = FluidStack.loadFluidStackFromNBT( d ); + + if( fluidStack == null ) + { + return null; + } + + final AEFluidStack fluid = AEFluidStack.fromFluidStack( fluidStack ); + // fluid.priority = (int) priority; + fluid.setStackSize( stackSize ); + fluid.setCountRequestable( countRequestable ); + fluid.setCraftable( isCraftable ); + return fluid; + } + @Override - public void writeToPacket( final PacketBuffer buffer ) throws IOException + public void writeToPacket( final PacketBuffer buffer ) { final byte mask = (byte) ( ( this.getType( this.getStackSize() ) << 2 ) | ( this .getType( this.getCountRequestable() ) << 4 ) | ( (byte) ( this.isCraftable() ? 1 : 0 ) << 6 ) | ( this.hasTagCompound() ? 1 : 0 ) << 7 ); @@ -313,7 +313,7 @@ public final class AEFluidStack extends AEStack implements IAEFlu this.putPacketValue( buffer, this.getCountRequestable() ); } - private void writeToStream( final PacketBuffer buffer ) throws IOException + private void writeToStream( final PacketBuffer buffer ) { buffer.writeString( fluid.getRegistryName().toString() ); if( this.hasTagCompound() ) diff --git a/src/main/java/appeng/items/misc/ItemPaintBall.java b/src/main/java/appeng/items/misc/ItemPaintBall.java index 9af11b3c1..0fdf85644 100644 --- a/src/main/java/appeng/items/misc/ItemPaintBall.java +++ b/src/main/java/appeng/items/misc/ItemPaintBall.java @@ -19,13 +19,13 @@ package appeng.items.misc; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; - import appeng.api.util.AEColor; import appeng.core.localization.GuiText; import appeng.items.AEBaseItem; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.NonNullList; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; @@ -33,14 +33,14 @@ import net.minecraft.util.text.TranslationTextComponent; public class ItemPaintBall extends AEBaseItem { + private static final String TAG_COLOR = "c"; + private static final String TAG_LUMEN = "l"; + private static final ITextComponent LUMEN_PREFIX = new TranslationTextComponent(GuiText.Lumen.getTranslationKey()) .appendText(" "); - private static final int DAMAGE_THRESHOLD = 20; - public ItemPaintBall(Properties properties) { super(properties); - // FIXME this.setHasSubtypes( true ); } @Override @@ -54,7 +54,7 @@ public class ItemPaintBall extends AEBaseItem private ITextComponent getExtraName( final ItemStack is ) { ITextComponent colorText = new TranslationTextComponent(this.getColor(is).translationKey); - if (is.getDamage() >= DAMAGE_THRESHOLD) { + if (isLumen(is)) { return LUMEN_PREFIX.shallowCopy().appendSibling(colorText); } else { return colorText; @@ -63,18 +63,33 @@ public class ItemPaintBall extends AEBaseItem public AEColor getColor( final ItemStack is ) { - int dmg = is.getDamage(); - if( dmg >= DAMAGE_THRESHOLD ) - { - dmg -= DAMAGE_THRESHOLD; - } - - if( dmg >= AEColor.values().length ) - { + CompoundNBT tag = is.getTag(); + if (tag == null || !tag.contains(TAG_COLOR)) { return AEColor.TRANSPARENT; } + int c = tag.getInt(TAG_COLOR); + if (c < 0 || c >= AEColor.values().length) { + return AEColor.TRANSPARENT; + } + return AEColor.values()[c]; + } - return AEColor.values()[dmg]; + public ItemStack setColor( final ItemStack is, AEColor color ) + { + is.getOrCreateTag().putInt(TAG_COLOR, color.ordinal()); + return is; + } + + public boolean isLumen( final ItemStack is ) + { + CompoundNBT tag = is.getTag(); + return tag != null && tag.getBoolean(TAG_LUMEN); + } + + public ItemStack setLumen( final ItemStack is, boolean lumen ) + { + is.getOrCreateTag().putBoolean(TAG_LUMEN, lumen); + return is; } @Override @@ -84,7 +99,7 @@ public class ItemPaintBall extends AEBaseItem { if( c != AEColor.TRANSPARENT ) { - itemStacks.add( new ItemStack( this, 1 /* FIXME, c.ordinal() */ ) ); + itemStacks.add( setColor(new ItemStack( this ), c) ); } } @@ -92,15 +107,9 @@ public class ItemPaintBall extends AEBaseItem { if( c != AEColor.TRANSPARENT ) { - itemStacks.add( new ItemStack( this, 1 /* FIXME , DAMAGE_THRESHOLD + c.ordinal() */ ) ); + itemStacks.add( setLumen(setColor(new ItemStack( this ), c), true) ); } } } - public static boolean isLumen( final ItemStack is ) - { - final int dmg = is.getDamage(); - return dmg >= DAMAGE_THRESHOLD; - } - } diff --git a/src/main/java/appeng/items/misc/ItemPaintBallRendering.java b/src/main/java/appeng/items/misc/ItemPaintBallRendering.java index a90e1e299..e176d065d 100644 --- a/src/main/java/appeng/items/misc/ItemPaintBallRendering.java +++ b/src/main/java/appeng/items/misc/ItemPaintBallRendering.java @@ -44,14 +44,16 @@ public class ItemPaintBallRendering extends ItemRenderingCustomizer private static int getColorFromItemstack( ItemStack stack, int tintIndex ) { - final AEColor col = ( (ItemPaintBall) stack.getItem() ).getColor( stack ); + ItemPaintBall item = (ItemPaintBall) stack.getItem(); + final AEColor col = item.getColor( stack ); - final int colorValue = stack.getDamage() >= 20 ? col.mediumVariant : col.mediumVariant; + boolean lumen = item.isLumen(stack); + final int colorValue = lumen ? col.mediumVariant : col.mediumVariant; final int r = ( colorValue >> 16 ) & 0xff; final int g = ( colorValue >> 8 ) & 0xff; final int b = ( colorValue ) & 0xff; - if( stack.getDamage() >= 20 ) + if( lumen ) { final float fail = 0.7f; final int full = (int) ( 255 * 0.3 ); diff --git a/src/main/java/appeng/items/tools/powered/ToolColorApplicator.java b/src/main/java/appeng/items/tools/powered/ToolColorApplicator.java index 7b3f29594..1e3bf0900 100644 --- a/src/main/java/appeng/items/tools/powered/ToolColorApplicator.java +++ b/src/main/java/appeng/items/tools/powered/ToolColorApplicator.java @@ -36,6 +36,7 @@ import appeng.block.networking.BlockCableBus; import appeng.block.paint.BlockPaint; import appeng.core.AEConfig; import appeng.core.Api; +import appeng.core.AppEng; import appeng.core.localization.GuiText; import appeng.helpers.IMouseWheelItem; import appeng.hooks.IBlockTool; @@ -59,6 +60,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Hand; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; @@ -76,6 +78,8 @@ public class ToolColorApplicator extends AEBasePoweredItem implements IStorageCe private static final Map ORE_TO_COLOR = new HashMap<>(); + private static final String TAG_COLOR = "color"; + static { for( final AEColor color : AEColor.VALID_COLORS ) @@ -91,6 +95,16 @@ public class ToolColorApplicator extends AEBasePoweredItem implements IStorageCe public ToolColorApplicator(Item.Properties props) { super( AEConfig.instance().getColorApplicatorBattery(), props ); + addPropertyOverride( + 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 inventory for a new + // paintball everytime + AEColor col = getActiveColor( itemStack ); + return ( col != null ) ? 1 : 0; + } + ); } @Override @@ -239,9 +253,9 @@ public class ToolColorApplicator extends AEBasePoweredItem implements IStorageCe public ItemStack getColor( final ItemStack is ) { final CompoundNBT c = is.getTag(); - if( c != null && c.contains("color") ) + if( c != null && c.contains(TAG_COLOR) ) { - final CompoundNBT color = c.getCompound( "color" ); + final CompoundNBT color = c.getCompound( TAG_COLOR ); final ItemStack oldColor = ItemStack.read(color); if( !oldColor.isEmpty() ) { @@ -326,13 +340,13 @@ public class ToolColorApplicator extends AEBasePoweredItem implements IStorageCe final CompoundNBT data = is.getOrCreateTag(); if( newColor.isEmpty() ) { - data.remove( "color" ); + data.remove( TAG_COLOR ); } else { final CompoundNBT color = new CompoundNBT(); newColor.write(color); - data.put( "color", color ); + data.put( TAG_COLOR, color ); } } @@ -447,25 +461,25 @@ public class ToolColorApplicator extends AEBasePoweredItem implements IStorageCe @Override public boolean isBlackListed( final ItemStack cellItem, final IAEItemStack requestedAddition ) { -// FIXME if( requestedAddition != null ) -// FIXME { -// FIXME final int[] id = OreDictionary.getOreIDs( requestedAddition.getDefinition() ); -// FIXME -// FIXME for( final int x : id ) -// FIXME { -// FIXME if( ORE_TO_COLOR.containsKey( x ) ) -// FIXME { -// FIXME return false; -// FIXME } -// FIXME } -// FIXME -// FIXME if( requestedAddition.getItem() instanceof SnowballItem ) -// FIXME { -// FIXME return false; -// FIXME } -// FIXME -// FIXME return !( requestedAddition.getItem() instanceof ItemPaintBall && requestedAddition.getItemDamage() < 20 ); -// FIXME } + if( requestedAddition != null ) + { + // FIXME final int[] id = OreDictionary.getOreIDs( requestedAddition.getDefinition() ); + + // FIXME for( final int x : id ) + // FIXME { + // FIXME if( ORE_TO_COLOR.containsKey( x ) ) + // FIXME { + // FIXME return false; + // FIXME } + // FIXME } + + if( requestedAddition.getItem() instanceof SnowballItem ) + { + return false; + } + + return !( requestedAddition.getItem() instanceof ItemPaintBall && requestedAddition.getItemDamage() < 20 ); + } return true; } @@ -542,4 +556,5 @@ public class ToolColorApplicator extends AEBasePoweredItem implements IStorageCe { this.cycleColors( is, this.getColor( is ), up ? 1 : -1 ); } + } diff --git a/src/main/java/appeng/server/ServerHelper.java b/src/main/java/appeng/server/ServerHelper.java index 6694f7192..b3891b564 100644 --- a/src/main/java/appeng/server/ServerHelper.java +++ b/src/main/java/appeng/server/ServerHelper.java @@ -23,11 +23,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; +import appeng.core.sync.network.NetworkHandler; +import appeng.items.tools.ToolNetworkTool; import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.RayTraceResult; @@ -48,12 +51,6 @@ public class ServerHelper extends CommonHelper private PlayerEntity renderModeBased; - @Override - public void preinit() - { - - } - @Override public World getWorld() { @@ -99,7 +96,7 @@ public class ServerHelper extends CommonHelper final double dZ = z - entityplayermp.getPosZ(); if( dX * dX + dY * dY + dZ * dZ < dist * dist ) { - // FIXME NetworkHandler.instance().sendTo( packet, entityplayermp ); + NetworkHandler.instance().sendTo( packet, entityplayermp ); } } } @@ -160,14 +157,14 @@ public class ServerHelper extends CommonHelper { final ItemStack is = player.inventory.getStackInSlot( x ); -// FIXME if( !is.isEmpty() && is.getItem() instanceof ToolNetworkTool ) -// FIXME { -// FIXME final CompoundNBT c = is.getTag(); -// FIXME if( c != null && c.getBoolean( "hideFacades" ) ) -// FIXME { -// FIXME return CableRenderMode.CABLE_VIEW; -// FIXME } -// FIXME } + if( !is.isEmpty() && is.getItem() instanceof ToolNetworkTool) + { + final CompoundNBT c = is.getTag(); + if( c != null && c.getBoolean( "hideFacades" ) ) + { + return CableRenderMode.CABLE_VIEW; + } + } } } diff --git a/src/main/java/appeng/tile/AEBaseTile.java b/src/main/java/appeng/tile/AEBaseTile.java index 6629e1401..84d57cfac 100644 --- a/src/main/java/appeng/tile/AEBaseTile.java +++ b/src/main/java/appeng/tile/AEBaseTile.java @@ -19,6 +19,7 @@ package appeng.tile; +import appeng.api.implementations.tiles.ISegmentedInventory; import appeng.api.util.ICommonTile; import appeng.api.util.IConfigManager; import appeng.api.util.IConfigurableObject; @@ -28,6 +29,9 @@ import appeng.client.render.FacingToRotation; import appeng.core.AELog; import appeng.core.features.IStackSrc; import appeng.helpers.ICustomNameObject; +import appeng.helpers.IPriorityHost; +import appeng.hooks.TickHandler; +import appeng.tile.inventory.AppEngInternalAEInventory; import appeng.util.Platform; import appeng.util.SettingsFrom; import io.netty.buffer.Unpooled; @@ -47,6 +51,7 @@ import net.minecraft.util.text.StringTextComponent; import net.minecraft.world.World; import net.minecraftforge.client.model.data.IModelData; import net.minecraftforge.client.model.data.ModelDataMap; +import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -293,8 +298,14 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile, // TODO: Optimize Network Load if( this.world != null ) { - AELog.blockUpdate( this.pos, this ); - this.world.notifyBlockUpdate( this.pos, this.getBlockState(), this.getBlockState(), 3 ); + // Let the block update + BlockState currentState = getBlockState(); + BlockState newState = currentState.updatePostPlacement(Direction.EAST, currentState, world, pos, pos); + + AELog.blockUpdate( this.pos, currentState, newState, this ); + if (currentState != newState) { + this.world.setBlockState(pos, newState); + } this.requestModelDataUpdate(); } } @@ -357,27 +368,27 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile, cm.readFromNBT( compound ); } } -// FIXME -// if( this instanceof IPriorityHost ) -// { -// final IPriorityHost pHost = (IPriorityHost) this; -// pHost.setPriority( compound.getInt( "priority" ) ); -// } -// -// if( this instanceof ISegmentedInventory ) -// { -// final IItemHandler inv = ( (ISegmentedInventory) this ).getInventoryByName( "config" ); -// if( inv instanceof AppEngInternalAEInventory ) -// { -// final AppEngInternalAEInventory target = (AppEngInternalAEInventory) inv; -// final AppEngInternalAEInventory tmp = new AppEngInternalAEInventory( null, target.getSlots() ); -// tmp.readFromNBT( compound, "config" ); -// for( int x = 0; x < tmp.getSlots(); x++ ) -// { -// target.setStackInSlot( x, tmp.getStackInSlot( x ) ); -// } -// } -// } + + if( this instanceof IPriorityHost ) + { + final IPriorityHost pHost = (IPriorityHost) this; + pHost.setPriority( compound.getInt( "priority" ) ); + } + + if( this instanceof ISegmentedInventory ) + { + final IItemHandler inv = ( (ISegmentedInventory) this ).getInventoryByName( "config" ); + if( inv instanceof AppEngInternalAEInventory ) + { + final AppEngInternalAEInventory target = (AppEngInternalAEInventory) inv; + final AppEngInternalAEInventory tmp = new AppEngInternalAEInventory( null, target.getSlots() ); + tmp.readFromNBT( compound, "config" ); + for( int x = 0; x < tmp.getSlots(); x++ ) + { + target.setStackInSlot( x, tmp.getStackInSlot( x ) ); + } + } + } } /** @@ -425,21 +436,20 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile, } } -// FIXME -// if( this instanceof IPriorityHost ) -// { -// final IPriorityHost pHost = (IPriorityHost) this; -// output.putInt( "priority", pHost.getPriority() ); -// } -// -// if( this instanceof ISegmentedInventory ) -// { -// final IItemHandler inv = ( (ISegmentedInventory) this ).getInventoryByName( "config" ); -// if( inv instanceof AppEngInternalAEInventory ) -// { -// ( (AppEngInternalAEInventory) inv ).writeToNBT( output, "config" ); -// } -// } + if( this instanceof IPriorityHost) + { + final IPriorityHost pHost = (IPriorityHost) this; + output.putInt( "priority", pHost.getPriority() ); + } + + if( this instanceof ISegmentedInventory) + { + final IItemHandler inv = ( (ISegmentedInventory) this ).getInventoryByName( "config" ); + if( inv instanceof AppEngInternalAEInventory) + { + ( (AppEngInternalAEInventory) inv ).writeToNBT( output, "config" ); + } + } return output.isEmpty() ? null : output; } @@ -482,7 +492,7 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile, this.world.markChunkDirty( this.pos, this ); if( !this.markDirtyQueued ) { - // FIXME TickHandler.INSTANCE.addCallable( null, this::markDirtyAtEndOfTick ); + TickHandler.INSTANCE.addCallable( null, this::markDirtyAtEndOfTick ); this.markDirtyQueued = true; } } diff --git a/src/main/java/appeng/tile/crafting/TileCraftingTile.java b/src/main/java/appeng/tile/crafting/TileCraftingTile.java index e0a7134dc..c556cef0e 100644 --- a/src/main/java/appeng/tile/crafting/TileCraftingTile.java +++ b/src/main/java/appeng/tile/crafting/TileCraftingTile.java @@ -202,7 +202,7 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP public boolean isFormed() { - if( Platform.isClient() ) + if( isRemote() ) { return this.world.getBlockState( this.pos ).get( AbstractCraftingUnitBlock.FORMED ); } @@ -357,7 +357,7 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP @Override public boolean isPowered() { - if( Platform.isClient() ) + if( isRemote() ) { return this.world.getBlockState( this.pos ).get( AbstractCraftingUnitBlock.POWERED ); } diff --git a/src/main/java/appeng/tile/crafting/TileMolecularAssembler.java b/src/main/java/appeng/tile/crafting/TileMolecularAssembler.java index abbad7f4a..3e46a01d2 100644 --- a/src/main/java/appeng/tile/crafting/TileMolecularAssembler.java +++ b/src/main/java/appeng/tile/crafting/TileMolecularAssembler.java @@ -476,16 +476,9 @@ public class TileMolecularAssembler extends AENetworkInvTile implements IUpgrade this.ejectHeldItems(); - try - { - final TargetPoint where = new TargetPoint( this.pos.getX(), this.pos.getY(), this.pos.getZ(), 32, this.world.getDimension().getType() ); - final IAEItemStack item = AEItemStack.fromItemStack( output ); - NetworkHandler.instance().sendToAllAround( new PacketAssemblerAnimation( this.pos, (byte) speed, item ), where ); - } - catch( final IOException e ) - { - // ;P - } + final TargetPoint where = new TargetPoint( this.pos.getX(), this.pos.getY(), this.pos.getZ(), 32, this.world.getDimension().getType() ); + final IAEItemStack item = AEItemStack.fromItemStack( output ); + NetworkHandler.instance().sendToAllAround( new PacketAssemblerAnimation( this.pos, (byte) speed, item ), where ); this.saveChanges(); this.updateSleepiness(); diff --git a/src/main/java/appeng/tile/misc/TileInterface.java b/src/main/java/appeng/tile/misc/TileInterface.java index 8f0f8f32a..c578cb07d 100644 --- a/src/main/java/appeng/tile/misc/TileInterface.java +++ b/src/main/java/appeng/tile/misc/TileInterface.java @@ -96,7 +96,7 @@ public class TileInterface extends AENetworkInvTile implements IGridTickable, II public void setSide( final Direction facing ) { - if( Platform.isClient() ) + if( isRemote() ) { return; } diff --git a/src/main/java/appeng/tile/networking/TileWireless.java b/src/main/java/appeng/tile/networking/TileWireless.java index 34c3f0cef..88346e58f 100644 --- a/src/main/java/appeng/tile/networking/TileWireless.java +++ b/src/main/java/appeng/tile/networking/TileWireless.java @@ -178,7 +178,7 @@ public class TileWireless extends AENetworkInvTile implements IWirelessAccessPoi @Override public boolean isActive() { - if( Platform.isClient() ) + if( isRemote() ) { return this.isPowered() && ( CHANNEL_FLAG == ( this.getClientFlags() & CHANNEL_FLAG ) ); } diff --git a/src/main/java/appeng/tile/qnb/TileQuantumBridge.java b/src/main/java/appeng/tile/qnb/TileQuantumBridge.java index 72aa98593..454aa98e4 100644 --- a/src/main/java/appeng/tile/qnb/TileQuantumBridge.java +++ b/src/main/java/appeng/tile/qnb/TileQuantumBridge.java @@ -297,7 +297,7 @@ public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock public boolean isPowered() { - if( Platform.isClient() ) + if( isRemote() ) { return ( this.constructed & this.powered ) == this.powered && this.constructed != -1; } diff --git a/src/main/java/appeng/tile/storage/TileChest.java b/src/main/java/appeng/tile/storage/TileChest.java index 52fc440db..c6bb7745e 100644 --- a/src/main/java/appeng/tile/storage/TileChest.java +++ b/src/main/java/appeng/tile/storage/TileChest.java @@ -26,9 +26,12 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import appeng.block.storage.BlockChest; +import appeng.block.storage.DriveSlotState; import appeng.container.implementations.ContainerMEMonitorable; import appeng.core.Api; import appeng.fluids.container.ContainerFluidTerminal; +import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.ItemStack; @@ -37,6 +40,7 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; +import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidAttributes; @@ -139,7 +143,7 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, ITerminal this.setInternalPowerFlow( AccessRestriction.WRITE ); this.inputInventory.setFilter( new InputInventoryFilter() ); - this.cellInventory.setFilter( new CellInventoryFilter() ); + this.cellInventory.setFilter(new CellInventoryFilter()); } public ItemStack getCell() @@ -272,7 +276,7 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, ITerminal @Override public int getCellStatus( final int slot ) { - if( Platform.isClient() ) + if( isRemote() ) { return ( this.state >> ( slot * 3 ) ) & 3; } @@ -293,7 +297,7 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, ITerminal @Override public boolean isPowered() { - if( Platform.isClient() ) + if( isRemote() ) { return ( this.state & 0x40 ) == 0x40; } @@ -923,7 +927,7 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, ITerminal } } - private class CellInventoryFilter implements IAEItemFilter + private static class CellInventoryFilter implements IAEItemFilter { @Override diff --git a/src/main/java/appeng/tile/storage/TileDrive.java b/src/main/java/appeng/tile/storage/TileDrive.java index b69abfff7..b8bf81bd2 100644 --- a/src/main/java/appeng/tile/storage/TileDrive.java +++ b/src/main/java/appeng/tile/storage/TileDrive.java @@ -168,7 +168,7 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior @Override public boolean isPowered() { - if( Platform.isClient() ) + if( isRemote() ) { return ( this.state & BIT_POWER_MASK ) == BIT_POWER_MASK; } diff --git a/src/main/java/appeng/util/Platform.java b/src/main/java/appeng/util/Platform.java index 6f23e330a..e3cbc68c7 100644 --- a/src/main/java/appeng/util/Platform.java +++ b/src/main/java/appeng/util/Platform.java @@ -375,7 +375,7 @@ public class Platform */ public static boolean isClient() { - return Thread.currentThread().getThreadGroup() == SidedThreadGroups.CLIENT; + return Thread.currentThread().getThreadGroup() != SidedThreadGroups.SERVER; } /* diff --git a/src/main/java/appeng/util/item/AEItemStack.java b/src/main/java/appeng/util/item/AEItemStack.java index d004d52ad..f9a13f10c 100644 --- a/src/main/java/appeng/util/item/AEItemStack.java +++ b/src/main/java/appeng/util/item/AEItemStack.java @@ -19,6 +19,7 @@ package appeng.util.item; +import java.util.EnumSet; import java.util.List; import java.util.Objects; @@ -137,10 +138,10 @@ public final class AEItemStack extends AEStack implements IAEItemS public void writeToPacket( final PacketBuffer i ) { final byte mask = (byte) ( ( this.getType( this.getStackSize() ) << 2 ) | ( this - .getType( this.getCountRequestable() ) << 4 ) | ( (byte) ( this.isCraftable() ? 1 : 0 ) << 6 ) | ( this.hasTagCompound() ? 1 : 0 ) << 7 ); + .getType( this.getCountRequestable() ) << 4 ) | ( (byte) ( this.isCraftable() ? 1 : 0 ) << 6 ) ); i.writeByte( mask ); - i.writeCompoundTag( this.getDefinition().serializeNBT() ); + i.writeItemStack(getDefinition()); this.putPacketValue( i, this.getStackSize() ); this.putPacketValue( i, this.getCountRequestable() ); } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index abab2dfae..26df3a933 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -7,3 +7,6 @@ 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 + +# We need to change yPos of existing slots to resize the container +public-f net.minecraft.inventory.container.Slot field_75221_f # yPos diff --git a/src/main/resources/assets/appliedenergistics2/blockstates/chest.json b/src/main/resources/assets/appliedenergistics2/blockstates/chest.json index 3a02f7135..2a3496fb1 100644 --- a/src/main/resources/assets/appliedenergistics2/blockstates/chest.json +++ b/src/main/resources/assets/appliedenergistics2/blockstates/chest.json @@ -1,60 +1,65 @@ { - "forge_marker": 1, - "defaults": { + "multipart": [ + { + "apply": { "model": "appliedenergistics2:block/chest/base" + } }, - "variants": { - "slot_state": { - "empty": { - "submodel": { - "lights": { - "model": "appliedenergistics2:block/chest/lights_off" - }, - "state": { - "model": "appliedenergistics2:block/chest/cell_state_empty" - } - } - }, - "offline": { - "submodel": { - "lights": { - "model": "appliedenergistics2:block/chest/lights_off" - }, - "state": { - "model": "appliedenergistics2:block/chest/cell_state_offline" - } - } - }, - "online": { - "submodel": { - "lights": { - "model": "appliedenergistics2:block/chest/lights_on" - }, - "state": { - "model": "appliedenergistics2:block/chest/cell_state_online" - } - } - }, - "types_full": { - "submodel": { - "lights": { - "model": "appliedenergistics2:block/chest/lights_on" - }, - "state": { - "model": "appliedenergistics2:block/chest/cell_state_types_full" - } - } - }, - "full": { - "submodel": { - "lights": { - "model": "appliedenergistics2:block/chest/lights_on" - }, - "state": { - "model": "appliedenergistics2:block/chest/cell_state_full" - } - } - } - } + { + "when": { + "slot_state": "empty|offline" + }, + "apply": { + "model": "appliedenergistics2:block/chest/lights_off" + } + }, + { + "when": { + "slot_state": "online|types_full|full" + }, + "apply": { + "model": "appliedenergistics2:block/chest/lights_on" + } + }, + { + "when": { + "slot_state": "empty" + }, + "apply": { + "model": "appliedenergistics2:block/chest/cell_state_empty" + } + }, + { + "when": { + "slot_state": "offline" + }, + "apply": { + "model": "appliedenergistics2:block/chest/cell_state_offline" + } + }, + { + "when": { + "slot_state": "online" + }, + "apply": { + "model": "appliedenergistics2:block/chest/cell_state_online" + } + }, + { + "when": { + "slot_state": "types_full" + }, + "apply": { + "model": "appliedenergistics2:block/chest/cell_state_types_full" + } + }, + { + "when": { + "slot_state": "full" + }, + "apply": { + "model": "appliedenergistics2:block/chest/cell_state_full" + } } + ] } diff --git a/src/main/resources/assets/appliedenergistics2/blockstates/crank.json b/src/main/resources/assets/appliedenergistics2/blockstates/crank.json index e9a8366ce..5ae8d5fe8 100644 --- a/src/main/resources/assets/appliedenergistics2/blockstates/crank.json +++ b/src/main/resources/assets/appliedenergistics2/blockstates/crank.json @@ -1,5 +1,4 @@ { - "forge_marker": 1, "variants": { "": { "model": "appliedenergistics2:block/crank" diff --git a/src/main/resources/assets/appliedenergistics2/lang/en_us.json b/src/main/resources/assets/appliedenergistics2/lang/en_us.json index 914996e15..2a61f75ea 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/en_us.json +++ b/src/main/resources/assets/appliedenergistics2/lang/en_us.json @@ -113,6 +113,8 @@ "gui.appliedenergistics2.security.build.tip": "User can modify the physical structure of the network, and make configuration changes.", "gui.appliedenergistics2.security.security.tip": "User can access and modify the security terminal of the network.", + "appliedenergistics2.permission_denied": "You lack permission to access this.", + "gui.appliedenergistics2.Efficiency": "Efficiency", "gui.appliedenergistics2.SCSSize": "SCS Size", "gui.appliedenergistics2.SCSInvalid": "Invalid", diff --git a/src/main/resources/assets/appliedenergistics2/models/item/color_applicator.json b/src/main/resources/assets/appliedenergistics2/models/item/color_applicator.json new file mode 100644 index 000000000..2db583c66 --- /dev/null +++ b/src/main/resources/assets/appliedenergistics2/models/item/color_applicator.json @@ -0,0 +1,15 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "appliedenergistics2:item/color_applicator" + }, + "overrides": [ + { + "predicate": { + "appliedenergistics2:colored": 1 + }, + "model": "appliedenergistics2:item/color_applicator_colored" + } + ] + +} diff --git a/src/main/resources/assets/appliedenergistics2/models/item/color_applicator_uncolored.json b/src/main/resources/assets/appliedenergistics2/models/item/color_applicator_uncolored.json deleted file mode 100644 index 5bceaf110..000000000 --- a/src/main/resources/assets/appliedenergistics2/models/item/color_applicator_uncolored.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "appliedenergistics2:item/color_applicator" - } -}