From 54802be11f588a1b6fcc68a2fc4cf41d6b381483 Mon Sep 17 00:00:00 2001 From: thatsIch Date: Fri, 26 Sep 2014 16:14:44 +0200 Subject: [PATCH] Moved API Added temporary(!) API dependencies, will resolved via Maven later on Added mcmod.info Added pack.mcmeta template Added hacked BC jar to use facades indev Split build logic into several pieces Update gitignore Modify build.gradle to match changes --- .gitignore | 10 +- .gitmodules | 6 +- build.gradle | 140 +---- gradle/scripts/artifacts.gradle | 43 ++ gradle/scripts/autoinstallruntime.gradle | 34 ++ gradle/scripts/dependencies.gradle | 33 ++ gradle/scripts/propertyloader.gradle | 9 + libs/buildcraft-dev.jar | Bin 0 -> 1285933 bytes src/api/java/Reika/RotaryCraft/API/IOAPI.java | 67 +++ .../Reika/RotaryCraft/API/PowerGenerator.java | 26 + .../Reika/RotaryCraft/API/ShaftMachine.java | 37 ++ .../Reika/RotaryCraft/API/ShaftMerger.java | 15 + .../RotaryCraft/API/ShaftPowerEmitter.java | 22 + .../RotaryCraft/API/ShaftPowerReceiver.java | 40 ++ .../Reika/RotaryCraft/API/ThermalMachine.java | 37 ++ src/{main => api}/java/appeng/api | 0 .../java/cofh/api/energy/EnergyStorage.java | 158 ++++++ .../cofh/api/energy/IEnergyConnection.java | 21 + .../cofh/api/energy/IEnergyContainerItem.java | 52 ++ .../java/cofh/api/energy/IEnergyHandler.java | 51 ++ .../java/cofh/api/energy/IEnergyStorage.java | 45 ++ .../cofh/api/energy/ItemEnergyContainer.java | 110 ++++ .../cofh/api/energy/TileEnergyHandler.java | 62 ++ .../java/coloredlightscore/src/api/CLApi.java | 269 +++++++++ .../api/interfaces/IDigitalChest.java | 29 + .../interfaces/IHasWorldObjectAndCoords.java | 75 +++ src/api/java/invtweaks/api/IItemTree.java | 68 +++ .../java/invtweaks/api/IItemTreeCategory.java | 46 ++ src/api/java/invtweaks/api/IItemTreeItem.java | 33 ++ .../java/invtweaks/api/IItemTreeListener.java | 29 + src/api/java/invtweaks/api/InvTweaksAPI.java | 75 +++ .../api/container/ChestContainer.java | 28 + .../api/container/ContainerSection.java | 86 +++ .../container/ContainerSectionCallback.java | 16 + .../api/container/IgnoreContainer.java | 15 + .../api/container/InventoryContainer.java | 20 + src/api/java/mekanism/api/AdvancedInput.java | 28 + src/api/java/mekanism/api/BlockInfo.java | 38 ++ src/api/java/mekanism/api/ChanceOutput.java | 49 ++ src/api/java/mekanism/api/ChemicalPair.java | 116 ++++ src/api/java/mekanism/api/Chunk3D.java | 108 ++++ src/api/java/mekanism/api/Coord4D.java | 358 ++++++++++++ src/api/java/mekanism/api/EnumColor.java | 112 ++++ src/api/java/mekanism/api/IClientTicker.java | 8 + src/api/java/mekanism/api/IConfigurable.java | 27 + src/api/java/mekanism/api/IFilterAccess.java | 31 + .../java/mekanism/api/ISalinationSolar.java | 11 + src/api/java/mekanism/api/ItemInfo.java | 38 ++ src/api/java/mekanism/api/ItemRetriever.java | 71 +++ src/api/java/mekanism/api/ListUtils.java | 282 ++++++++++ src/api/java/mekanism/api/MekanismAPI.java | 45 ++ src/api/java/mekanism/api/Pos3D.java | 191 +++++++ .../mekanism/api/PressurizedProducts.java | 50 ++ .../mekanism/api/PressurizedReactants.java | 139 +++++ .../java/mekanism/api/PressurizedRecipe.java | 25 + src/api/java/mekanism/api/RecipeHelper.java | 258 +++++++++ src/api/java/mekanism/api/TabProxy.java | 42 ++ .../api/energy/EnergizedItemManager.java | 60 ++ .../mekanism/api/energy/ICableOutputter.java | 18 + .../mekanism/api/energy/IEnergizedItem.java | 59 ++ .../api/energy/IStrictEnergyAcceptor.java | 25 + .../api/energy/IStrictEnergyStorage.java | 27 + .../java/mekanism/api/gas/FuelHandler.java | 59 ++ src/api/java/mekanism/api/gas/Gas.java | 221 ++++++++ src/api/java/mekanism/api/gas/GasNetwork.java | 477 ++++++++++++++++ .../java/mekanism/api/gas/GasRegistry.java | 113 ++++ src/api/java/mekanism/api/gas/GasStack.java | 119 ++++ src/api/java/mekanism/api/gas/GasTank.java | 241 ++++++++ .../mekanism/api/gas/GasTransmission.java | 141 +++++ .../java/mekanism/api/gas/IGasHandler.java | 41 ++ src/api/java/mekanism/api/gas/IGasItem.java | 81 +++ .../mekanism/api/gas/IGasTransmitter.java | 9 + .../mekanism/api/gas/ITubeConnection.java | 18 + src/api/java/mekanism/api/gas/OreGas.java | 38 ++ .../mekanism/api/infuse/InfuseObject.java | 21 + .../mekanism/api/infuse/InfuseRegistry.java | 113 ++++ .../java/mekanism/api/infuse/InfuseType.java | 47 ++ .../mekanism/api/infuse/InfusionInput.java | 32 ++ .../mekanism/api/infuse/InfusionOutput.java | 38 ++ .../api/transmitters/DynamicNetwork.java | 526 +++++++++++++++++ .../transmitters/IBlockableConnection.java | 10 + .../api/transmitters/IGridTransmitter.java | 66 +++ .../api/transmitters/INetworkDataHandler.java | 10 + .../api/transmitters/ITransmitter.java | 11 + .../api/transmitters/ITransmitterNetwork.java | 39 ++ .../api/transmitters/TransmissionType.java | 43 ++ .../TransmitterNetworkRegistry.java | 160 ++++++ .../java/mekanism/common/util/MinerUtils.java | 49 ++ .../java/mekanism/common/util/PipeUtils.java | 114 ++++ .../java/mekanism/common/util/StackUtils.java | 149 +++++ .../api/block/IPartialSealedBlock.java | 8 + .../core/api/multipart/ICoverSystem.java | 22 + .../core/api/multipart/IMultipartTile.java | 10 + .../core/api/multipart/IPartContainer.java | 90 +++ .../IBlastFurnaceCraftingManager.java | 29 + .../api/crafting/IBlastFurnaceRecipe.java | 21 + .../crafting/ICokeOvenCraftingManager.java | 18 + .../api/crafting/ICokeOvenRecipe.java | 20 + .../crafting/IRockCrusherCraftingManager.java | 17 + .../api/crafting/IRockCrusherRecipe.java | 45 ++ .../IRollingMachineCraftingManager.java | 24 + .../crafting/RailcraftCraftingManager.java | 16 + .../api/BetterStorageBackpack.java | 54 ++ .../api/BetterStorageEnchantment.java | 38 ++ .../betterstorage/api/BetterStorageUtils.java | 22 + .../betterstorage/api/IContainerItem.java | 17 + .../api/crafting/BetterStorageCrafting.java | 44 ++ .../api/crafting/ContainerInfo.java | 18 + .../crafting/CraftingSourceTileEntity.java | 32 ++ .../api/crafting/ICraftingSource.java | 18 + .../api/crafting/IRecipeInput.java | 29 + .../api/crafting/IStationRecipe.java | 35 ++ .../api/crafting/RecipeBounds.java | 35 ++ .../api/crafting/RecipeInputBase.java | 26 + .../api/crafting/RecipeInputItemStack.java | 49 ++ .../api/crafting/RecipeInputOreDict.java | 37 ++ .../api/crafting/ShapedStationRecipe.java | 169 ++++++ .../api/crafting/ShapelessStationRecipe.java | 82 +++ .../api/crafting/StationCrafting.java | 55 ++ .../api/crate/ICrateStorage.java | 87 +++ .../api/crate/ICrateWatcher.java | 13 + .../api/lock/EnumLockInteraction.java | 9 + .../copy/betterstorage/api/lock/IKey.java | 19 + .../copy/betterstorage/api/lock/ILock.java | 24 + .../betterstorage/api/lock/ILockable.java | 29 + .../api/FactoryRegistry.java | 113 ++++ .../api/FertilizerType.java | 27 + .../minefactoryreloaded/api/HarvestType.java | 44 ++ .../api/IDeepStorageUnit.java | 29 + .../api/IFactoryFertilizable.java | 41 ++ .../api/IFactoryFertilizer.java | 29 + .../api/IFactoryFruit.java | 75 +++ .../api/IFactoryGrindable.java | 35 ++ .../api/IFactoryHarvestable.java | 71 +++ .../api/IFactoryLaserTarget.java | 25 + .../api/IFactoryPlantable.java | 64 +++ .../api/IFactoryRanchable.java | 28 + .../api/ILiquidDrinkHandler.java | 8 + .../api/IMobEggHandler.java | 18 + .../api/IMobSpawnHandler.java | 27 + .../minefactoryreloaded/api/INeedleAmmo.java | 13 + .../api/IRandomMobProvider.java | 11 + .../api/ISafariNetHandler.java | 28 + .../minefactoryreloaded/api/ISyringe.java | 46 ++ .../minefactoryreloaded/api/IToolHammer.java | 9 + .../api/IToolHammerAdvanced.java | 16 + .../minefactoryreloaded/api/IUpgrade.java | 36 ++ .../minefactoryreloaded/api/MobDrop.java | 21 + .../minefactoryreloaded/api/RanchedItem.java | 68 +++ .../minefactoryreloaded/api/RandomMob.java | 28 + .../api/ReplacementBlock.java | 137 +++++ .../minefactoryreloaded/api/ValuedItem.java | 72 +++ .../api/rednet/IRedNetInputNode.java | 52 ++ .../api/rednet/IRedNetLogicCircuit.java | 19 + .../api/rednet/IRedNetLogicPoint.java | 36 ++ .../api/rednet/IRedNetNetworkContainer.java | 31 + .../api/rednet/IRedNetOmniNode.java | 22 + .../api/rednet/IRedNetOutputNode.java | 51 ++ .../connectivity/IRedNetConnection.java | 26 + .../connectivity/IRedNetDecorative.java | 6 + .../connectivity/IRedNetNoConnection.java | 6 + .../connectivity/RedNetConnectionType.java | 80 +++ src/api/java/rblocks/api/IOrientable.java | 41 ++ src/api/java/rblocks/api/IRBMethods.java | 29 + .../java/rblocks/api/IRotatableBlocksApi.java | 19 + .../rblocks/api/RotatableBlockDisable.java | 12 + .../rblocks/api/RotatableBlockEnable.java | 14 + .../CraftGuide/CommonUtilities.java | 262 +++++++++ .../uristqwerty/CraftGuide/CraftGuide.java | 393 +++++++++++++ .../CraftGuide/CraftGuideLoaderSide.java | 17 + .../uristqwerty/CraftGuide/CraftGuideLog.java | 66 +++ .../CraftGuide/CraftGuideSide.java | 21 + .../CraftGuide/CraftGuide_FML.java | 103 ++++ .../uristqwerty/CraftGuide/CraftType.java | 166 ++++++ .../CraftGuide/DefaultRecipeTemplate.java | 53 ++ .../uristqwerty/CraftGuide/ForgeStuff.java | 143 +++++ .../uristqwerty/CraftGuide/GuiCraftGuide.java | 530 ++++++++++++++++++ .../CraftGuide/ItemCraftGuide.java | 52 ++ .../ItemSlotImplementationImplementation.java | 175 ++++++ .../CraftGuide/MultipleItemFilter.java | 157 ++++++ .../java/uristqwerty/CraftGuide/Recipe.java | 211 +++++++ .../uristqwerty/CraftGuide/RecipeCache.java | 393 +++++++++++++ .../RecipeGeneratorImplementation.java | 271 +++++++++ .../uristqwerty/CraftGuide/ReflectionAPI.java | 19 + .../CraftGuide/SingleItemFilter.java | 62 ++ .../CraftGuide/StringItemFilter.java | 64 +++ .../CraftGuide/UtilImplementationCommon.java | 118 ++++ .../CraftGuide/api/BasicRecipeFilter.java | 21 + .../CraftGuide/api/ChanceSlot.java | 82 +++ .../CraftGuide/api/CraftGuideAPIObject.java | 52 ++ .../CraftGuide/api/CraftGuideRecipe.java | 103 ++++ .../api/CraftGuideRecipeExtra1.java | 15 + .../uristqwerty/CraftGuide/api/EUSlot.java | 126 +++++ .../uristqwerty/CraftGuide/api/ExtraSlot.java | 106 ++++ .../uristqwerty/CraftGuide/api/InfoSlot.java | 74 +++ .../CraftGuide/api/ItemFilter.java | 37 ++ .../uristqwerty/CraftGuide/api/ItemSlot.java | 154 +++++ .../api/ItemSlotImplementation.java | 61 ++ .../CraftGuide/api/LiquidFilter.java | 117 ++++ .../CraftGuide/api/LiquidSlot.java | 158 ++++++ .../CraftGuide/api/NamedTexture.java | 11 + .../CraftGuide/api/RecipeFilter.java | 24 + .../CraftGuide/api/RecipeGenerator.java | 120 ++++ .../CraftGuide/api/RecipeProvider.java | 18 + .../CraftGuide/api/RecipeTemplate.java | 36 ++ .../uristqwerty/CraftGuide/api/Renderer.java | 108 ++++ .../java/uristqwerty/CraftGuide/api/Slot.java | 92 +++ .../uristqwerty/CraftGuide/api/SlotType.java | 38 ++ .../uristqwerty/CraftGuide/api/StackInfo.java | 14 + .../CraftGuide/api/StackInfoSource.java | 8 + .../java/uristqwerty/CraftGuide/api/Util.java | 78 +++ .../CraftGuide/client/CraftGuideClient.java | 192 +++++++ .../CraftGuide/client/FilterDisplay.java | 72 +++ .../client/UtilImplementationClient.java | 52 ++ .../client/fml/CraftGuideClient_FML.java | 143 +++++ .../CraftGuide/client/ui/ButtonTemplate.java | 37 ++ .../client/ui/CraftTypeDisplay.java | 271 +++++++++ .../CraftGuide/client/ui/CraftingDisplay.java | 187 ++++++ .../client/ui/FilterSelectGrid.java | 244 ++++++++ .../CraftGuide/client/ui/GuiButton.java | 164 ++++++ .../CraftGuide/client/ui/GuiCentredText.java | 32 ++ .../CraftGuide/client/ui/GuiRenderer.java | 455 +++++++++++++++ .../CraftGuide/client/ui/GuiResizeHandle.java | 130 +++++ .../client/ui/GuiRightAlignedText.java | 35 ++ .../CraftGuide/client/ui/GuiScrollBar.java | 217 +++++++ .../client/ui/GuiScrollableGrid.java | 391 +++++++++++++ .../CraftGuide/client/ui/GuiSlider.java | 111 ++++ .../client/ui/GuiTabbedDisplay.java | 138 +++++ .../CraftGuide/client/ui/GuiText.java | 34 ++ .../CraftGuide/client/ui/GuiTextInput.java | 262 +++++++++ .../client/ui/GuiVariableRowHeightGrid.java | 108 ++++ .../CraftGuide/client/ui/IButtonListener.java | 12 + .../client/ui/IRecipeCacheListener.java | 9 + .../CraftGuide/client/ui/ISliderListener.java | 6 + .../client/ui/ITextInputListener.java | 7 + .../client/ui/NamedTextureObject.java | 21 + .../client/ui/Rendering/CentredText.java | 36 ++ .../client/ui/Rendering/FloatingItemText.java | 50 ++ .../client/ui/Rendering/GridRect.java | 48 ++ .../client/ui/Rendering/Overlay.java | 35 ++ .../client/ui/Rendering/RenderMultiple.java | 31 + .../client/ui/Rendering/RightAlignedText.java | 25 + .../client/ui/Rendering/ShadedRect.java | 40 ++ .../CraftGuide/client/ui/RowCount.java | 25 + .../CraftGuide/client/ui/ToggleButton.java | 45 ++ .../CraftGuide/recipes/BrewingRecipes.java | 131 +++++ .../recipes/DefaultRecipeProvider.java | 214 +++++++ .../CraftGuide/recipes/ExtendedWorkbench.java | 137 +++++ .../CraftGuide/server/CraftGuideServer.java | 44 ++ .../server/UtilImplementationServer.java | 13 + .../uristqwerty/gui_craftguide/Color.java | 14 + .../gui_craftguide/MutableRect.java | 91 +++ .../java/uristqwerty/gui_craftguide/Rect.java | 14 + .../gui_craftguide/components/Button.java | 95 ++++ .../components/DropdownSelector.java | 114 ++++ .../gui_craftguide/components/GuiElement.java | 428 ++++++++++++++ .../gui_craftguide/components/Image.java | 24 + .../gui_craftguide/components/ScrollBar.java | 10 + .../gui_craftguide/components/ScrollPane.java | 13 + .../gui_craftguide/components/Slider.java | 10 + .../gui_craftguide/components/Window.java | 177 ++++++ .../gui_craftguide/editor/Editor.java | 21 + .../gui_craftguide/editor/EditorGui.java | 51 ++ .../gui_craftguide/editor/GuiElementMeta.java | 33 ++ .../gui_craftguide/editor/TextureDisplay.java | 55 ++ .../gui_craftguide/editor/TextureMeta.java | 26 + .../editor/TextureProperties.java | 11 + .../gui_craftguide/minecraft/Gui.java | 121 ++++ .../gui_craftguide/minecraft/Image.java | 202 +++++++ .../gui_craftguide/minecraft/Text.java | 52 ++ .../gui_craftguide/rendering/Renderable.java | 6 + .../rendering/RendererBase.java | 157 ++++++ .../rendering/TexturedRect.java | 43 ++ .../gui_craftguide/texture/BlankTexture.java | 13 + .../texture/BorderedTexture.java | 80 +++ .../texture/DynamicTexture.java | 53 ++ .../texture/MultipleTextures.java | 26 + .../gui_craftguide/texture/OffsetTexture.java | 22 + .../texture/SolidColorTexture.java | 31 + .../gui_craftguide/texture/SubTexture.java | 89 +++ .../gui_craftguide/texture/Texture.java | 8 + .../gui_craftguide/texture/TextureClip.java | 69 +++ .../gui_craftguide/texture/TintedTexture.java | 32 ++ .../gui_craftguide/theme/Theme.java | 158 ++++++ .../gui_craftguide/theme/ThemeManager.java | 393 +++++++++++++ .../theme/reader/ColorTemplate.java | 80 +++ .../theme/reader/DependencyElement.java | 36 ++ .../theme/reader/ElementHandler.java | 14 + .../theme/reader/GenericHandler.java | 69 +++ .../theme/reader/ImageElement.java | 62 ++ .../theme/reader/ImageSourceElement.java | 50 ++ .../theme/reader/IntegerElement.java | 56 ++ .../theme/reader/ListTemplate.java | 89 +++ .../theme/reader/MetadataProperty.java | 43 ++ .../theme/reader/NullElement.java | 36 ++ .../theme/reader/RectTemplate.java | 80 +++ .../theme/reader/TextureElement.java | 145 +++++ .../theme/reader/TextureSourceElement.java | 50 ++ .../theme/reader/ThemeReader.java | 141 +++++ .../theme/reader/ValueTemplate.java | 7 + .../theme/reader/ValueType.java | 48 ++ .../theme/writer/ThemeWriter.java | 19 + .../theme/writer/XMLThemeWriter.java | 184 ++++++ src/main/resources/mcmod.info | 19 + src/main/resources/pack.mcmeta | 6 + 305 files changed, 22813 insertions(+), 129 deletions(-) create mode 100644 gradle/scripts/artifacts.gradle create mode 100644 gradle/scripts/autoinstallruntime.gradle create mode 100644 gradle/scripts/dependencies.gradle create mode 100644 gradle/scripts/propertyloader.gradle create mode 100644 libs/buildcraft-dev.jar create mode 100644 src/api/java/Reika/RotaryCraft/API/IOAPI.java create mode 100644 src/api/java/Reika/RotaryCraft/API/PowerGenerator.java create mode 100644 src/api/java/Reika/RotaryCraft/API/ShaftMachine.java create mode 100644 src/api/java/Reika/RotaryCraft/API/ShaftMerger.java create mode 100644 src/api/java/Reika/RotaryCraft/API/ShaftPowerEmitter.java create mode 100644 src/api/java/Reika/RotaryCraft/API/ShaftPowerReceiver.java create mode 100644 src/api/java/Reika/RotaryCraft/API/ThermalMachine.java rename src/{main => api}/java/appeng/api (100%) create mode 100644 src/api/java/cofh/api/energy/EnergyStorage.java create mode 100644 src/api/java/cofh/api/energy/IEnergyConnection.java create mode 100644 src/api/java/cofh/api/energy/IEnergyContainerItem.java create mode 100644 src/api/java/cofh/api/energy/IEnergyHandler.java create mode 100644 src/api/java/cofh/api/energy/IEnergyStorage.java create mode 100644 src/api/java/cofh/api/energy/ItemEnergyContainer.java create mode 100644 src/api/java/cofh/api/energy/TileEnergyHandler.java create mode 100644 src/api/java/coloredlightscore/src/api/CLApi.java create mode 100644 src/api/java/gregtechmod/api/interfaces/IDigitalChest.java create mode 100644 src/api/java/gregtechmod/api/interfaces/IHasWorldObjectAndCoords.java create mode 100644 src/api/java/invtweaks/api/IItemTree.java create mode 100644 src/api/java/invtweaks/api/IItemTreeCategory.java create mode 100644 src/api/java/invtweaks/api/IItemTreeItem.java create mode 100644 src/api/java/invtweaks/api/IItemTreeListener.java create mode 100644 src/api/java/invtweaks/api/InvTweaksAPI.java create mode 100644 src/api/java/invtweaks/api/container/ChestContainer.java create mode 100644 src/api/java/invtweaks/api/container/ContainerSection.java create mode 100644 src/api/java/invtweaks/api/container/ContainerSectionCallback.java create mode 100644 src/api/java/invtweaks/api/container/IgnoreContainer.java create mode 100644 src/api/java/invtweaks/api/container/InventoryContainer.java create mode 100644 src/api/java/mekanism/api/AdvancedInput.java create mode 100644 src/api/java/mekanism/api/BlockInfo.java create mode 100644 src/api/java/mekanism/api/ChanceOutput.java create mode 100644 src/api/java/mekanism/api/ChemicalPair.java create mode 100644 src/api/java/mekanism/api/Chunk3D.java create mode 100644 src/api/java/mekanism/api/Coord4D.java create mode 100644 src/api/java/mekanism/api/EnumColor.java create mode 100644 src/api/java/mekanism/api/IClientTicker.java create mode 100644 src/api/java/mekanism/api/IConfigurable.java create mode 100644 src/api/java/mekanism/api/IFilterAccess.java create mode 100644 src/api/java/mekanism/api/ISalinationSolar.java create mode 100644 src/api/java/mekanism/api/ItemInfo.java create mode 100644 src/api/java/mekanism/api/ItemRetriever.java create mode 100644 src/api/java/mekanism/api/ListUtils.java create mode 100644 src/api/java/mekanism/api/MekanismAPI.java create mode 100644 src/api/java/mekanism/api/Pos3D.java create mode 100644 src/api/java/mekanism/api/PressurizedProducts.java create mode 100644 src/api/java/mekanism/api/PressurizedReactants.java create mode 100644 src/api/java/mekanism/api/PressurizedRecipe.java create mode 100644 src/api/java/mekanism/api/RecipeHelper.java create mode 100644 src/api/java/mekanism/api/TabProxy.java create mode 100644 src/api/java/mekanism/api/energy/EnergizedItemManager.java create mode 100644 src/api/java/mekanism/api/energy/ICableOutputter.java create mode 100644 src/api/java/mekanism/api/energy/IEnergizedItem.java create mode 100644 src/api/java/mekanism/api/energy/IStrictEnergyAcceptor.java create mode 100644 src/api/java/mekanism/api/energy/IStrictEnergyStorage.java create mode 100644 src/api/java/mekanism/api/gas/FuelHandler.java create mode 100644 src/api/java/mekanism/api/gas/Gas.java create mode 100644 src/api/java/mekanism/api/gas/GasNetwork.java create mode 100644 src/api/java/mekanism/api/gas/GasRegistry.java create mode 100644 src/api/java/mekanism/api/gas/GasStack.java create mode 100644 src/api/java/mekanism/api/gas/GasTank.java create mode 100644 src/api/java/mekanism/api/gas/GasTransmission.java create mode 100644 src/api/java/mekanism/api/gas/IGasHandler.java create mode 100644 src/api/java/mekanism/api/gas/IGasItem.java create mode 100644 src/api/java/mekanism/api/gas/IGasTransmitter.java create mode 100644 src/api/java/mekanism/api/gas/ITubeConnection.java create mode 100644 src/api/java/mekanism/api/gas/OreGas.java create mode 100644 src/api/java/mekanism/api/infuse/InfuseObject.java create mode 100644 src/api/java/mekanism/api/infuse/InfuseRegistry.java create mode 100644 src/api/java/mekanism/api/infuse/InfuseType.java create mode 100644 src/api/java/mekanism/api/infuse/InfusionInput.java create mode 100644 src/api/java/mekanism/api/infuse/InfusionOutput.java create mode 100644 src/api/java/mekanism/api/transmitters/DynamicNetwork.java create mode 100644 src/api/java/mekanism/api/transmitters/IBlockableConnection.java create mode 100644 src/api/java/mekanism/api/transmitters/IGridTransmitter.java create mode 100644 src/api/java/mekanism/api/transmitters/INetworkDataHandler.java create mode 100644 src/api/java/mekanism/api/transmitters/ITransmitter.java create mode 100644 src/api/java/mekanism/api/transmitters/ITransmitterNetwork.java create mode 100644 src/api/java/mekanism/api/transmitters/TransmissionType.java create mode 100644 src/api/java/mekanism/api/transmitters/TransmitterNetworkRegistry.java create mode 100644 src/api/java/mekanism/common/util/MinerUtils.java create mode 100644 src/api/java/mekanism/common/util/PipeUtils.java create mode 100644 src/api/java/mekanism/common/util/StackUtils.java create mode 100644 src/api/java/micdoodle8/mods/galacticraft/api/block/IPartialSealedBlock.java create mode 100644 src/api/java/mods/immibis/core/api/multipart/ICoverSystem.java create mode 100644 src/api/java/mods/immibis/core/api/multipart/IMultipartTile.java create mode 100644 src/api/java/mods/immibis/core/api/multipart/IPartContainer.java create mode 100644 src/api/java/mods/railcraft/api/crafting/IBlastFurnaceCraftingManager.java create mode 100644 src/api/java/mods/railcraft/api/crafting/IBlastFurnaceRecipe.java create mode 100644 src/api/java/mods/railcraft/api/crafting/ICokeOvenCraftingManager.java create mode 100644 src/api/java/mods/railcraft/api/crafting/ICokeOvenRecipe.java create mode 100644 src/api/java/mods/railcraft/api/crafting/IRockCrusherCraftingManager.java create mode 100644 src/api/java/mods/railcraft/api/crafting/IRockCrusherRecipe.java create mode 100644 src/api/java/mods/railcraft/api/crafting/IRollingMachineCraftingManager.java create mode 100644 src/api/java/mods/railcraft/api/crafting/RailcraftCraftingManager.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/BetterStorageBackpack.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/BetterStorageEnchantment.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/BetterStorageUtils.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/IContainerItem.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/BetterStorageCrafting.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/ContainerInfo.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/CraftingSourceTileEntity.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/ICraftingSource.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/IRecipeInput.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/IStationRecipe.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeBounds.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputBase.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputItemStack.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputOreDict.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/ShapedStationRecipe.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/ShapelessStationRecipe.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crafting/StationCrafting.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crate/ICrateStorage.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/crate/ICrateWatcher.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/lock/EnumLockInteraction.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/lock/IKey.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/lock/ILock.java create mode 100644 src/api/java/net/mcft/copy/betterstorage/api/lock/ILockable.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/FactoryRegistry.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/FertilizerType.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/HarvestType.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizable.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizer.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFruit.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryGrindable.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryHarvestable.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryLaserTarget.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryPlantable.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryRanchable.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ILiquidDrinkHandler.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IMobEggHandler.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IMobSpawnHandler.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/INeedleAmmo.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IRandomMobProvider.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ISafariNetHandler.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ISyringe.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IToolHammer.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IToolHammerAdvanced.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IUpgrade.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/MobDrop.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/RanchedItem.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/RandomMob.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ReplacementBlock.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ValuedItem.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInputNode.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicCircuit.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicPoint.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetNetworkContainer.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOmniNode.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOutputNode.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetConnection.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetDecorative.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetNoConnection.java create mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/RedNetConnectionType.java create mode 100644 src/api/java/rblocks/api/IOrientable.java create mode 100644 src/api/java/rblocks/api/IRBMethods.java create mode 100644 src/api/java/rblocks/api/IRotatableBlocksApi.java create mode 100644 src/api/java/rblocks/api/RotatableBlockDisable.java create mode 100644 src/api/java/rblocks/api/RotatableBlockEnable.java create mode 100644 src/api/java/uristqwerty/CraftGuide/CommonUtilities.java create mode 100644 src/api/java/uristqwerty/CraftGuide/CraftGuide.java create mode 100644 src/api/java/uristqwerty/CraftGuide/CraftGuideLoaderSide.java create mode 100644 src/api/java/uristqwerty/CraftGuide/CraftGuideLog.java create mode 100644 src/api/java/uristqwerty/CraftGuide/CraftGuideSide.java create mode 100644 src/api/java/uristqwerty/CraftGuide/CraftGuide_FML.java create mode 100644 src/api/java/uristqwerty/CraftGuide/CraftType.java create mode 100644 src/api/java/uristqwerty/CraftGuide/DefaultRecipeTemplate.java create mode 100644 src/api/java/uristqwerty/CraftGuide/ForgeStuff.java create mode 100644 src/api/java/uristqwerty/CraftGuide/GuiCraftGuide.java create mode 100644 src/api/java/uristqwerty/CraftGuide/ItemCraftGuide.java create mode 100644 src/api/java/uristqwerty/CraftGuide/ItemSlotImplementationImplementation.java create mode 100644 src/api/java/uristqwerty/CraftGuide/MultipleItemFilter.java create mode 100644 src/api/java/uristqwerty/CraftGuide/Recipe.java create mode 100644 src/api/java/uristqwerty/CraftGuide/RecipeCache.java create mode 100644 src/api/java/uristqwerty/CraftGuide/RecipeGeneratorImplementation.java create mode 100644 src/api/java/uristqwerty/CraftGuide/ReflectionAPI.java create mode 100644 src/api/java/uristqwerty/CraftGuide/SingleItemFilter.java create mode 100644 src/api/java/uristqwerty/CraftGuide/StringItemFilter.java create mode 100644 src/api/java/uristqwerty/CraftGuide/UtilImplementationCommon.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/BasicRecipeFilter.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/ChanceSlot.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/CraftGuideAPIObject.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/CraftGuideRecipe.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/CraftGuideRecipeExtra1.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/EUSlot.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/ExtraSlot.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/InfoSlot.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/ItemFilter.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/ItemSlot.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/ItemSlotImplementation.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/LiquidFilter.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/LiquidSlot.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/NamedTexture.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/RecipeFilter.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/RecipeGenerator.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/RecipeProvider.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/RecipeTemplate.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/Renderer.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/Slot.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/SlotType.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/StackInfo.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/StackInfoSource.java create mode 100644 src/api/java/uristqwerty/CraftGuide/api/Util.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/CraftGuideClient.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/FilterDisplay.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/UtilImplementationClient.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/fml/CraftGuideClient_FML.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/ButtonTemplate.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/CraftTypeDisplay.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/CraftingDisplay.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/FilterSelectGrid.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiButton.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiCentredText.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiRenderer.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiResizeHandle.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiRightAlignedText.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiScrollBar.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiScrollableGrid.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiSlider.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiTabbedDisplay.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiText.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiTextInput.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/GuiVariableRowHeightGrid.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/IButtonListener.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/IRecipeCacheListener.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/ISliderListener.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/ITextInputListener.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/NamedTextureObject.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/CentredText.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/FloatingItemText.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/GridRect.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/Overlay.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/RenderMultiple.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/RightAlignedText.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/ShadedRect.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/RowCount.java create mode 100644 src/api/java/uristqwerty/CraftGuide/client/ui/ToggleButton.java create mode 100644 src/api/java/uristqwerty/CraftGuide/recipes/BrewingRecipes.java create mode 100644 src/api/java/uristqwerty/CraftGuide/recipes/DefaultRecipeProvider.java create mode 100644 src/api/java/uristqwerty/CraftGuide/recipes/ExtendedWorkbench.java create mode 100644 src/api/java/uristqwerty/CraftGuide/server/CraftGuideServer.java create mode 100644 src/api/java/uristqwerty/CraftGuide/server/UtilImplementationServer.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/Color.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/MutableRect.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/Rect.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/components/Button.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/components/DropdownSelector.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/components/GuiElement.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/components/Image.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/components/ScrollBar.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/components/ScrollPane.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/components/Slider.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/components/Window.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/editor/Editor.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/editor/EditorGui.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/editor/GuiElementMeta.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/editor/TextureDisplay.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/editor/TextureMeta.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/editor/TextureProperties.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/minecraft/Gui.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/minecraft/Image.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/minecraft/Text.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/rendering/Renderable.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/rendering/RendererBase.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/rendering/TexturedRect.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/BlankTexture.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/BorderedTexture.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/DynamicTexture.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/MultipleTextures.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/OffsetTexture.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/SolidColorTexture.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/SubTexture.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/Texture.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/TextureClip.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/texture/TintedTexture.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/Theme.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/ThemeManager.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/ColorTemplate.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/DependencyElement.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/ElementHandler.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/GenericHandler.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/ImageElement.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/ImageSourceElement.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/IntegerElement.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/ListTemplate.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/MetadataProperty.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/NullElement.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/RectTemplate.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/TextureElement.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/TextureSourceElement.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/ThemeReader.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/ValueTemplate.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/reader/ValueType.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/writer/ThemeWriter.java create mode 100644 src/api/java/uristqwerty/gui_craftguide/theme/writer/XMLThemeWriter.java create mode 100644 src/main/resources/mcmod.info create mode 100644 src/main/resources/pack.mcmeta diff --git a/.gitignore b/.gitignore index 625578b1b..8ef44175d 100644 --- a/.gitignore +++ b/.gitignore @@ -16,12 +16,6 @@ # include sourcecode !src/ -# include important mods required for running -# need to include run first to exclude all existing to add mods later on -!run/ -run/* -!run/mods - # include special libs like BC !libs/ @@ -29,5 +23,5 @@ run/* !.gitmodules !.gitignore -# include travis build -!.travis.yml \ No newline at end of file +# code format to reduce noise in git commits +!codeformat/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 27ce6085c..1b7311635 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ -[submodule "src/main/java/appeng/api"] - path = src/main/java/appeng/api - url = https://github.com/AppliedEnergistics/Applied-Energistics-2-API.git [submodule "src/main/resources/assets/appliedenergistics2/lang"] path = src/main/resources/assets/appliedenergistics2/lang url = https://github.com/AppliedEnergistics/AppliedEnergistics-2-Localization.git +[submodule "src/api/java/appeng/api"] + path = src/api/java/appeng/api + url = https://github.com/AppliedEnergistics/Applied-Energistics-2-API.git diff --git a/build.gradle b/build.gradle index 3998d45ce..73079fe8e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,12 @@ +apply plugin: 'forge' + +apply from: 'gradle/scripts/propertyloader.gradle' +apply from: 'gradle/scripts/dependencies.gradle' +apply from: 'gradle/scripts/artifacts.gradle' +apply from: 'gradle/scripts/autoinstallruntime.gradle' + buildscript { - repositories { - mavenCentral() maven { @@ -13,89 +18,35 @@ buildscript { name = "sonatype" url = "https://oss.sonatype.org/content/repositories/snapshots/" } - } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' } - -} - -apply plugin: 'forge' - -repositories { - - maven { - name 'CB Maven FS' - url "http://chickenbones.net/maven/" - } - - maven { - name "IC2 Player Repo" - url "http://maven.ic2.player.to/" - } - - maven { - name "Waila Mobius Repo" - url "http://mobiusstrip.eu/maven" - } - } configurations.all { resolutionStrategy.cacheDynamicVersionsFor 7200, 'hours' } -// define the properties file -ext.configFile = file "build.properties" - -configFile.withReader { - // read config. it shall from now on be referenced as simply config or as project.config - def prop = new Properties() - prop.load(it) - project.ext.config = new ConfigSlurper().parse prop -} - targetCompatibility = JavaVersion.VERSION_1_6 -version = config.version+"-"+config.aechannel+"-"+config.build +version = config.version + "-" + config.aechannel + "-" + config.build group = config.group archivesBaseName = config.archivesBaseName -dependencies { - - compile "net.industrial-craft:industrialcraft-2:${config.ic2_version}-experimental:dev" - - compile "codechicken:ForgeMultipart:${config.cb_minecraft_version}-${config.fmp_version}:dev" - compile "codechicken:CodeChickenLib:${config.cb_minecraft_version}-${config.code_chicken_lib_version}:dev" - compile "codechicken:CodeChickenCore:${config.cb_minecraft_version}-${config.code_chicken_core_version}:dev" - compile "codechicken:NotEnoughItems:${config.cb_minecraft_version}-${config.nei_version}:dev" - - compile "mcp.mobius.waila:Waila:${config.waila_version}" - - compile files(fileTree(dir: 'libs', includes: ['*.jar'])) - // compile "com.mod-buildcraft:buildcraft:6.0.8:dev" -} - - // Add Coremod Manifest jar { - manifest { attributes 'FMLCorePlugin': 'appeng.transformer.AppEngCore' attributes 'FMLCorePluginContainsFMLMod': 'true' } -} - -compileJava { - - exclude("appeng/api/integration/*") - exclude("appeng/integration/modules/helpers/dead/**") - exclude("appeng/integration/modules/dead/**") -// exclude("appeng/fmp/**") - + // specify which files are really included, can control which APIs should be in + include "appeng/**" + include "assets/**" + include "mcmod.info" + include "pack.mcmeta" } minecraft { @@ -104,85 +55,38 @@ minecraft { replace "@version@", project.version replace "@aechannel@", config.aechannel + // used when launching minecraft in dev env runDir = "run" } sourceSets { - main { - java { + srcDirs += 'src/api/java' srcDirs += 'src/main/java/' - exclude("src/api/**") } resources { - srcDir 'src/main/resources/' + srcDir "src/main/resources/" include "assets/appliedenergistics2/recipes/*.recipe", - "assets/appliedenergistics2/lang/*.lang", - "assets/appliedenergistics2/textures/blocks/*", - "assets/appliedenergistics2/textures/guis/*", - "assets/appliedenergistics2/textures/models/*", - "assets/appliedenergistics2/textures/items/*" + "assets/appliedenergistics2/lang/*.lang", + "assets/appliedenergistics2/textures/blocks/*", + "assets/appliedenergistics2/textures/guis/*", + "assets/appliedenergistics2/textures/models/*", + "assets/appliedenergistics2/textures/items/*" } } - } processResources { - // replace stuff in mcmod.info, nothing else from(sourceSets.main.resources.srcDirs) { include 'mcmod.info' expand 'version': project.version, 'mcversion': config.minecraft_version } - // copy everything else, thats not the mcmod.info + // copy everything else, that is not the mcmod.info from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' } -} - -task myJavadocs(type: Javadoc) { - source = sourceSets.api.java - include "appeng/api/**" - - classpath = configurations.compile -} - -task javadocJar(type: Jar, dependsOn: myJavadocs) { - classifier = 'javadoc' - from 'build/docs/javadoc/' -} - -task devJar(type: Jar) { - - manifest { - attributes 'FMLCorePlugin': 'appeng.transformer.AppEngCore' - attributes 'FMLCorePluginContainsFMLMod': 'true' - } - - from(sourceSets.main.output) { - include "appeng/**" - include "assets/**" - include 'mcmod.info' - } - - classifier = 'dev' -} - -task apiJar(type: Jar) { - - from(sourceSets.api.java) { - include "appeng/api/**" - } - - classifier = 'api' - -} - -artifacts { - archives devJar - archives apiJar - archives javadocJar } \ No newline at end of file diff --git a/gradle/scripts/artifacts.gradle b/gradle/scripts/artifacts.gradle new file mode 100644 index 000000000..a6956075f --- /dev/null +++ b/gradle/scripts/artifacts.gradle @@ -0,0 +1,43 @@ +task myJavadocs(type: Javadoc) { + source = sourceSets.api.java + include "appeng/api/**" + + classpath = configurations.compile +} + +task javadocJar(type: Jar, dependsOn: myJavadocs) { + classifier = 'javadoc' + from 'build/docs/javadoc/' +} + +task devJar(type: Jar) { + + manifest { + attributes 'FMLCorePlugin': 'appeng.transformer.AppEngCore' + attributes 'FMLCorePluginContainsFMLMod': 'true' + } + + from(sourceSets.main.output) { + include "appeng/**" + include "assets/**" + include 'mcmod.info' + } + + classifier = 'dev' +} + +task apiJar(type: Jar) { + + from(sourceSets.api.java) { + include "appeng/api/**" + } + + classifier = 'api' + +} + +artifacts { + archives devJar + archives apiJar + archives javadocJar +} \ No newline at end of file diff --git a/gradle/scripts/autoinstallruntime.gradle b/gradle/scripts/autoinstallruntime.gradle new file mode 100644 index 000000000..5e059cdf1 --- /dev/null +++ b/gradle/scripts/autoinstallruntime.gradle @@ -0,0 +1,34 @@ +// searches for NEI and Chicken stuff from compile set +// and adds them to the mods in run dir +task copyChicken(type: Copy, dependsOn: "extractUserDev") { + from { configurations.compile } + include "**/*Chicken*.jar", "**/*NotEnoughItems*.jar" + exclude "**/CodeChickenLib*" // because CCC downloads it anyways.. -_- + into file(minecraft.runDir + "/mods") + mustRunAfter "deobfBinJar" + mustRunAfter "repackMinecraft" +} +tasks.setupDevWorkspace.dependsOn copyChicken +tasks.setupDecompWorkspace.dependsOn copyChicken + +// same for BC hacked file +task copyBuildcraft(type: Copy, dependsOn: "extractUserDev") { + from { configurations.compile } + include "**/*buildcraft*.jar" + into file(minecraft.runDir + "/mods") + mustRunAfter "deobfBinJar" + mustRunAfter "repackMinecraft" +} +tasks.setupDevWorkspace.dependsOn copyBuildcraft +tasks.setupDecompWorkspace.dependsOn copyBuildcraft + +// and for IC2 because it needs its EMLJ jar +task copyIndustrialcraft(type: Copy, dependsOn: "extractUserDev") { + from { configurations.compile } + include "**/*industrialcraft*.jar" + into file(minecraft.runDir + "/mods") + mustRunAfter "deobfBinJar" + mustRunAfter "repackMinecraft" +} +tasks.setupDevWorkspace.dependsOn copyIndustrialcraft +tasks.setupDecompWorkspace.dependsOn copyIndustrialcraft \ No newline at end of file diff --git a/gradle/scripts/dependencies.gradle b/gradle/scripts/dependencies.gradle new file mode 100644 index 000000000..4055a1c25 --- /dev/null +++ b/gradle/scripts/dependencies.gradle @@ -0,0 +1,33 @@ +repositories { + + maven { + name 'CB Maven FS' + url "http://chickenbones.net/maven/" + } + + maven { + name "IC2 Player Repo" + url "http://maven.ic2.player.to/" + } + + maven { + name "Waila Mobius Repo" + url "http://mobiusstrip.eu/maven" + } + +} + +dependencies { + + compile "net.industrial-craft:industrialcraft-2:${config.ic2_version}-experimental:dev" + + compile "codechicken:ForgeMultipart:${config.cb_minecraft_version}-${config.fmp_version}:dev" + compile "codechicken:CodeChickenLib:${config.cb_minecraft_version}-${config.code_chicken_lib_version}:dev" + compile "codechicken:CodeChickenCore:${config.cb_minecraft_version}-${config.code_chicken_core_version}:dev" + compile "codechicken:NotEnoughItems:${config.cb_minecraft_version}-${config.nei_version}:dev" + + compile "mcp.mobius.waila:Waila:${config.waila_version}" + + // add hacked buildcraft jar to compile time (for facades) + compile fileTree(dir: 'libs', include: '*.jar') +} \ No newline at end of file diff --git a/gradle/scripts/propertyloader.gradle b/gradle/scripts/propertyloader.gradle new file mode 100644 index 000000000..14d81448c --- /dev/null +++ b/gradle/scripts/propertyloader.gradle @@ -0,0 +1,9 @@ +// define the properties file +ext.configFile = file "build.properties" + +configFile.withReader { + // read config. it shall from now on be referenced as simply config or as project.config + def prop = new Properties() + prop.load(it) + project.ext.config = new ConfigSlurper().parse prop +} \ No newline at end of file diff --git a/libs/buildcraft-dev.jar b/libs/buildcraft-dev.jar new file mode 100644 index 0000000000000000000000000000000000000000..2c468fe7749327a48f5fd45d99358fdd6f9b63ac GIT binary patch literal 1285933 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 eeWlx_V)mUrl=#LqT6A5w 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

nze6cZqw#C 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

iA@sUgqrh7`+*R_fQe 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

nj( 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

!On51pmbHs+}O91!HnNI|r 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� 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

6yO@5PHN5<6Q*1~))K| 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%0Derk4$|$ZE^XeK5-$#l%*7xvDw$vL`d?vC$| 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Ðz&5AizYu|4@&vi>#Pv)FNP;ctm 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 capacity) { + energy = capacity; + } + return this; + } + + public NBTTagCompound writeToNBT(NBTTagCompound nbt) { + + if (energy < 0) { + energy = 0; + } + nbt.setInteger("Energy", energy); + return nbt; + } + + public void setCapacity(int capacity) { + + this.capacity = capacity; + + if (energy > capacity) { + energy = capacity; + } + } + + public void setMaxTransfer(int maxTransfer) { + + setMaxReceive(maxTransfer); + setMaxExtract(maxTransfer); + } + + public void setMaxReceive(int maxReceive) { + + this.maxReceive = maxReceive; + } + + public void setMaxExtract(int maxExtract) { + + this.maxExtract = maxExtract; + } + + public int getMaxReceive() { + + return maxReceive; + } + + public int getMaxExtract() { + + return maxExtract; + } + + /** + * This function is included to allow for server -> client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers are + * guaranteed to have it. + * + * @param energy + */ + public void setEnergyStored(int energy) { + + this.energy = energy; + + if (this.energy > capacity) { + this.energy = capacity; + } else if (this.energy < 0) { + this.energy = 0; + } + } + + /** + * This function is included to allow the containing tile to directly and efficiently modify the energy contained in the EnergyStorage. Do not rely on this + * externally, as not all IEnergyHandlers are guaranteed to have it. + * + * @param energy + */ + public void modifyEnergyStored(int energy) { + + this.energy += energy; + + if (this.energy > capacity) { + this.energy = capacity; + } else if (this.energy < 0) { + this.energy = 0; + } + } + + /* IEnergyStorage */ + @Override + public int receiveEnergy(int maxReceive, boolean simulate) { + + int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive)); + + if (!simulate) { + energy += energyReceived; + } + return energyReceived; + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate) { + + int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract)); + + if (!simulate) { + energy -= energyExtracted; + } + return energyExtracted; + } + + @Override + public int getEnergyStored() { + + return energy; + } + + @Override + public int getMaxEnergyStored() { + + return capacity; + } + +} diff --git a/src/api/java/cofh/api/energy/IEnergyConnection.java b/src/api/java/cofh/api/energy/IEnergyConnection.java new file mode 100644 index 000000000..63faffb9f --- /dev/null +++ b/src/api/java/cofh/api/energy/IEnergyConnection.java @@ -0,0 +1,21 @@ +package cofh.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this interface on TileEntities which should connect to energy transportation blocks. This is intended for blocks which generate energy but do not + * accept it; otherwise just use IEnergyHandler. + * + * Note that {@link IEnergyHandler} is an extension of this. + * + * @author King Lemming + * + */ +public interface IEnergyConnection { + + /** + * Returns TRUE if the TileEntity can connect on a given side. + */ + boolean canConnectEnergy(ForgeDirection from); + +} diff --git a/src/api/java/cofh/api/energy/IEnergyContainerItem.java b/src/api/java/cofh/api/energy/IEnergyContainerItem.java new file mode 100644 index 000000000..0bcfda600 --- /dev/null +++ b/src/api/java/cofh/api/energy/IEnergyContainerItem.java @@ -0,0 +1,52 @@ +package cofh.api.energy; + +import net.minecraft.item.ItemStack; + +/** + * Implement this interface on Item classes that support external manipulation of their internal energy storages. + * + * A reference implementation is provided {@link ItemEnergyContainer}. + * + * @author King Lemming + * + */ +public interface IEnergyContainerItem { + + /** + * Adds energy to a container item. Returns the quantity of energy that was accepted. This should always return 0 if the item cannot be externally charged. + * + * @param container + * ItemStack to be charged. + * @param maxReceive + * Maximum amount of energy to be sent into the item. + * @param simulate + * If TRUE, the charge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) received by the item. + */ + int receiveEnergy(ItemStack container, int maxReceive, boolean simulate); + + /** + * Removes energy from a container item. Returns the quantity of energy that was removed. This should always return 0 if the item cannot be externally + * discharged. + * + * @param container + * ItemStack to be discharged. + * @param maxExtract + * Maximum amount of energy to be extracted from the item. + * @param simulate + * If TRUE, the discharge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) extracted from the item. + */ + int extractEnergy(ItemStack container, int maxExtract, boolean simulate); + + /** + * Get the amount of energy currently stored in the container item. + */ + int getEnergyStored(ItemStack container); + + /** + * Get the max amount of energy that can be stored in the container item. + */ + int getMaxEnergyStored(ItemStack container); + +} diff --git a/src/api/java/cofh/api/energy/IEnergyHandler.java b/src/api/java/cofh/api/energy/IEnergyHandler.java new file mode 100644 index 000000000..3aaf81a7d --- /dev/null +++ b/src/api/java/cofh/api/energy/IEnergyHandler.java @@ -0,0 +1,51 @@ +package cofh.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this interface on TileEntities which should handle energy, generally storing it in one or more internal {@link IEnergyStorage} objects. + * + * A reference implementation is provided {@link TileEnergyHandler}. + * + * @author King Lemming + * + */ +public interface IEnergyHandler extends IEnergyConnection { + + /** + * Add energy to an IEnergyHandler, internal distribution is left entirely to the IEnergyHandler. + * + * @param from + * Orientation the energy is received from. + * @param maxReceive + * Maximum amount of energy to receive. + * @param simulate + * If TRUE, the charge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) received. + */ + int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate); + + /** + * Remove energy from an IEnergyHandler, internal distribution is left entirely to the IEnergyHandler. + * + * @param from + * Orientation the energy is extracted from. + * @param maxExtract + * Maximum amount of energy to extract. + * @param simulate + * If TRUE, the extraction will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) extracted. + */ + int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate); + + /** + * Returns the amount of energy currently stored. + */ + int getEnergyStored(ForgeDirection from); + + /** + * Returns the maximum amount of energy that can be stored. + */ + int getMaxEnergyStored(ForgeDirection from); + +} diff --git a/src/api/java/cofh/api/energy/IEnergyStorage.java b/src/api/java/cofh/api/energy/IEnergyStorage.java new file mode 100644 index 000000000..1e84bc221 --- /dev/null +++ b/src/api/java/cofh/api/energy/IEnergyStorage.java @@ -0,0 +1,45 @@ +package cofh.api.energy; + +/** + * An energy storage is the unit of interaction with Energy inventories. + * + * A reference implementation can be found at {@link EnergyStorage}. + * + * @author King Lemming + * + */ +public interface IEnergyStorage { + + /** + * Adds energy to the storage. Returns quantity of energy that was accepted. + * + * @param maxReceive + * Maximum amount of energy to be inserted. + * @param simulate + * If TRUE, the insertion will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) accepted by the storage. + */ + int receiveEnergy(int maxReceive, boolean simulate); + + /** + * Removes energy from the storage. Returns quantity of energy that was removed. + * + * @param maxExtract + * Maximum amount of energy to be extracted. + * @param simulate + * If TRUE, the extraction will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) extracted from the storage. + */ + int extractEnergy(int maxExtract, boolean simulate); + + /** + * Returns the amount of energy currently stored. + */ + int getEnergyStored(); + + /** + * Returns the maximum amount of energy that can be stored. + */ + int getMaxEnergyStored(); + +} diff --git a/src/api/java/cofh/api/energy/ItemEnergyContainer.java b/src/api/java/cofh/api/energy/ItemEnergyContainer.java new file mode 100644 index 000000000..055ae45bc --- /dev/null +++ b/src/api/java/cofh/api/energy/ItemEnergyContainer.java @@ -0,0 +1,110 @@ +package cofh.api.energy; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +/** + * Reference implementation of {@link IEnergyContainerItem}. Use/extend this or implement your own. + * + * @author King Lemming + * + */ +public class ItemEnergyContainer extends Item implements IEnergyContainerItem { + + protected int capacity; + protected int maxReceive; + protected int maxExtract; + + public ItemEnergyContainer() { + + } + + public ItemEnergyContainer(int capacity) { + + this(capacity, capacity, capacity); + } + + public ItemEnergyContainer(int capacity, int maxTransfer) { + + this(capacity, maxTransfer, maxTransfer); + } + + public ItemEnergyContainer(int capacity, int maxReceive, int maxExtract) { + + this.capacity = capacity; + this.maxReceive = maxReceive; + this.maxExtract = maxExtract; + } + + public ItemEnergyContainer setCapacity(int capacity) { + + this.capacity = capacity; + return this; + } + + public void setMaxTransfer(int maxTransfer) { + + setMaxReceive(maxTransfer); + setMaxExtract(maxTransfer); + } + + public void setMaxReceive(int maxReceive) { + + this.maxReceive = maxReceive; + } + + public void setMaxExtract(int maxExtract) { + + this.maxExtract = maxExtract; + } + + /* IEnergyContainerItem */ + @Override + public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { + + if (container.stackTagCompound == null) { + container.stackTagCompound = new NBTTagCompound(); + } + int energy = container.stackTagCompound.getInteger("Energy"); + int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive)); + + if (!simulate) { + energy += energyReceived; + container.stackTagCompound.setInteger("Energy", energy); + } + return energyReceived; + } + + @Override + public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { + + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { + return 0; + } + int energy = container.stackTagCompound.getInteger("Energy"); + int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract)); + + if (!simulate) { + energy -= energyExtracted; + container.stackTagCompound.setInteger("Energy", energy); + } + return energyExtracted; + } + + @Override + public int getEnergyStored(ItemStack container) { + + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { + return 0; + } + return container.stackTagCompound.getInteger("Energy"); + } + + @Override + public int getMaxEnergyStored(ItemStack container) { + + return capacity; + } + +} diff --git a/src/api/java/cofh/api/energy/TileEnergyHandler.java b/src/api/java/cofh/api/energy/TileEnergyHandler.java new file mode 100644 index 000000000..a7fabeb77 --- /dev/null +++ b/src/api/java/cofh/api/energy/TileEnergyHandler.java @@ -0,0 +1,62 @@ +package cofh.api.energy; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Reference implementation of {@link IEnergyHandler}. Use/extend this or implement your own. + * + * @author King Lemming + * + */ +public class TileEnergyHandler extends TileEntity implements IEnergyHandler { + + protected EnergyStorage storage = new EnergyStorage(32000); + + @Override + public void readFromNBT(NBTTagCompound nbt) { + + super.readFromNBT(nbt); + storage.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + + super.writeToNBT(nbt); + storage.writeToNBT(nbt); + } + + /* IEnergyHandler */ + @Override + public boolean canConnectEnergy(ForgeDirection from) { + + return true; + } + + @Override + public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) { + + return storage.receiveEnergy(maxReceive, simulate); + } + + @Override + public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) { + + return storage.extractEnergy(maxExtract, simulate); + } + + @Override + public int getEnergyStored(ForgeDirection from) { + + return storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(ForgeDirection from) { + + return storage.getMaxEnergyStored(); + } + +} diff --git a/src/api/java/coloredlightscore/src/api/CLApi.java b/src/api/java/coloredlightscore/src/api/CLApi.java new file mode 100644 index 000000000..bc74e6ec8 --- /dev/null +++ b/src/api/java/coloredlightscore/src/api/CLApi.java @@ -0,0 +1,269 @@ +package coloredlightscore.src.api; + +import java.util.Random; + +import net.minecraft.block.Block; +import cpw.mods.fml.common.FMLLog; + +/** + * Public API for ColoredLightsCore + * + * @author CptSpaceToaster + * + */ +public class CLApi +{ + + public static float l[] = new float[] { 0F, 1F / 15, 2F / 15, 3F / 15, 4F / 15, 5F / 15, 6F / 15, 7F / 15, 8F / 15, 9F / 15, 10F / 15, 11F / 15, 12F / 15, + 13F / 15, 14F / 15, 1F }; + + public static int r[] = new int[] { 0, 15, 0, 8, 0, 10, 0, 5, 10, 15, 8, 15, 0, 15, 15, 15 }; + public static int g[] = new int[] { 0, 0, 15, 3, 0, 0, 15, 5, 10, 10, 15, 15, 8, 0, 12, 15 }; + public static int b[] = new int[] { 0, 0, 0, 0, 15, 15, 15, 5, 10, 13, 0, 0, 15, 15, 10, 15 }; + + public static Random rand = new Random(); + + /** + * Computes a 20-bit lighting word, containing red, green, blue, and brightness settings. Allows overriding of the + * Minecraft brightness value. This value can be used directly for Block.lightValue + * + * Word format: 0RRRR 0GGGG 0BBBB 0LLLL + * + * @param r + * Red intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param g + * Green intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param b + * Blue intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param currentLightValue + * The existing lightValue of a block. Only the lower-most 4 bits of this parameter are used. + * @return Integer describing RGBL color for a block + */ + public static int makeRGBLightValue(float r, float g, float b, float currentLightValue) + { + // Clamp color channels + if ( r < 0.0f ) + r = 0.0f; + else if ( r > 1.0f ) + r = 1.0f; + + if ( g < 0.0f ) + g = 0.0f; + else if ( g > 1.0f ) + g = 1.0f; + + if ( b < 0.0f ) + b = 0.0f; + else if ( b > 1.0f ) + b = 1.0f; + + // if (currentLightValue != Math.max(r, Math.max(g, b))) { + // FMLLog.warning("One of the color value should be equal to Current Light Brightness, but not exceed it"); + // FMLLog.warning("r: " + r + " g: " + g + " b: " + b + " l: " + currentLightValue); + // } + + int brightness = (int) (currentLightValue * 15.0f); + brightness &= 15; + + return brightness | ((((int) (15.0F * b)) << 15) + (((int) (15.0F * g)) << 10) + (((int) (15.0F * r)) << 5)); + } + + /** + * Computes a 20-bit lighting word, containing red, green, blue, and brightness settings. Allows overriding of the + * Minecraft brightness value. This value can be used directly for Block.lightValue + * + * Word format: 0RRRR 0GGGG 0BBBB 0LLLL + * + * @param r + * Red intensity, 0 to 15. Resolution is 4 bits. + * @param g + * Green intensity, 0 to 15. Resolution is 4 bits. + * @param b + * Blue intensity, 0 to 15. Resolution is 4 bits. + * @param brightness + * The existing lightValue of a block. Only the lower-most 4 bits of this parameter are used. + * @return Integer describing RGBL color for a block + */ + public static int makeRGBLightValue(int r, int g, int b, int brightness) + { + // Clamp color channels + if ( r < 0 ) + r = 0; + else if ( r > 15 ) + r = 15; + + if ( g < 0 ) + g = 0; + else if ( g > 15 ) + g = 15; + + if ( b < 0 ) + b = 0; + else if ( b > 15 ) + b = 15; + + brightness &= 15; + + if ( brightness != Math.max( r, Math.max( g, b ) ) ) + { + FMLLog.warning( "One of the color value should be equal to Current Light Brightness, but not exceed it" ); + FMLLog.warning( "r: " + r + " g: " + g + " b: " + b + " l: " + brightness ); + } + + return brightness | ((b << 15) + (g << 10) + (r << 5)); + } + + /** + * Computes a 20-bit lighting word, containing red, green, blue settings, and brightness settings. Automatically + * computes the Minecraft brightness value using the brightest of the r, g and b channels. This value can be used + * directly for Block.lightValue + * + * Word format: 0RRRR 0GGGG 0BBBB 0LLLL + * + * @param r + * Red intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param g + * Green intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param b + * Blue intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @return Integer describing RGB color for a block + */ + public static int makeRGBLightValue(float r, float g, float b) + { + // Clamp color channels + if ( r < 0.0f ) + r = 0.0f; + else if ( r > 1.0f ) + r = 1.0f; + + if ( g < 0.0f ) + g = 0.0f; + else if ( g > 1.0f ) + g = 1.0f; + + if ( b < 0.0f ) + b = 0.0f; + else if ( b > 1.0f ) + b = 1.0f; + + int brightness = (int) (15.0f * Math.max( Math.max( r, g ), b )); + return brightness | ((((int) (15.0F * b)) << 15) + (((int) (15.0F * g)) << 10) + (((int) (15.0F * r)) << 5)); + } + + /** + * Computes a 20-bit lighting word, containing red, green, blue settings, and brightness settings. Automatically + * computes the Minecraft brightness value using the brightest of the r, g and b channels. This value can be used + * directly for Block.lightValue + * + * Word format: 0RRRR 0GGGG 0BBBB 0LLLL + * + * @param r + * Red intensity, 0 to 15. Resolution is 4 bits. + * @param g + * Green intensity, 0 to 15. Resolution is 4 bits. + * @param b + * Blue intensity, 0 to 15. Resolution is 4 bits. + * @return Integer describing RGB color for a block + */ + public static int makeRGBLightValue(int r, int g, int b) + { + // Clamp color channels + if ( r < 0 ) + r = 0; + else if ( r > 15 ) + r = 15; + + if ( g < 0 ) + g = 0; + else if ( g > 15 ) + g = 15; + + if ( b < 0 ) + b = 0; + else if ( b > 15 ) + b = 15; + + int brightness = Math.max( Math.max( r, g ), b ); + return brightness | ((b << 15) + (g << 10) + (r << 5)); + } + + /** + * Sets the lighting colors for a given block. + * + * @param block + * The block to set color on + * @param r + * Red intensity, 0 to 15. Resolution is 4 bits. + * @param g + * Green intensity, 0 to 15. Resolution is 4 bits. + * @param b + * Blue intensity, 0 to 15. Resolution is 4 bits. + * @param lightValue + * The Minecraft brightness to set for the block, 0 to 15. + * @return Reference to the block passed in. + */ + public static Block setBlockColorRGB(Block block, int r, int g, int b, int lightValue) + { + // block.lightValue = makeRGBLightValue(r, g, b, lightValue); + return block; + } + + /** + * Sets the lighting colors for a given block. + * + * @param block + * The block to set color on + * @param r + * Red intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param g + * Green intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param b + * Blue intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param lightValue + * The Minecraft brightness to set for the block, 0.0f to 1.0f. + * @return Reference to the block passed in. + */ + public static Block setBlockColorRGB(Block block, float r, float g, float b, float lightValue) + { + // block.lightValue = makeRGBLightValue(r, g, b, lightValue); + return block; + } + + /** + * Sets the lighting colors for a given block. Does not alter/recompute the brightness. + * + * @param block + * The block to set color on + * @param r + * Red intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param g + * Green intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param b + * Blue intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @return Reference to the block passed in. + */ + public static Block setBlockColorRGB(Block block, int r, int g, int b) + { + // block.lightValue = makeRGBLightValue( r, g, b, block.lightValue ); + return block; + } + + /** + * Sets the lighting colors for a given block. Does not alter/recompute the brightness. + * + * @param block + * The block to set color on + * @param r + * Red intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param g + * Green intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @param b + * Blue intensity, 0.0f to 1.0f. Resolution is 4 bits. + * @return Reference to the block passed in. + */ + public static Block setBlockColorRGB(Block block, float r, float g, float b) + { + // block.lightValue = makeRGBLightValue( r, g, b, block.lightValue / 15.0f ); + return block; + } +} \ No newline at end of file diff --git a/src/api/java/gregtechmod/api/interfaces/IDigitalChest.java b/src/api/java/gregtechmod/api/interfaces/IDigitalChest.java new file mode 100644 index 000000000..3c3fb6b0e --- /dev/null +++ b/src/api/java/gregtechmod/api/interfaces/IDigitalChest.java @@ -0,0 +1,29 @@ +package gregtechmod.api.interfaces; + +import net.minecraft.item.ItemStack; + +/** + * You are allowed to include this File in your Download, as i will not change it. + */ +public interface IDigitalChest extends IHasWorldObjectAndCoords { + /** + * Is this even a TileEntity of a Digital Chest? + * I need things like this Function for MetaTileEntities, you MUST check this!!! + * Do not assume that it's a Digital Chest or similar Device, when it just implements this Interface. + */ + public boolean isDigitalChest(); + /** + * Gives an Array of Stacks with Size (of all the Data-stored Items) of the correspondent Item kinds (regular QChests have only one) + * Does NOT include the 64 "ready" Items inside the Slots, and neither the 128 Items in the overflow Buffer. + */ + public ItemStack[] getStoredItemData(); + /** + * A generic Interface for just setting the amount of contained Items + */ + public void setItemCount(int aCount); + + /** + * Gets the maximum Item count for this QChest alike Storage. This applies to the Data-Storage, not for the up to 192 buffered Items! + */ + public int getMaxItemCount(); +} \ No newline at end of file diff --git a/src/api/java/gregtechmod/api/interfaces/IHasWorldObjectAndCoords.java b/src/api/java/gregtechmod/api/interfaces/IHasWorldObjectAndCoords.java new file mode 100644 index 000000000..f932507e8 --- /dev/null +++ b/src/api/java/gregtechmod/api/interfaces/IHasWorldObjectAndCoords.java @@ -0,0 +1,75 @@ +package gregtechmod.api.interfaces; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; + +/** + * This is a bunch of Functions my TileEntities provide, to make life much easier, and to get rid of internal TileEntity stuff. + */ +public interface IHasWorldObjectAndCoords { + public World getWorld(); + public int getXCoord(); + public int getYCoord(); + public int getZCoord(); + + public boolean isServerSide(); + public boolean isClientSide(); + + public int getRandomNumber(int aRange); + + public TileEntity getTileEntity(int aX, int aY, int aZ); + public TileEntity getTileEntityOffset(int aX, int aY, int aZ); + public TileEntity getTileEntityAtSide(byte aSide); + public TileEntity getTileEntityAtSideAndDistance(byte aSide, int aDistance); + + public IInventory getIInventory(int aX, int aY, int aZ); + public IInventory getIInventoryOffset(int aX, int aY, int aZ); + public IInventory getIInventoryAtSide(byte aSide); + public IInventory getIInventoryAtSideAndDistance(byte aSide, int aDistance); + + public short getBlockID(int aX, int aY, int aZ); + public short getBlockIDOffset(int aX, int aY, int aZ); + public short getBlockIDAtSide(byte aSide); + public short getBlockIDAtSideAndDistance(byte aSide, int aDistance); + + public byte getMetaID(int aX, int aY, int aZ); + public byte getMetaIDOffset(int aX, int aY, int aZ); + public byte getMetaIDAtSide(byte aSide); + public byte getMetaIDAtSideAndDistance(byte aSide, int aDistance); + + public byte getLightLevel(int aX, int aY, int aZ); + public byte getLightLevelOffset(int aX, int aY, int aZ); + public byte getLightLevelAtSide(byte aSide); + public byte getLightLevelAtSideAndDistance(byte aSide, int aDistance); + + public boolean getSky(int aX, int aY, int aZ); + public boolean getSkyOffset(int aX, int aY, int aZ); + public boolean getSkyAtSide(byte aSide); + public boolean getSkyAtSideAndDistance(byte aSide, int aDistance); + + public BiomeGenBase getBiome(int aX, int aZ); + + /** + * Function of the regular TileEntity + */ + public void writeToNBT(NBTTagCompound aNBT); + + /** + * Function of the regular TileEntity + */ + public void readFromNBT(NBTTagCompound aNBT); + + /** + * Function of the regular TileEntity + */ + public boolean isInvalid(); + + /** + * Opens GUI-ID of any Mod + */ + public void openGUI(EntityPlayer aPlayer, int aID, Object aMod); +} \ No newline at end of file diff --git a/src/api/java/invtweaks/api/IItemTree.java b/src/api/java/invtweaks/api/IItemTree.java new file mode 100644 index 000000000..5b6c0a805 --- /dev/null +++ b/src/api/java/invtweaks/api/IItemTree.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2013 Andrew Crocker + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package invtweaks.api; + +import java.util.Collection; +import java.util.List; +import java.util.Random; + +public interface IItemTree { + public void registerOre(String category, String name, String oreName, int order); + + boolean matches(List items, String keyword); + + boolean isKeywordValid(String keyword); + + Collection getAllCategories(); + + IItemTreeCategory getRootCategory(); + + IItemTreeCategory getCategory(String keyword); + + boolean isItemUnknown(String id, int damage); + + List getItems(String id, int damage); + + List getItems(String name); + + IItemTreeItem getRandomItem(Random r); + + boolean containsItem(String name); + + boolean containsCategory(String name); + + void setRootCategory(IItemTreeCategory category); + + IItemTreeCategory addCategory(String parentCategory, String newCategory) throws NullPointerException; + + void addCategory(String parentCategory, IItemTreeCategory newCategory) throws NullPointerException; + + IItemTreeItem addItem(String parentCategory, String name, String id, int damage, int order) + throws NullPointerException; + + void addItem(String parentCategory, IItemTreeItem newItem) throws NullPointerException; + + int getKeywordDepth(String keyword); + + int getKeywordOrder(String keyword); +} diff --git a/src/api/java/invtweaks/api/IItemTreeCategory.java b/src/api/java/invtweaks/api/IItemTreeCategory.java new file mode 100644 index 000000000..f1b5e9554 --- /dev/null +++ b/src/api/java/invtweaks/api/IItemTreeCategory.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2013 Andrew Crocker + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package invtweaks.api; + +import java.util.Collection; +import java.util.List; + +public interface IItemTreeCategory { + boolean contains(IItemTreeItem item); + + void addCategory(IItemTreeCategory category); + + void addItem(IItemTreeItem item); + + Collection getSubCategories(); + + Collection> getItems(); + + String getName(); + + int getCategoryOrder(); + + int findCategoryOrder(String keyword); + + int findKeywordDepth(String keyword); +} diff --git a/src/api/java/invtweaks/api/IItemTreeItem.java b/src/api/java/invtweaks/api/IItemTreeItem.java new file mode 100644 index 000000000..2b6ae2db5 --- /dev/null +++ b/src/api/java/invtweaks/api/IItemTreeItem.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2013 Andrew Crocker + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package invtweaks.api; + +public interface IItemTreeItem extends Comparable { + String getName(); + + String getId(); + + int getDamage(); + + int getOrder(); +} diff --git a/src/api/java/invtweaks/api/IItemTreeListener.java b/src/api/java/invtweaks/api/IItemTreeListener.java new file mode 100644 index 000000000..73a5815d5 --- /dev/null +++ b/src/api/java/invtweaks/api/IItemTreeListener.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2013 Andrew Crocker + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package invtweaks.api; + +import java.util.EventListener; + +public interface IItemTreeListener extends EventListener { + void onTreeLoaded(IItemTree tree); +} diff --git a/src/api/java/invtweaks/api/InvTweaksAPI.java b/src/api/java/invtweaks/api/InvTweaksAPI.java new file mode 100644 index 000000000..2e1573f70 --- /dev/null +++ b/src/api/java/invtweaks/api/InvTweaksAPI.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2013 Andrew Crocker + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package invtweaks.api; + +import net.minecraft.item.ItemStack; + +/** + * Interface to access functions exposed by Inventory Tweaks + *

+ * The main @Mod instance of the mod implements this interface, so a refernce to it can + * be obtained via @Instance("inventorytweaks") or methods in cpw.mods.fml.common.Loader + *

+ * All of these functions currently have no effect if called on a dedicated server. + */ +public interface InvTweaksAPI { + /** + * Add a listener for ItemTree load events + * + * @param listener + */ + void addOnLoadListener(IItemTreeListener listener); + + /** + * Remove a listener for ItemTree load events + * + * @param listener + * @return true if the listener was previously added + */ + boolean removeOnLoadListener(IItemTreeListener listener); + + /** + * Toggle sorting shortcut state. + * + * @param enabled + */ + void setSortKeyEnabled(boolean enabled); + + /** + * Toggle sorting shortcut supression. + * Unlike setSortKeyEnabled, this flag is automatically cleared when GUIs are closed. + * + * @param enabled + */ + void setTextboxMode(boolean enabled); + + /** + * Compare two items using the default (non-rule based) algorithm, + * sutable for an implementation of Comparator<ItemStack>. + * + * @param i + * @param j + * @return A value with a sign representing the relative order of the item stacks + */ + int compareItems(ItemStack i, ItemStack j); +} diff --git a/src/api/java/invtweaks/api/container/ChestContainer.java b/src/api/java/invtweaks/api/container/ChestContainer.java new file mode 100644 index 000000000..3bd57e1b1 --- /dev/null +++ b/src/api/java/invtweaks/api/container/ChestContainer.java @@ -0,0 +1,28 @@ +package invtweaks.api.container; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * A marker for containers that have a chest-like persistant storage component. Enables the Inventroy Tweaks sorting + * buttons for this container. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ChestContainer { + // Size of a chest row + int rowSize() default 9; + + // Uses 'large chest' mode for sorting buttons + // (Renders buttons vertically down the right side of the GUI) + boolean isLargeChest() default false; + + // Annotation for method to get size of a chest row if it is not a fixed size for this container class + // Signature int func() + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface RowSizeCallback { + } +} diff --git a/src/api/java/invtweaks/api/container/ContainerSection.java b/src/api/java/invtweaks/api/container/ContainerSection.java new file mode 100644 index 000000000..e80a987fb --- /dev/null +++ b/src/api/java/invtweaks/api/container/ContainerSection.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2013 Andrew Crocker + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package invtweaks.api.container; + +/** + * Names for specific parts of containers. For unknown container types (such as mod containers), only INVENTORY and + * CHEST sections are available. + */ +public enum ContainerSection { + /** + * The player's inventory + */ + INVENTORY, + /** + * The player's inventory (only the hotbar) + */ + INVENTORY_HOTBAR, + /** + * The player's inventory (all except the hotbar) + */ + INVENTORY_NOT_HOTBAR, + /** + * The chest or dispenser contents. Also used for unknown container contents. + */ + CHEST, + /** + * The crafting input + */ + CRAFTING_IN, + /** + * The crafting input, for containters that store it internally + */ + CRAFTING_IN_PERSISTENT, + /** + * The crafting output + */ + CRAFTING_OUT, + /** + * The armor slots + */ + ARMOR, + /** + * The furnace input + */ + FURNACE_IN, + /** + * The furnace output + */ + FURNACE_OUT, + /** + * The furnace fuel + */ + FURNACE_FUEL, + /** + * The enchantment table slot + */ + ENCHANTMENT, + /** + * The three bottles slots in brewing tables + */ + BREWING_BOTTLES, + /** + * The top slot in brewing tables + */ + BREWING_INGREDIENT +} diff --git a/src/api/java/invtweaks/api/container/ContainerSectionCallback.java b/src/api/java/invtweaks/api/container/ContainerSectionCallback.java new file mode 100644 index 000000000..379206b37 --- /dev/null +++ b/src/api/java/invtweaks/api/container/ContainerSectionCallback.java @@ -0,0 +1,16 @@ +package invtweaks.api.container; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * A marker for a method to call which returns the set of ContainerSections for this container. + *

+ * Signature of the method should be Map> func() + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface ContainerSectionCallback { +} diff --git a/src/api/java/invtweaks/api/container/IgnoreContainer.java b/src/api/java/invtweaks/api/container/IgnoreContainer.java new file mode 100644 index 000000000..4102ec92b --- /dev/null +++ b/src/api/java/invtweaks/api/container/IgnoreContainer.java @@ -0,0 +1,15 @@ +package invtweaks.api.container; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Use this annotation to override inherited annotation properties and mark a Container as unsortable. + * This effect is inherited as well. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface IgnoreContainer { +} \ No newline at end of file diff --git a/src/api/java/invtweaks/api/container/InventoryContainer.java b/src/api/java/invtweaks/api/container/InventoryContainer.java new file mode 100644 index 000000000..d5a45b912 --- /dev/null +++ b/src/api/java/invtweaks/api/container/InventoryContainer.java @@ -0,0 +1,20 @@ +package invtweaks.api.container; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * A marker for containers that need special treatment, such as crafting inputs or alternate player inventory positions, + * but do not have a chest-like component. + *

+ * Does not enable the Inventory Tweaks sorting buttons for this container. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface InventoryContainer { + // Set to true if the Inventory Tweaks options button should be shown for this container. + // (For instance, if you are replacing a vanilla container such as the player's inventory) + boolean showOptions() default true; +} diff --git a/src/api/java/mekanism/api/AdvancedInput.java b/src/api/java/mekanism/api/AdvancedInput.java new file mode 100644 index 000000000..8d2859af9 --- /dev/null +++ b/src/api/java/mekanism/api/AdvancedInput.java @@ -0,0 +1,28 @@ +package mekanism.api; + +import mekanism.api.gas.Gas; +import mekanism.common.util.StackUtils; +import net.minecraft.item.ItemStack; + +public class AdvancedInput +{ + public ItemStack itemStack; + + public Gas gasType; + + public AdvancedInput(ItemStack item, Gas gas) + { + itemStack = item; + gasType = gas; + } + + public boolean isValid() + { + return itemStack != null && gasType != null; + } + + public boolean matches(AdvancedInput input) + { + return StackUtils.equalsWildcard(itemStack, input.itemStack) && input.itemStack.stackSize >= itemStack.stackSize; + } +} diff --git a/src/api/java/mekanism/api/BlockInfo.java b/src/api/java/mekanism/api/BlockInfo.java new file mode 100644 index 000000000..50c990f27 --- /dev/null +++ b/src/api/java/mekanism/api/BlockInfo.java @@ -0,0 +1,38 @@ +package mekanism.api; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +public class BlockInfo +{ + public Block block; + public int meta; + + public BlockInfo(Block b, int j) + { + block = b; + meta = j; + } + + public static BlockInfo get(ItemStack stack) + { + return new BlockInfo(Block.getBlockFromItem(stack.getItem()), stack.getItemDamage()); + } + + @Override + public boolean equals(Object obj) + { + return obj instanceof BlockInfo && + ((BlockInfo)obj).block == block && + ((BlockInfo)obj).meta == meta; + } + + @Override + public int hashCode() + { + int code = 1; + code = 31 * code + block.getUnlocalizedName().hashCode(); + code = 31 * code + meta; + return code; + } +} \ No newline at end of file diff --git a/src/api/java/mekanism/api/ChanceOutput.java b/src/api/java/mekanism/api/ChanceOutput.java new file mode 100644 index 000000000..97ff0b7de --- /dev/null +++ b/src/api/java/mekanism/api/ChanceOutput.java @@ -0,0 +1,49 @@ +package mekanism.api; + +import java.util.Random; + +import mekanism.common.util.StackUtils; +import net.minecraft.item.ItemStack; + +public class ChanceOutput +{ + private static Random rand = new Random(); + + public ItemStack primaryOutput; + + public ItemStack secondaryOutput; + + public double secondaryChance; + + public ChanceOutput(ItemStack primary, ItemStack secondary, double chance) + { + primaryOutput = primary; + secondaryOutput = secondary; + secondaryChance = chance; + } + + public ChanceOutput(ItemStack primary) + { + primaryOutput = primary; + } + + public boolean checkSecondary() + { + return rand.nextDouble() <= secondaryChance; + } + + public boolean hasPrimary() + { + return primaryOutput != null; + } + + public boolean hasSecondary() + { + return secondaryOutput != null; + } + + public ChanceOutput copy() + { + return new ChanceOutput(StackUtils.copy(primaryOutput), StackUtils.copy(secondaryOutput), secondaryChance); + } +} diff --git a/src/api/java/mekanism/api/ChemicalPair.java b/src/api/java/mekanism/api/ChemicalPair.java new file mode 100644 index 000000000..7c28ea0d0 --- /dev/null +++ b/src/api/java/mekanism/api/ChemicalPair.java @@ -0,0 +1,116 @@ +package mekanism.api; + +import mekanism.api.gas.GasStack; +import mekanism.api.gas.GasTank; + +/** + * An input of gasses for recipe use. + * @author aidancbrady + * + */ +public class ChemicalPair +{ + /** The left gas of this chemical input */ + public GasStack leftGas; + + /** The right gas of this chemical input */ + public GasStack rightGas; + + /** + * Creates a chemical input with two defined gasses. + * @param left - left gas + * @param right - right gas + */ + public ChemicalPair(GasStack left, GasStack right) + { + leftGas = left; + rightGas = right; + } + + /** + * If this is a valid ChemicalPair + * @return + */ + public boolean isValid() + { + return leftGas != null && rightGas != null; + } + + /** + * Whether or not the defined input contains the same gasses and at least the required amount of the defined gasses as this input. + * @param input - input to check + * @return if the input meets this input's requirements + */ + public boolean meetsInput(ChemicalPair input) + { + return meets(input) || meets(input.swap()); + } + + /** + * Swaps the right gas and left gas of this input. + * @return a swapped ChemicalInput + */ + public ChemicalPair swap() + { + return new ChemicalPair(rightGas, leftGas); + } + + /** + * Draws the needed amount of gas from each tank. + * @param leftTank - left tank to draw from + * @param rightTank - right tank to draw from + */ + public void draw(GasTank leftTank, GasTank rightTank) + { + if(meets(new ChemicalPair(leftTank.getGas(), rightTank.getGas()))) + { + leftTank.draw(leftGas.amount, true); + rightTank.draw(rightGas.amount, true); + } + else if(meets(new ChemicalPair(rightTank.getGas(), leftTank.getGas()))) + { + leftTank.draw(rightGas.amount, true); + rightTank.draw(leftGas.amount, true); + } + } + + /** + * Whether or not one of this ChemicalInput's GasStack entry's gas type is equal to the gas type of the given gas. + * @param stack - stack to check + * @return if the stack's gas type is contained in this ChemicalInput + */ + public boolean containsType(GasStack stack) + { + if(stack == null || stack.amount == 0) + { + return false; + } + + return stack.isGasEqual(leftGas) || stack.isGasEqual(rightGas); + } + + /** + * Actual implementation of meetsInput(), performs the checks. + * @param input - input to check + * @return if the input meets this input's requirements + */ + private boolean meets(ChemicalPair input) + { + if(input == null || !input.isValid()) + { + return false; + } + + if(input.leftGas.getGas() != leftGas.getGas() || input.rightGas.getGas() != rightGas.getGas()) + { + return false; + } + + return input.leftGas.amount >= leftGas.amount && input.rightGas.amount >= rightGas.amount; + } + + public ChemicalPair copy() + { + return new ChemicalPair(leftGas.copy(), rightGas.copy()); + } +} diff --git a/src/api/java/mekanism/api/Chunk3D.java b/src/api/java/mekanism/api/Chunk3D.java new file mode 100644 index 000000000..854be7158 --- /dev/null +++ b/src/api/java/mekanism/api/Chunk3D.java @@ -0,0 +1,108 @@ +package mekanism.api; + +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +/** + * Chunk3D - an integer-based way to keep track of and perform operations on chunks in a Minecraft-based environment. This also takes + * in account the dimension the chunk is in. + * @author aidancbrady + * + */ +public class Chunk3D +{ + public int dimensionId; + + public int xCoord; + public int zCoord; + + /** + * Creates a Chunk3D object from the given x and z coordinates, as well as a dimension. + * @param x - chunk x location + * @param z - chunk z location + * @param dimension - the dimension this Chunk3D is in + */ + public Chunk3D(int x, int z, int dimension) + { + xCoord = x; + zCoord = z; + + dimensionId = dimension; + } + + /** + * Creates a Chunk3D from an entity based on it's location and dimension. + * @param entity - the entity to get the Chunk3D object from + */ + public Chunk3D(Entity entity) + { + xCoord = ((int)entity.posX) >> 4; + zCoord = ((int)entity.posZ) >> 4; + + dimensionId = entity.dimension; + } + + /** + * Creates a Chunk3D from a Coord4D based on it's coordinates and dimension. + * @param coord - the Coord4D object to get this Chunk3D from + */ + public Chunk3D(Coord4D coord) + { + xCoord = coord.xCoord >> 4; + zCoord = coord.zCoord >> 4; + + dimensionId = coord.dimensionId; + } + + /** + * Whether or not this chunk exists in the given world. + * @param world - the world to check in + * @return if the chunk exists + */ + public boolean exists(World world) + { + return world.getChunkProvider().chunkExists(xCoord, zCoord); + } + + /** + * Gets a Chunk object corresponding to this Chunk3D's coordinates. + * @param world - the world to get the Chunk object from + * @return the corresponding Chunk object + */ + public Chunk getChunk(World world) + { + return world.getChunkFromChunkCoords(xCoord, zCoord); + } + + @Override + public Coord4D clone() + { + return new Coord4D(xCoord, zCoord, dimensionId); + } + + @Override + public String toString() + { + return "[Chunk3D: " + xCoord + ", " + zCoord + ", dim=" + dimensionId + "]"; + } + + @Override + public boolean equals(Object obj) + { + return obj instanceof Chunk3D && + ((Chunk3D)obj).xCoord == xCoord && + ((Chunk3D)obj).zCoord == zCoord && + ((Chunk3D)obj).dimensionId == dimensionId; + } + + @Override + public int hashCode() + { + int code = 1; + code = 31 * code + xCoord; + code = 31 * code + zCoord; + code = 31 * code + dimensionId; + return code; + } +} diff --git a/src/api/java/mekanism/api/Coord4D.java b/src/api/java/mekanism/api/Coord4D.java new file mode 100644 index 000000000..22db2ccd1 --- /dev/null +++ b/src/api/java/mekanism/api/Coord4D.java @@ -0,0 +1,358 @@ +package mekanism.api; + +import io.netty.buffer.ByteBuf; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; + +/** + * Coord4D - an integer-based way to keep track of and perform operations on blocks in a Minecraft-based environment. This also takes + * in account the dimension the coordinate is in. + * @author aidancbrady + * + */ +public class Coord4D +{ + public int xCoord; + public int yCoord; + public int zCoord; + + public int dimensionId; + + /** + * Creates a Coord4D WITHOUT a dimensionId. Don't use unless absolutely necessary. + * @param x - x coordinate + * @param y - y coordinate + * @param z - z coordinate + */ + public Coord4D(int x, int y, int z) + { + xCoord = x; + yCoord = y; + zCoord = z; + + dimensionId = 0; + } + + /** + * Creates a Coord4D from the defined x, y, z, and dimension values. + * @param x - x coordinate + * @param y - y coordinate + * @param z - z coordinate + * @param dimension - dimension ID + */ + public Coord4D(int x, int y, int z, int dimension) + { + xCoord = x; + yCoord = y; + zCoord = z; + + dimensionId = dimension; + } + + /** + * Gets the metadata of the block representing this Coord4D. + * @param world - world this Coord4D is in + * @return the metadata of this Coord4D's block + */ + public int getMetadata(IBlockAccess world) + { + return world.getBlockMetadata(xCoord, yCoord, zCoord); + } + + /** + * Gets the TileEntity of the block representing this Coord4D. + * @param world - world this Coord4D is in + * @return the TileEntity of this Coord4D's block + */ + public TileEntity getTileEntity(IBlockAccess world) + { + if(world instanceof World && !exists((World)world)) + { + return null; + } + + return world.getTileEntity(xCoord, yCoord, zCoord); + } + + /** + * Gets the Block value of the block representing this Coord4D. + * @param world - world this Coord4D is in + * @return the Block value of this Coord4D's block + */ + public Block getBlock(IBlockAccess world) + { + if(world instanceof World && !exists((World)world)) + { + return null; + } + + return world.getBlock(xCoord, yCoord, zCoord); + } + + /** + * Writes this Coord4D's data to an NBTTagCompound. + * @param nbtTags - tag compound to write to + * @return the tag compound with this Coord4D's data + */ + public NBTTagCompound write(NBTTagCompound nbtTags) + { + nbtTags.setInteger("x", xCoord); + nbtTags.setInteger("y", yCoord); + nbtTags.setInteger("z", zCoord); + nbtTags.setInteger("dimensionId", dimensionId); + + return nbtTags; + } + + /** + * Writes this Coord4D's data to an ArrayList for packet transfer. + * @param data - the ArrayList to add the data to + */ + public void write(ArrayList data) + { + data.add(xCoord); + data.add(yCoord); + data.add(zCoord); + data.add(dimensionId); + } + + /** + * Writes this Coord4D's data to a ByteBuf for packet transfer. + * @param dataStream - the ByteBuf to add the data to + */ + public void write(ByteBuf dataStream) + { + dataStream.writeInt(xCoord); + dataStream.writeInt(yCoord); + dataStream.writeInt(zCoord); + dataStream.writeInt(dimensionId); + } + + /** + * Translates this Coord4D by the defined x, y, and z values. + * @param x - x value to translate + * @param y - y value to translate + * @param z - z value to translate + * @return translated Coord4D + */ + public Coord4D translate(int x, int y, int z) + { + xCoord += x; + yCoord += y; + zCoord += z; + + return this; + } + + /** + * Creates and returns a new Coord4D translated to the defined offsets of the side. + * @param side - side to translate this Coord4D to + * @return translated Coord4D + */ + public Coord4D getFromSide(ForgeDirection side) + { + return getFromSide(side, 1); + } + + public Coord4D getFromSide(ForgeDirection side, int amount) + { + return new Coord4D(xCoord+(side.offsetX*amount), yCoord+(side.offsetY*amount), zCoord+(side.offsetZ*amount), dimensionId); + } + + /** + * Returns a new Coord4D from a defined TileEntity's xCoord, yCoord and zCoord values. + * @param tileEntity - TileEntity at the location that will represent this Coord4D + * @return the Coord4D object from the TileEntity + */ + public static Coord4D get(TileEntity tileEntity) + { + return new Coord4D(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, tileEntity.getWorldObj().provider.dimensionId); + } + + /** + * Returns a new Coord4D from a tag compound. + * @param data - tag compound to read from + * @return the Coord4D from the tag compound + */ + public static Coord4D read(NBTTagCompound tag) + { + return new Coord4D(tag.getInteger("x"), tag.getInteger("y"), tag.getInteger("z"), tag.getInteger("id")); + } + + /** + * Returns a new Coord4D from a ByteBuf. + * @param dataStream - data input to read from + * @return the Coord4D from the data input + */ + public static Coord4D read(ByteBuf dataStream) + { + return new Coord4D(dataStream.readInt(), dataStream.readInt(), dataStream.readInt(), dataStream.readInt()); + } + + /** + * Creates and returns a new Coord4D with values representing the difference between the defined Coord4D + * @param other - the Coord4D to subtract from this + * @return a Coord4D representing the distance between the defined Coord4D + */ + public Coord4D difference(Coord4D other) + { + return new Coord4D(xCoord-other.xCoord, yCoord-other.yCoord, zCoord-other.zCoord, dimensionId); + } + + /** + * A method used to find the ForgeDirection represented by the distance of the defined Coord4D. Most likely won't have many + * applicable uses. + * @param other - Coord4D to find the side difference of + * @return ForgeDirection representing the side the defined relative Coord4D is on to this + */ + public ForgeDirection sideDifference(Coord4D other) + { + Coord4D diff = difference(other); + + for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) + { + if(side.offsetX == diff.xCoord && side.offsetY == diff.yCoord && side.offsetZ == diff.zCoord) + { + return side; + } + } + + return ForgeDirection.UNKNOWN; + } + + /** + * Gets the distance to a defined Coord4D. + * @param obj - the Coord4D to find the distance to + * @return the distance to the defined Coord4D + */ + public int distanceTo(Coord4D obj) + { + int subX = xCoord - obj.xCoord; + int subY = yCoord - obj.yCoord; + int subZ = zCoord - obj.zCoord; + return (int)MathHelper.sqrt_double(subX * subX + subY * subY + subZ * subZ); + } + + /** + * Whether or not the defined side of this Coord4D is visible. + * @param side - side to check + * @param world - world this Coord4D is in + * @return + */ + public boolean sideVisible(ForgeDirection side, IBlockAccess world) + { + return world.isAirBlock(xCoord+side.offsetX, yCoord+side.offsetY, zCoord+side.offsetZ); + } + + /** + * Gets a TargetPoint with the defined range from this Coord4D with the appropriate coordinates and dimension ID. + * @param range - the range the packet can be sent in of this Coord4D + * @return TargetPoint relative to this Coord4D + */ + public TargetPoint getTargetPoint(double range) + { + return new TargetPoint(dimensionId, xCoord, yCoord, zCoord, range); + } + + /** + * Steps this Coord4D in the defined side's offset without creating a new value. + * @param side - side to step towards + * @return this Coord4D + */ + public Coord4D step(ForgeDirection side) + { + return translate(side.offsetX, side.offsetY, side.offsetZ); + } + + /** + * Whether or not the chunk this Coord4D is in exists and is loaded. + * @param world - world this Coord4D is in + * @return the chunk of this Coord4D + */ + public boolean exists(World world) + { + return world.getChunkProvider().chunkExists(xCoord >> 4, zCoord >> 4); + } + + /** + * Gets the chunk this Coord4D is in. + * @param world - world this Coord4D is in + * @return the chunk of this Coord4D + */ + public Chunk getChunk(World world) + { + return world.getChunkFromBlockCoords(xCoord, zCoord); + } + + /** + * Gets the Chunk3D object with chunk coordinates correlating to this Coord4D's location + * @return Chunk3D with correlating chunk coordinates. + */ + public Chunk3D getChunk3D() + { + return new Chunk3D(this); + } + + /** + * Whether or not the block this Coord4D represents is an air block. + * @param world - world this Coord4D is in + * @return if this Coord4D is an air block + */ + public boolean isAirBlock(IBlockAccess world) + { + return world.isAirBlock(xCoord, yCoord, zCoord); + } + + /** + * Gets a bounding box that contains the area this Coord4D would take up in a world. + * @return this Coord4D's bounding box + */ + public AxisAlignedBB getBoundingBox() + { + return AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord+1, yCoord+1, zCoord+1); + } + + @Override + public Coord4D clone() + { + return new Coord4D(xCoord, yCoord, zCoord, dimensionId); + } + + @Override + public String toString() + { + return "[Coord4D: " + xCoord + ", " + yCoord + ", " + zCoord + ", dim=" + dimensionId + "]"; + } + + @Override + public boolean equals(Object obj) + { + return obj instanceof Coord4D && + ((Coord4D)obj).xCoord == xCoord && + ((Coord4D)obj).yCoord == yCoord && + ((Coord4D)obj).zCoord == zCoord && + ((Coord4D)obj).dimensionId == dimensionId; + } + + @Override + public int hashCode() + { + int code = 1; + code = 31 * code + xCoord; + code = 31 * code + yCoord; + code = 31 * code + zCoord; + code = 31 * code + dimensionId; + return code; + } +} \ No newline at end of file diff --git a/src/api/java/mekanism/api/EnumColor.java b/src/api/java/mekanism/api/EnumColor.java new file mode 100644 index 000000000..5c1351e92 --- /dev/null +++ b/src/api/java/mekanism/api/EnumColor.java @@ -0,0 +1,112 @@ +package mekanism.api; + +import net.minecraft.util.StatCollector; + +/** + * Simple color enum for adding colors to in-game GUI strings of text. + * @author AidanBrady + * + */ +public enum EnumColor +{ + BLACK("\u00a70", "black", "Black", new int[] {0, 0, 0}, 0), + DARK_BLUE("\u00a71", "darkBlue", "Blue", new int[] {0, 0, 170}, 4), + DARK_GREEN("\u00a72", "darkGreen", "Green", new int[] {0, 170, 0}, 2), + DARK_AQUA("\u00a73", "darkAqua", "Cyan", new int[] {0, 170, 170}, 6), + DARK_RED("\u00a74", "darkRed", null, new int[] {170, 0, 0}, -1), + PURPLE("\u00a75", "purple", "Purple", new int[] {170, 0, 170}, 5), + ORANGE("\u00a76", "orange", "Orange", new int[] {255, 170, 0}, 14), + GREY("\u00a77", "grey", "LightGray", new int[] {170, 170, 170}, 7), + DARK_GREY("\u00a78", "darkGrey", "Gray", new int[] {85, 85, 85}, 8), + INDIGO("\u00a79", "indigo", "LightBlue", new int[] {85, 85, 255}, 12), + BRIGHT_GREEN("\u00a7a", "brightGreen", "Lime", new int[] {85, 255, 85}, 10), + AQUA("\u00a7b", "aqua", null, new int[] {85, 255, 255}, -1), + RED("\u00a7c", "red", "Red", new int[] {255, 0, 0}, 1), + PINK("\u00a7d", "pink", "Magenta", new int[] {255, 85, 255}, 13), + YELLOW("\u00a7e", "yellow", "Yellow", new int[] {255, 255, 85}, 11), + WHITE("\u00a7f", "white", "White", new int[] {255, 255, 255}, 15), + //Extras for dye-completeness + BROWN("\u00a76", "brown", "Brown", new int[] {150, 75, 0}, 3), + BRIGHT_PINK("\u00a7d", "brightPink", "Pink", new int[] {255, 192, 203}, 9); + + public static EnumColor[] DYES = new EnumColor[] {BLACK, RED, DARK_GREEN, BROWN, DARK_BLUE, PURPLE, DARK_AQUA, GREY, DARK_GREY, BRIGHT_PINK, BRIGHT_GREEN, YELLOW, INDIGO, PINK, ORANGE, WHITE}; + + /** The color code that will be displayed */ + public final String code; + + public final int[] rgbCode; + + public final int mcMeta; + + /** A friendly name of the color. */ + public String unlocalizedName; + + public String dyeName; + + private EnumColor(String s, String n, String dye, int[] rgb, int meta) + { + code = s; + unlocalizedName = n; + dyeName = dye; + rgbCode = rgb; + mcMeta = meta; + } + + /** + * Gets the localized name of this color by translating the unlocalized name. + * @return localized name + */ + public String getLocalizedName() + { + return StatCollector.translateToLocal("color." + unlocalizedName); + } + + public String getDyeName() + { + return StatCollector.translateToLocal("dye." + unlocalizedName); + } + + public String getOreDictName() + { + return dyeName; + } + + /** + * Gets the name of this color with it's color prefix code. + * @return the color's name and color prefix + */ + public String getName() + { + return code + getLocalizedName(); + } + + public String getDyedName() + { + return code + getDyeName(); + } + + /** + * Gets the 0-1 of this color's RGB value by dividing by 255 (used for OpenGL coloring). + * @param index - R:0, G:1, B:2 + * @return the color value + */ + public float getColor(int index) + { + return (float)rgbCode[index]/255F; + } + + /** + * Gets the value of this color mapped to MC in-game item colors present in dyes and wool. + * @return mc meta value + */ + public int getMetaValue() + { + return mcMeta; + } + + @Override + public String toString() + { + return code; + } +} diff --git a/src/api/java/mekanism/api/IClientTicker.java b/src/api/java/mekanism/api/IClientTicker.java new file mode 100644 index 000000000..228897370 --- /dev/null +++ b/src/api/java/mekanism/api/IClientTicker.java @@ -0,0 +1,8 @@ +package mekanism.api; + +public interface IClientTicker +{ + public void clientTick(); + + public boolean needsTicks(); +} diff --git a/src/api/java/mekanism/api/IConfigurable.java b/src/api/java/mekanism/api/IConfigurable.java new file mode 100644 index 000000000..512fabf43 --- /dev/null +++ b/src/api/java/mekanism/api/IConfigurable.java @@ -0,0 +1,27 @@ +package mekanism.api; + +import net.minecraft.entity.player.EntityPlayer; + +/** + * Implement this in your TileEntity class if your block can be modified by a Configurator. + * @author aidancbrady + * + */ +public interface IConfigurable +{ + /** + * Called when a player shift-right clicks this block with a Configurator. + * @param player - the player who clicked the block + * @param side - the side the block was clicked on + * @return whether or not an action was performed + */ + public boolean onSneakRightClick(EntityPlayer player, int side); + + /** + * Called when a player right clicks this block with a Configurator. + * @param player - the player who clicked the block + * @param side - the side the block was clicked on + * @return whether or not an action was performed + */ + public boolean onRightClick(EntityPlayer player, int side); +} diff --git a/src/api/java/mekanism/api/IFilterAccess.java b/src/api/java/mekanism/api/IFilterAccess.java new file mode 100644 index 000000000..abdcf29a8 --- /dev/null +++ b/src/api/java/mekanism/api/IFilterAccess.java @@ -0,0 +1,31 @@ +package mekanism.api; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * Implement this in your TileEntity class if you wish for Mekanism filters to be able to store any of their + * information. + * @author aidancbrady + * + */ +public interface IFilterAccess +{ + /** + * Collects the TileEntity's filter card data into the parameterized NBTTagCompound. + * @param nbtTags - the NBTTagCompound of the filter card ItemStack + * @return the NBTTagCompound that now contains the TileEntity's filter card data + */ + public NBTTagCompound getFilterData(NBTTagCompound nbtTags); + + /** + * Retrieves the TileEntity's data contained in the filter card based on the given NBTTagCompopund. + * @param nbtTags - the NBTTagCompound of the filter card ItemStack + */ + public void setFilterData(NBTTagCompound nbtTags); + + /** + * A String name of this TileEntity that will be displayed as the type of data on the filter card. + * @return the String name of this TileEntity + */ + public String getDataType(); +} diff --git a/src/api/java/mekanism/api/ISalinationSolar.java b/src/api/java/mekanism/api/ISalinationSolar.java new file mode 100644 index 000000000..20e3e1ecf --- /dev/null +++ b/src/api/java/mekanism/api/ISalinationSolar.java @@ -0,0 +1,11 @@ +package mekanism.api; + +/** + * Implement this class in a TileEntity if you wish for it to be able to heat up a Salination Plant. + * @author aidancbrady + * + */ +public interface ISalinationSolar +{ + public boolean seesSun(); +} diff --git a/src/api/java/mekanism/api/ItemInfo.java b/src/api/java/mekanism/api/ItemInfo.java new file mode 100644 index 000000000..2c45f0cfe --- /dev/null +++ b/src/api/java/mekanism/api/ItemInfo.java @@ -0,0 +1,38 @@ +package mekanism.api; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class ItemInfo +{ + public Item item; + public int meta; + + public ItemInfo(Item i, int j) + { + item = i; + meta = j; + } + + public static ItemInfo get(ItemStack stack) + { + return new ItemInfo(stack.getItem(), stack.getItemDamage()); + } + + @Override + public boolean equals(Object obj) + { + return obj instanceof BlockInfo && + ((ItemInfo)obj).item == item && + ((ItemInfo)obj).meta == meta; + } + + @Override + public int hashCode() + { + int code = 1; + code = 31 * code + item.getUnlocalizedName().hashCode(); + code = 31 * code + meta; + return code; + } +} diff --git a/src/api/java/mekanism/api/ItemRetriever.java b/src/api/java/mekanism/api/ItemRetriever.java new file mode 100644 index 000000000..a66b8b5b1 --- /dev/null +++ b/src/api/java/mekanism/api/ItemRetriever.java @@ -0,0 +1,71 @@ +package mekanism.api; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +/** + * Use this class's 'getItem()' method to retrieve ItemStacks from the 'Mekanism' + * class. + * @author AidanBrady + * + */ +public final class ItemRetriever +{ + /** The 'Mekanism' class that items and blocks are retrieved from. */ + private static Class Mekanism; + + /** + * Attempts to retrieve an ItemStack of an item or block with the declared identifier. + * + * Mekanism identifiers follow an easy-to-remember pattern. All identifiers + * are identical to the String returned by 'getItemName().' None include spaces, + * and all start with a capital letter. The name that shows up in-game can be + * stripped down to identifier form by removing spaces and all non-alphabetic + * characters (,./'=-_). Below is an example: + * + * ItemStack enrichedAlloy = ItemRetriever.getItem("EnrichedAlloy"); + * + * The same also works for blocks. + * + * ItemStack refinedObsidian = ItemRetriever.getItem("RefinedObsidian"); + * + * Note that for items or blocks that have specific metadata you will need to create + * a new ItemStack with that specified value, as this will only return an ItemStack + * with the meta value '0.' + * + * Make sure you run this in or after FMLPostInitializationEvent runs, because most + * items are registered when FMLInitializationEvent runs. However, some items ARE + * registered later in order to hook into other mods. In a rare circumstance you may + * have to add "after:Mekanism" in the @Mod 'dependencies' annotation. + * + * @param identifier - a String to be searched in the 'Mekanism' class + * @return an ItemStack of the declared identifier, otherwise null. + */ + public static ItemStack getItem(String identifier) + { + try { + if(Mekanism == null) + { + Mekanism = Class.forName("mekanism.common.Mekanism"); + } + + Object ret = Mekanism.getField(identifier).get(null); + + if(ret instanceof Item) + { + return new ItemStack((Item)ret, 1); + } + else if(ret instanceof Block) + { + return new ItemStack((Block)ret, 1); + } + else { + return null; + } + } catch(Exception e) { + System.err.println("Error retrieving item with identifier '" + identifier + "': " + e.getMessage()); + return null; + } + } +} diff --git a/src/api/java/mekanism/api/ListUtils.java b/src/api/java/mekanism/api/ListUtils.java new file mode 100644 index 000000000..fb319cee8 --- /dev/null +++ b/src/api/java/mekanism/api/ListUtils.java @@ -0,0 +1,282 @@ +package mekanism.api; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +public class ListUtils +{ + public static List inverse(List list) + { + List toReturn = new ArrayList(); + + for(int i = list.size() - 1; i >= 0; i--) + { + toReturn.add(list.get(i)); + } + + return toReturn; + } + + public static List cap(List list, int cap) + { + List toReturn = new ArrayList(); + + if(list.size() <= cap) + { + toReturn = copy(list); + } + else { + int count = 0; + + for(V obj : list) + { + count++; + + toReturn.add(obj); + + if(count == cap) + { + break; + } + } + } + + return toReturn; + } + + public static List copy(List list) + { + List toReturn = new ArrayList(); + + for(V obj : list) + { + toReturn.add(obj); + } + + return toReturn; + } + + public static List merge(List listOne, List listTwo) + { + List newList = new ArrayList(); + + for(V obj : listOne) + { + newList.add(obj); + } + + for(V obj : listTwo) + { + newList.add(obj); + } + + return newList; + } + + public static List capRemains(List list, int cap) + { + List toReturn = new ArrayList(); + + if(list.size() <= cap) + { + return toReturn; + } + else { + List inverse = inverse(list); + + int iterNeeded = list.size() - cap; + int count = 0; + + for(V obj : list) + { + count++; + + toReturn.add(obj); + + if(count == iterNeeded) + { + break; + } + } + + return toReturn; + } + } + + public static ArrayList> split(List list, int divide) + { + int remain = list.size() % divide; + int size = (list.size() - remain) / divide; + + ArrayList> toReturn = new ArrayList>(); + + for(int i = 0; i < divide; i++) + { + toReturn.add(i, new ArrayList()); + } + + for(List iterSet : toReturn) + { + List removed = new ArrayList(); + + int toAdd = size; + + if(remain > 0) + { + remain--; + toAdd++; + } + + for(V obj : list) + { + if(toAdd == 0) + { + break; + } + + iterSet.add(obj); + removed.add(obj); + toAdd--; + } + + for(V obj : removed) + { + list.remove(obj); + } + } + + return toReturn; + } + + public static V getTop(List list) + { + for(V obj : list) + { + return obj; + } + + return null; + } + + public static List asList(Set set) + { + return (List)Arrays.asList(set.toArray()); + } + + public static List asList(V... values) + { + return (List)Arrays.asList(values); + } + + public static double[] splitDouble(int size, double num) + { + double[] split = new double[size]; + + for(int i = 0; i < size; i++) + { + double remain = num%size; + double ret = (num-remain)/size; + ret += remain; + + split[i] = ret; + num -= remain; + } + + return split; + } + + public static double[] percent(double[] values) + { + double[] ret = new double[values.length]; + double total = 0; + + for(double d : values) total += d; + + for(int i = 0; i < values.length; i++) + { + ret[i] = values[i]/total; + } + + return ret; + } + + public static int[] calcPercentInt(double[] percent, int val) + { + int[] ret = new int[percent.length]; + + for(int i = 0; i < percent.length; i++) + { + ret[i] = (int)Math.round(val*percent[i]); + } + + int newTotal = 0; + for(int i : ret) newTotal += i; + + int diff = val-newTotal; + + if(diff != val) + { + for(int i = 0; i < ret.length; i++) + { + int num = ret[i]; + + if(diff < 0 && num == 0) + { + continue; + } + + if(diff > 0) + { + ret[i]++; + diff--; + } + else if(diff < 0) + { + ret[i]--; + diff++; + } + + if(diff == 0) + { + return ret; + } + } + } + + return ret; + } + + public static int[] splitInt(int size, int num) + { + int[] split = new int[size]; + + for(int i = 0; i < size; i++) + { + int remain = num%size; + int ret = (num-remain)/size; + ret += remain; + + split[i] = ret; + num -= remain; + } + + return split; + } + + public static double[] percent(int[] values) + { + double[] ret = new double[values.length]; + double total = 0; + + for(double d : values) total += d; + + for(int i = 0; i < values.length; i++) + { + ret[i] = values[i]/total; + } + + return ret; + } +} diff --git a/src/api/java/mekanism/api/MekanismAPI.java b/src/api/java/mekanism/api/MekanismAPI.java new file mode 100644 index 000000000..4f4cef4a9 --- /dev/null +++ b/src/api/java/mekanism/api/MekanismAPI.java @@ -0,0 +1,45 @@ +package mekanism.api; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import cpw.mods.fml.common.eventhandler.Event; +import net.minecraftforge.oredict.OreDictionary; + +public class MekanismAPI +{ + //Add a BlockInfo value here if you don't want a certain block to be picked up by cardboard boxes + private static Set cardboardBoxIgnore = new HashSet(); + + public static boolean isBlockCompatible(Item item, int meta) + { + for(BlockInfo i : cardboardBoxIgnore) + { + if(i.block == Block.getBlockFromItem(item) && (i.meta == OreDictionary.WILDCARD_VALUE || i.meta == meta)) + { + return false; + } + } + + return true; + } + + public static void addBoxBlacklist(Block block, int meta) + { + cardboardBoxIgnore.add(new BlockInfo(block, meta)); + } + + public static void removeBoxBlacklist(Block block, int meta) + { + cardboardBoxIgnore.remove(new BlockInfo(block, meta)); + } + + public static Set getBoxIgnore() + { + return cardboardBoxIgnore; + } + + public static class BoxBlacklistEvent extends Event {} +} diff --git a/src/api/java/mekanism/api/Pos3D.java b/src/api/java/mekanism/api/Pos3D.java new file mode 100644 index 000000000..aa4ae089f --- /dev/null +++ b/src/api/java/mekanism/api/Pos3D.java @@ -0,0 +1,191 @@ +package mekanism.api; + +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; + +/** + * Pos3D - a way of performing operations on objects in a three dimensional environment. + * @author aidancbrady + * + */ +public class Pos3D +{ + public double xPos; + public double yPos; + public double zPos; + + public Pos3D() + { + this(0, 0, 0); + } + + public Pos3D(double x, double y, double z) + { + xPos = x; + yPos = y; + zPos = z; + } + + public Pos3D(Coord4D coord) + { + xPos = coord.xCoord; + yPos = coord.yCoord; + zPos = coord.zCoord; + } + + /** + * Creates a Pos3D with an entity's posX, posY, and posZ values. + * @param entity - entity to create the Pos3D from + */ + public Pos3D(Entity entity) + { + this(entity.posX, entity.posY, entity.posZ); + } + + /** + * Creates a Pos3D with a TileEntity's xCoord, yCoord and zCoord values. + * @param tileEntity - TileEntity to create the Pos3D from + */ + public Pos3D(TileEntity tileEntity) + { + this(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + } + + /** + * Creates and returns a Pos3D with values representing the difference between this and the Pos3D in the parameters. + * @param pos - Pos3D to subtract + * @return difference of the two Pos3Ds + */ + public Pos3D diff(Pos3D pos) + { + return new Pos3D(xPos-pos.xPos, yPos-pos.yPos, zPos-pos.zPos); + } + + /** + * Creates a new Pos3D from the motion of an entity. + * @param entity + * @return + */ + public static Pos3D fromMotion(Entity entity) + { + return new Pos3D(entity.motionX, entity.motionY, entity.motionZ); + } + + /** + * Translates this Pos3D by the defined values. + * @param x - amount to translate on the x axis + * @param y - amount to translate on the y axis + * @param z - amount to translate on the z axis + * @return the translated Pos3D + */ + public Pos3D translate(double x, double y, double z) + { + xPos += x; + yPos += y; + zPos += z; + + return this; + } + + /** + * Performs the same operation as translate(x, y, z), but with a Pos3D value instead. + * @param pos - Pos3D value to translate by + * @return translated Pos3D + */ + public Pos3D translate(Pos3D pos) + { + return translate(pos.xPos, pos.yPos, pos.zPos); + } + + /** + * Returns the distance between this and the defined Pos3D. + * @param pos - the Pos3D to find the distance to + * @return the distance between this and the defined Pos3D + */ + public double distance(Pos3D pos) + { + double subX = xPos - pos.xPos; + double subY = yPos - pos.yPos; + double subZ = zPos - pos.zPos; + return MathHelper.sqrt_double(subX * subX + subY * subY + subZ * subZ); + } + + /** + * Rotates this Pos3D by the defined yaw value. + * @param yaw - yaw to rotate by + * @return rotated Pos3D + */ + public Pos3D rotateYaw(double yaw) + { + double yawRadians = Math.toRadians(yaw); + + double x = xPos; + double z = zPos; + + if(yaw != 0) + { + xPos = x * Math.cos(yawRadians) - z * Math.sin(yawRadians); + zPos = x * Math.sin(yawRadians) + z * Math.cos(yawRadians); + } + + return this; + } + + /** + * Scales this Pos3D by the defined x, y, an z values. + * @param x - x value to scale by + * @param y - y value to scale by + * @param z - z value to scale by + * @return scaled Pos3D + */ + public Pos3D scale(double x, double y, double z) + { + xPos *= x; + yPos *= y; + zPos *= z; + + return this; + } + + /** + * Performs the same operation as scale(x, y, z), but with a value representing all three dimensions. + * @param scale - value to scale by + * @return scaled Pos3D + */ + public Pos3D scale(double scale) + { + return scale(scale, scale, scale); + } + + @Override + public Pos3D clone() + { + return new Pos3D(xPos, yPos, zPos); + } + + @Override + public String toString() + { + return "[Pos3D: " + xPos + ", " + yPos + ", " + zPos + "]"; + } + + @Override + public boolean equals(Object obj) + { + return obj instanceof Pos3D && + ((Pos3D)obj).xPos == xPos && + ((Pos3D)obj).yPos == yPos && + ((Pos3D)obj).zPos == zPos; + } + + @Override + public int hashCode() + { + int code = 1; + code = 31 * code + new Double(xPos).hashCode(); + code = 31 * code + new Double(yPos).hashCode(); + code = 31 * code + new Double(zPos).hashCode(); + return code; + } +} diff --git a/src/api/java/mekanism/api/PressurizedProducts.java b/src/api/java/mekanism/api/PressurizedProducts.java new file mode 100644 index 000000000..830fc55a6 --- /dev/null +++ b/src/api/java/mekanism/api/PressurizedProducts.java @@ -0,0 +1,50 @@ +package mekanism.api; + +import mekanism.api.gas.GasStack; +import mekanism.api.gas.GasTank; + +import net.minecraft.item.ItemStack; + +public class PressurizedProducts +{ + private ItemStack itemOutput; + private GasStack gasOutput; + + public PressurizedProducts(ItemStack item, GasStack gas) + { + itemOutput = item; + gasOutput = gas; + } + + public void fillTank(GasTank tank) + { + tank.receive(gasOutput, true); + } + + public void addProducts(ItemStack[] inventory, int index) + { + if(inventory[index] == null) + { + inventory[index] = itemOutput.copy(); + } + else if(inventory[index].isItemEqual(itemOutput)) + { + inventory[index].stackSize += itemOutput.stackSize; + } + } + + public ItemStack getItemOutput() + { + return itemOutput; + } + + public GasStack getGasOutput() + { + return gasOutput; + } + + public PressurizedProducts copy() + { + return new PressurizedProducts(itemOutput.copy(), gasOutput.copy()); + } +} diff --git a/src/api/java/mekanism/api/PressurizedReactants.java b/src/api/java/mekanism/api/PressurizedReactants.java new file mode 100644 index 000000000..07e588235 --- /dev/null +++ b/src/api/java/mekanism/api/PressurizedReactants.java @@ -0,0 +1,139 @@ +package mekanism.api; + +import mekanism.api.gas.GasStack; +import mekanism.api.gas.GasTank; +import mekanism.common.util.StackUtils; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; + +/** + * An input of a gas, a fluid and an item for the pressurized reaction chamber + */ +public class PressurizedReactants +{ + private ItemStack theSolid; + private FluidStack theFluid; + private GasStack theGas; + + public PressurizedReactants(ItemStack solid, FluidStack fluid, GasStack gas) + { + theSolid = solid; + theFluid = fluid; + theGas = gas; + } + + /** + * If this is a valid PressurizedReactants + */ + public boolean isValid() + { + return theSolid != null && theFluid != null && theGas != null; + } + + /** + * Draws the needed amount of gas from each tank. + * @param item - ItemStack to draw from + * @param fluidTank - fluid tank to draw from + * @param gasTank - gas tank to draw from + */ + public void use(ItemStack item, FluidTank fluidTank, GasTank gasTank) + { + if(meets(new PressurizedReactants(item, fluidTank.getFluid(), gasTank.getGas()))) + { + item.stackSize -= theSolid.stackSize; + fluidTank.drain(theFluid.amount, true); + gasTank.draw(theGas.amount, true); + } + } + + /** + * Whether or not this PressurizedReactants's ItemStack entry's item type is equal to the item type of the given item. + * @param stack - stack to check + * @return if the stack's item type is contained in this PressurizedReactants + */ + public boolean containsType(ItemStack stack) + { + if(stack == null || stack.stackSize == 0) + { + return false; + } + + return StackUtils.equalsWildcard(stack, theSolid); + } + + /** + * Whether or not this PressurizedReactants's FluidStack entry's fluid type is equal to the fluid type of the given fluid. + * @param stack - stack to check + * @return if the stack's fluid type is contained in this PressurizedReactants + */ + public boolean containsType(FluidStack stack) + { + if(stack == null || stack.amount == 0) + { + return false; + } + + return stack.isFluidEqual(theFluid); + } + + /** + * Whether or not this PressurizedReactants's GasStack entry's gas type is equal to the gas type of the given gas. + * @param stack - stack to check + * @return if the stack's gas type is contained in this PressurizedReactants + */ + public boolean containsType(GasStack stack) + { + if(stack == null || stack.amount == 0) + { + return false; + } + + return stack.isGasEqual(theGas); + } + + public boolean meetsInput(ItemStack itemStack, FluidStack fluidStack, GasStack gasStack) + { + return meets(new PressurizedReactants(itemStack, fluidStack, gasStack)); + } + + /** + * Actual implementation of meetsInput(), performs the checks. + * @param input - input to check + * @return if the input meets this input's requirements + */ + private boolean meets(PressurizedReactants input) + { + if(input == null || !input.isValid()) + { + return false; + } + + if(!(StackUtils.equalsWildcard(input.theSolid, theSolid) && input.theFluid.isFluidEqual(theFluid) && input.theGas.isGasEqual(theGas))) + { + return false; + } + + return input.theSolid.stackSize >= theSolid.stackSize && input.theFluid.amount >= theFluid.amount && input.theGas.amount >= theGas.amount; + } + + public PressurizedReactants copy() + { + return new PressurizedReactants(theSolid.copy(), theFluid.copy(), theGas.copy()); + } + + public ItemStack getSolid() + { + return theSolid; + } + + public FluidStack getFluid() + { + return theFluid; + } + + public GasStack getGas() + { + return theGas; + } +} diff --git a/src/api/java/mekanism/api/PressurizedRecipe.java b/src/api/java/mekanism/api/PressurizedRecipe.java new file mode 100644 index 000000000..d0572bda8 --- /dev/null +++ b/src/api/java/mekanism/api/PressurizedRecipe.java @@ -0,0 +1,25 @@ +package mekanism.api; + +public class PressurizedRecipe +{ + public PressurizedReactants reactants; + + public double extraEnergy; + + public PressurizedProducts products; + + public int ticks; + + public PressurizedRecipe(PressurizedReactants pressurizedReactants, double energy, PressurizedProducts pressurizedProducts, int duration) + { + reactants = pressurizedReactants; + extraEnergy = energy; + products = pressurizedProducts; + ticks = duration; + } + + public PressurizedRecipe copy() + { + return new PressurizedRecipe(reactants.copy(), extraEnergy, products.copy(), ticks); + } +} diff --git a/src/api/java/mekanism/api/RecipeHelper.java b/src/api/java/mekanism/api/RecipeHelper.java new file mode 100644 index 000000000..6e27c0cd5 --- /dev/null +++ b/src/api/java/mekanism/api/RecipeHelper.java @@ -0,0 +1,258 @@ +package mekanism.api; + +import java.lang.reflect.Method; + +import mekanism.api.gas.GasStack; +import mekanism.api.infuse.InfusionInput; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +/** + * Use this handy class to add recipes to Mekanism machinery. + * @author AidanBrady + * + */ +public final class RecipeHelper +{ + /** + * Add an Enrichment Chamber recipe. + * @param input - input ItemStack + * @param output - output ItemStack + */ + public static void addEnrichmentChamberRecipe(ItemStack input, ItemStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addEnrichmentChamberRecipe", ItemStack.class, ItemStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add an Osmium Compressor recipe. + * @param input - input ItemStack + * @param output - output ItemStack + */ + public static void addOsmiumCompressorRecipe(ItemStack input, ItemStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addOsmiumCompressorRecipe", ItemStack.class, ItemStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Combiner recipe. + * @param input - input ItemStack + * @param output - output ItemStack + */ + public static void addCombinerRecipe(ItemStack input, ItemStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addCombinerRecipe", ItemStack.class, ItemStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Crusher recipe. + * @param input - input ItemStack + * @param output - output ItemStack + */ + public static void addCrusherRecipe(ItemStack input, ItemStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addCrusherRecipe", ItemStack.class, ItemStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Purification Chamber recipe. + * @param input - input ItemStack + * @param output - output ItemStack + */ + public static void addPurificationChamberRecipe(ItemStack input, ItemStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addPurificationChamberRecipe", ItemStack.class, ItemStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Chemical Oxidizer recipe. + * @param input - input ItemStack + * @param output - output GasStack + */ + public static void addChemicalOxidizerRecipe(ItemStack input, GasStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addChemicalOxidizerRecipe", ItemStack.class, GasStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Chemical Infuser recipe. + * @param input - input ChemicalInput + * @param output - output GasStack + */ + public static void addChemicalInfuserRecipe(ChemicalPair input, GasStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addChemicalInfuserRecipe", ChemicalPair.class, GasStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Precision Sawmill recipe. + * @param input - input ItemStack + * @param output - output ChanceOutput + */ + public static void addPrecisionSawmillRecipe(ItemStack input, ChanceOutput output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addPrecisionSawmillRecipe", ItemStack.class, ChanceOutput.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Chemical Injection Chamber recipe. + * @param input - input AdvancedInput + * @param output - output ItemStack + */ + public static void addChemicalInjectionChamberRecipe(AdvancedInput input, ItemStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addChemicalInjectionChamberRecipe", AdvancedInput.class, ItemStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add an Electrolytic Separator recipe. + * @param input - input FluidStack + * @param output - output ChemicalPair + */ + public static void addElectrolyticSeparatorRecipe(FluidStack input, ChemicalPair output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addElectrolyticSeparatorRecipe", FluidStack.class, ChemicalPair.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Chemical Dissolution Chamber recipe. + * @param input - input ItemStack + * @param output - output GasStack + */ + public static void addChemicalDissolutionChamberRecipe(ItemStack input, GasStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addChemicalDissolutionChamberRecipe", ItemStack.class, GasStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Chemical Washer recipe. + * @param input - input GasStack + * @param output - output GasStack + */ + public static void addChemicalWasherRecipe(GasStack input, GasStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addChemicalWasherRecipe", GasStack.class, GasStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Chemical Crystallizer recipe. + * @param input - input GasStack + * @param output - output ItemStack + */ + public static void addChemicalCrystallizerRecipe(GasStack input, ItemStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addChemicalCrystallizerRecipe", GasStack.class, ItemStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Metallurgic Infuser recipe. + * @param input - input Infusion + * @param output - output ItemStack + */ + public static void addMetallurgicInfuserRecipe(InfusionInput input, ItemStack output) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addMetallurgicInfuserRecipe", InfusionInput.class, ItemStack.class); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } + + /** + * Add a Pressurized Reaction Chamber recipe. + * @param input - input PressurizedReactants + * @param output - output PressurizedProducts + * @param extraEnergy - extra energy needed by the recipe + * @param ticks - amount of ticks it takes for this recipe to complete + */ + public static void addPRCRecipe(PressurizedReactants input, PressurizedProducts output, double extraEnergy, int ticks) + { + try { + Class recipeClass = Class.forName("mekanism.common.recipe.RecipeHandler"); + Method m = recipeClass.getMethod("addPRCRecipe", PressurizedReactants.class, PressurizedProducts.class, Double.TYPE, Integer.TYPE); + m.invoke(null, input, output); + } catch(Exception e) { + System.err.println("Error while adding recipe: " + e.getMessage()); + } + } +} diff --git a/src/api/java/mekanism/api/TabProxy.java b/src/api/java/mekanism/api/TabProxy.java new file mode 100644 index 000000000..c562c0247 --- /dev/null +++ b/src/api/java/mekanism/api/TabProxy.java @@ -0,0 +1,42 @@ +package mekanism.api; + +import net.minecraft.creativetab.CreativeTabs; + +/** + * Class used to indirectly reference the Mekanism creative tab. + * @author AidanBrady + * + */ +public final class TabProxy +{ + /** The 'Mekanism' class where the tab instance is stored. */ + public static Class Mekanism; + + /** + * Attempts to get the Mekanism creative tab instance from the 'Mekanism' class. Will return + * the tab if the mod is loaded, but otherwise will return the defined 'preferred' creative tab. This way + * you don't need to worry about NPEs! + * @return Mekanism creative tab if can, otherwise preferred tab + */ + public static CreativeTabs tabMekanism(CreativeTabs preferred) + { + try { + if(Mekanism == null) + { + Mekanism = Class.forName("mekanism.common.Mekanism"); + } + + Object ret = Mekanism.getField("tabMekanism").get(null); + + if(ret instanceof CreativeTabs) + { + return (CreativeTabs)ret; + } + + return preferred; + } catch(Exception e) { + System.err.println("Error retrieving Mekanism creative tab."); + return preferred; + } + } +} diff --git a/src/api/java/mekanism/api/energy/EnergizedItemManager.java b/src/api/java/mekanism/api/energy/EnergizedItemManager.java new file mode 100644 index 000000000..165bdf608 --- /dev/null +++ b/src/api/java/mekanism/api/energy/EnergizedItemManager.java @@ -0,0 +1,60 @@ +package mekanism.api.energy; + +import net.minecraft.item.ItemStack; + +public class EnergizedItemManager +{ + /** + * Discharges an IEnergizedItem with the defined amount of energy. + * @param itemStack - ItemStack to discharge + * @param amount - amount of energy to discharge from the item, usually the total amount of energy needed in a TileEntity + * @return amount of energy discharged + */ + public static double discharge(ItemStack itemStack, double amount) + { + if(itemStack != null) + { + if(itemStack.getItem() instanceof IEnergizedItem) + { + IEnergizedItem energizedItem = (IEnergizedItem)itemStack.getItem(); + + if(energizedItem.canSend(itemStack)) + { + double energyToUse = Math.min(energizedItem.getMaxTransfer(itemStack), Math.min(energizedItem.getEnergy(itemStack), amount)); + energizedItem.setEnergy(itemStack, energizedItem.getEnergy(itemStack) - energyToUse); + + return energyToUse; + } + } + } + + return 0; + } + + /** + * Charges an IEnergizedItem with the defined amount of energy. + * @param itemStack - ItemStack to charge + * @param amount - amount of energy to charge the item with, usually the total amount of energy stored in a TileEntity + * @return amount of energy charged + */ + public static double charge(ItemStack itemStack, double amount) + { + if(itemStack != null) + { + if(itemStack.getItem() instanceof IEnergizedItem) + { + IEnergizedItem energizedItem = (IEnergizedItem)itemStack.getItem(); + + if(energizedItem.canReceive(itemStack)) + { + double energyToSend = Math.min(energizedItem.getMaxTransfer(itemStack), Math.min(energizedItem.getMaxEnergy(itemStack) - energizedItem.getEnergy(itemStack), amount)); + energizedItem.setEnergy(itemStack, energizedItem.getEnergy(itemStack) + energyToSend); + + return energyToSend; + } + } + } + + return 0; + } +} diff --git a/src/api/java/mekanism/api/energy/ICableOutputter.java b/src/api/java/mekanism/api/energy/ICableOutputter.java new file mode 100644 index 000000000..015379c03 --- /dev/null +++ b/src/api/java/mekanism/api/energy/ICableOutputter.java @@ -0,0 +1,18 @@ +package mekanism.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this if your TileEntity is capable of outputting energy to cables, overriding Mekanism's default implementation. + * @author AidanBrady + * + */ +public interface ICableOutputter +{ + /** + * Whether or not this block can output to a cable on a specific side. + * @param side - side to check + * @return if the block can output + */ + public boolean canOutputTo(ForgeDirection side); +} diff --git a/src/api/java/mekanism/api/energy/IEnergizedItem.java b/src/api/java/mekanism/api/energy/IEnergizedItem.java new file mode 100644 index 000000000..b67254597 --- /dev/null +++ b/src/api/java/mekanism/api/energy/IEnergizedItem.java @@ -0,0 +1,59 @@ +package mekanism.api.energy; + +import net.minecraft.item.ItemStack; + +/** + * Implement this in an item's class if it should be able to store electricity. + * @author aidancbrady + * + */ +public interface IEnergizedItem +{ + /** + * Gets and returns the amount of energy stored in this item. + * @param itemStack - the ItemStack to check + * @return energy stored + */ + public double getEnergy(ItemStack itemStack); + + /** + * Sets this item's stored energy value to a new amount. + * @param itemStack - the ItemStack who's energy value is to be change + * @param amount - new amount of energy + */ + public void setEnergy(ItemStack itemStack, double amount); + + /** + * Gets and returns this item's maximum amount of energy that can be stored. + * @param itemStack - the ItemStack to check + * @return maximum energy + */ + public double getMaxEnergy(ItemStack itemStack); + + /** + * Gets and returns how much energy this item can transfer to and from charging slots. + * @param itemStack - the ItemStack to check + * @return transfer amount + */ + public double getMaxTransfer(ItemStack itemStack); + + /** + * Gets and returns whether or not this item can receive energy from a charging slot. + * @param itemStack - the ItemStack to check + * @return if the item can receive energy + */ + public boolean canReceive(ItemStack itemStack); + + /** + * Gets and returns whether or not this item can send energy to a charging slot. + * @param itemStack - the ItemStack to check + * @return if the item can send energy + */ + public boolean canSend(ItemStack itemStack); + + /** + * Returns whether or not this item contains metadata-specific subtypes instead of using metadata for damage display. + * @return if the item contains metadata-specific subtypes + */ + public boolean isMetadataSpecific(ItemStack itemStack); +} diff --git a/src/api/java/mekanism/api/energy/IStrictEnergyAcceptor.java b/src/api/java/mekanism/api/energy/IStrictEnergyAcceptor.java new file mode 100644 index 000000000..53edc68e6 --- /dev/null +++ b/src/api/java/mekanism/api/energy/IStrictEnergyAcceptor.java @@ -0,0 +1,25 @@ +package mekanism.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this if your TileEntity can accept energy at a floating-point double value from Universal Cables. + * @author AidanBrady + * + */ +public interface IStrictEnergyAcceptor extends IStrictEnergyStorage +{ + /** + * Transfer a certain amount of energy to this acceptor. + * @param amount - amount to transfer + * @return energy used + */ + public double transferEnergyToAcceptor(ForgeDirection side, double amount); + + /** + * Whether or not this tile entity accepts energy from a certain side. + * @param side - side to check + * @return if tile entity accepts energy + */ + public boolean canReceiveEnergy(ForgeDirection side); +} diff --git a/src/api/java/mekanism/api/energy/IStrictEnergyStorage.java b/src/api/java/mekanism/api/energy/IStrictEnergyStorage.java new file mode 100644 index 000000000..fd560fa18 --- /dev/null +++ b/src/api/java/mekanism/api/energy/IStrictEnergyStorage.java @@ -0,0 +1,27 @@ +package mekanism.api.energy; + +/** + * Mekanism-specific energy storage for TileEntities, already implemented in IStrictEnergyAcceptor. + * @author aidancbrady + * + */ +public interface IStrictEnergyStorage +{ + /** + * Gets the amount of energy this TileEntity is currently storing. + * @return stored energy + */ + public double getEnergy(); + + /** + * Sets the amount of stored energy of this TileEntity to a new amount. + * @param energy - new energy value + */ + public void setEnergy(double energy); + + /** + * Gets the maximum amount of energy this TileEntity can store. + * @return maximum energy + */ + public double getMaxEnergy(); +} diff --git a/src/api/java/mekanism/api/gas/FuelHandler.java b/src/api/java/mekanism/api/gas/FuelHandler.java new file mode 100644 index 000000000..7f61f7651 --- /dev/null +++ b/src/api/java/mekanism/api/gas/FuelHandler.java @@ -0,0 +1,59 @@ +package mekanism.api.gas; + +import java.util.HashMap; + +import net.minecraftforge.fluids.FluidContainerRegistry; +import buildcraft.api.fuels.IronEngineFuel; +import buildcraft.api.fuels.IronEngineFuel.Fuel; +import cpw.mods.fml.common.ModAPIManager; + +public class FuelHandler +{ + + public static HashMap fuels = new HashMap(); + + public static void addGas(Gas gas, int burnTicks, double energyPerMilliBucket) + { + fuels.put( gas.getName(), new FuelGas( burnTicks, energyPerMilliBucket ) ); + } + + public static FuelGas getFuel(Gas gas) + { + if ( fuels.containsKey( gas.getName() ) ) + { + return fuels.get( gas.getName() ); + } + + if ( ModAPIManager.INSTANCE.hasAPI( "BuildCraftAPI|fuel" ) && gas.hasFluid() ) + { + Fuel bcFuel = IronEngineFuel.getFuelForFluid( gas.getFluid() ); + + if ( bcFuel != null ) + { + FuelGas fuel = new FuelGas( bcFuel ); + fuels.put( gas.getName(), fuel ); + + return fuel; + } + } + + return null; + } + + public static class FuelGas + { + + public int burnTicks; + public double energyPerTick; + + public FuelGas(int duration, double energyDensity) { + burnTicks = duration; + energyPerTick = energyDensity / duration; + } + + public FuelGas(Fuel bcFuel) { + burnTicks = bcFuel.totalBurningTime / FluidContainerRegistry.BUCKET_VOLUME; + energyPerTick = bcFuel.powerPerCycle * 1; + } + } +} diff --git a/src/api/java/mekanism/api/gas/Gas.java b/src/api/java/mekanism/api/gas/Gas.java new file mode 100644 index 000000000..f05be52c6 --- /dev/null +++ b/src/api/java/mekanism/api/gas/Gas.java @@ -0,0 +1,221 @@ +package mekanism.api.gas; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +/** + * Gas - a class used to set specific properties of gasses when used or seen in-game. + * @author aidancbrady + * + */ +public class Gas +{ + private String name; + + private String unlocalizedName; + + private Fluid fluid; + + private IIcon icon; + + private boolean visible = true; + + private boolean from_fluid = false; + + /** + * Creates a new Gas object with a defined name or key value. + * @param s - name or key to associate this Gas with + */ + public Gas(String s) + { + unlocalizedName = name = s; + } + + /** + * Creates a new Gas object that corresponds to the given Fluid + */ + public Gas(Fluid f) + { + unlocalizedName = name = f.getName(); + icon = f.getStillIcon(); + fluid = f; + from_fluid = true; + } + + /** + * Gets the name (key) of this Gas. This is NOT a translated or localized display name. + * @return this Gas's name or key + */ + public String getName() + { + return name; + } + + /** + * Whether or not this is a visible gas. + * @return if this gas is visible + */ + public boolean isVisible() + { + return visible; + } + + /** + * Sets this gas's "visible" state to a new value. Setting it to 'false' will treat this gas as an internal gas, and it will not be displayed or accessed by other mods. + * @param v - new visible state + * @return this Gas object + */ + public Gas setVisible(boolean v) + { + visible = v; + + return this; + } + + /** + * Gets the unlocalized name of this Gas. + * @return this Gas's unlocalized name + */ + public String getUnlocalizedName() + { + return "gas." + unlocalizedName; + } + + /** + * Translates this Gas's unlocalized name and returns it as localized. + * @return this Gas's localized name + */ + public String getLocalizedName() + { + return StatCollector.translateToLocal(getUnlocalizedName()); + } + + /** + * Sets the unlocalized name of this Gas. + * @param s - unlocalized name to set + * @return this Gas object + */ + public Gas setUnlocalizedName(String s) + { + unlocalizedName = s; + + return this; + } + + /** + * Gets the IIcon associated with this Gas. + * @return associated IIcon + */ + public IIcon getIcon() + { + if(from_fluid) + { + return this.getFluid().getIcon(); + } + + return icon; + } + + /** + * Sets this gas's icon. + * @param i - IIcon to associate with this Gas + * @return this Gas object + */ + public Gas setIcon(IIcon i) + { + icon = i; + + if(hasFluid()) + { + fluid.setIcons(getIcon()); + } + + from_fluid = false; + + return this; + } + + /** + * Gets the ID associated with this gas. + * @return the associated gas ID + */ + public int getID() + { + return GasRegistry.getGasID(this); + } + + /** + * Writes this Gas to a defined tag compound. + * @param nbtTags - tag compound to write this Gas to + * @return the tag compound this gas was written to + */ + public NBTTagCompound write(NBTTagCompound nbtTags) + { + nbtTags.setString("gasName", getName()); + + return nbtTags; + } + + /** + * Returns the Gas stored in the defined tag compound. + * @param nbtTags - tag compound to get the Gas from + * @return Gas stored in the tag compound + */ + public static Gas readFromNBT(NBTTagCompound nbtTags) + { + if(nbtTags == null || nbtTags.hasNoTags()) + { + return null; + } + + return GasRegistry.getGas(nbtTags.getString("gasName")); + } + + /** + * Whether or not this Gas has an associated fluid. + * @return if this gas has a fluid + */ + public boolean hasFluid() + { + return fluid != null; + } + + /** + * Gets the fluid associated with this Gas. + * @return fluid associated with this gas + */ + public Fluid getFluid() + { + return fluid; + } + + /** + * Registers a new fluid out of this Gas or gets one from the FluidRegistry. + * @return this Gas object + */ + public Gas registerFluid() + { + if(fluid == null) + { + if(FluidRegistry.getFluid(getName()) == null) + { + fluid = new Fluid(getName()).setGaseous(true); + FluidRegistry.registerFluid(fluid); + } + else { + fluid = FluidRegistry.getFluid(getName()); + } + } + + return this; + } + + @Override + public String toString() + { + return name; + } +} diff --git a/src/api/java/mekanism/api/gas/GasNetwork.java b/src/api/java/mekanism/api/gas/GasNetwork.java new file mode 100644 index 000000000..0248c614b --- /dev/null +++ b/src/api/java/mekanism/api/gas/GasNetwork.java @@ -0,0 +1,477 @@ +package mekanism.api.gas; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import mekanism.api.Coord4D; +import mekanism.api.ListUtils; +import mekanism.api.transmitters.DynamicNetwork; +import mekanism.api.transmitters.IGridTransmitter; +import mekanism.api.transmitters.ITransmitterNetwork; +import mekanism.api.transmitters.TransmissionType; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.Event; + +/** + * A DynamicNetwork extension created specifically for the transfer of Gasses. By default this is server-only, but if ticked on + * the client side and if it's posted events are handled properly, it has the capability to visually display gasses network-wide. + * @author aidancbrady + * + */ +public class GasNetwork extends DynamicNetwork +{ + public int transferDelay = 0; + + public boolean didTransfer; + public boolean prevTransfer; + + public float gasScale; + + public Gas refGas; + + public GasStack gasStored; + public int prevStored; + + public int prevTransferAmount = 0; + + public GasNetwork(IGridTransmitter... varPipes) + { + transmitters.addAll(Arrays.asList(varPipes)); + updateCapacity(); + register(); + } + + public GasNetwork(Collection> collection) + { + transmitters.addAll(collection); + updateCapacity(); + register(); + } + + public GasNetwork(Set networks) + { + for(GasNetwork net : networks) + { + if(net != null) + { + if(FMLCommonHandler.instance().getEffectiveSide().isClient()) + { + if(net.refGas != null && net.gasScale > gasScale) + { + gasScale = net.gasScale; + refGas = net.refGas; + gasStored = net.gasStored; + + net.gasScale = 0; + net.refGas = null; + net.gasStored = null; + } + } + else { + if(net.gasStored != null) + { + if(gasStored == null) + { + gasStored = net.gasStored; + } + else { + gasStored.amount += net.gasStored.amount; + } + + net.gasStored = null; + } + } + + addAllTransmitters(net.transmitters); + net.deregister(); + } + } + + gasScale = getScale(); + + updateCapacity(); + fullRefresh(); + register(); + } + + @Override + public void onNetworksCreated(List networks) + { + if(gasStored != null && FMLCommonHandler.instance().getEffectiveSide().isServer()) + { + int[] caps = new int[networks.size()]; + int cap = 0; + + for(GasNetwork network : networks) + { + caps[networks.indexOf(network)] = network.getCapacity(); + cap += network.getCapacity(); + } + + gasStored.amount = Math.min(cap, gasStored.amount); + + int[] values = ListUtils.calcPercentInt(ListUtils.percent(caps), gasStored.amount); + + for(GasNetwork network : networks) + { + int index = networks.indexOf(network); + + if(values[index] > 0) + { + network.gasStored = new GasStack(gasStored.getGas(), values[index]); + network.refGas = gasStored.getGas(); + } + } + } + + gasScale = 0; + refGas = null; + gasStored = null; + } + + public synchronized int getGasNeeded() + { + return getCapacity()-(gasStored != null ? gasStored.amount : 0); + } + + public synchronized int tickEmit(GasStack stack) + { + List availableAcceptors = Arrays.asList(getAcceptors(stack.getGas()).toArray()); + + Collections.shuffle(availableAcceptors); + + int toSend = stack.amount; + int prevSending = toSend; + + if(!availableAcceptors.isEmpty()) + { + int divider = availableAcceptors.size(); + int remaining = toSend % divider; + int sending = (toSend-remaining)/divider; + + for(Object obj : availableAcceptors) + { + if(obj instanceof IGasHandler) + { + IGasHandler acceptor = (IGasHandler)obj; + + int currentSending = sending; + + if(remaining > 0) + { + currentSending++; + remaining--; + } + + toSend -= acceptor.receiveGas(acceptorDirections.get(acceptor).getOpposite(), new GasStack(stack.getGas(), currentSending)); + } + } + } + + int sent = prevSending-toSend; + + if(sent > 0 && FMLCommonHandler.instance().getEffectiveSide().isServer()) + { + didTransfer = true; + transferDelay = 2; + } + + return sent; + } + + public synchronized int emit(GasStack stack) + { + if(gasStored != null && gasStored.getGas() != stack.getGas()) + { + return 0; + } + + int toUse = Math.min(getGasNeeded(), stack.amount); + + if(gasStored == null) + { + gasStored = stack.copy(); + gasStored.amount = toUse; + } + else { + gasStored.amount += toUse; + } + + return toUse; + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if(FMLCommonHandler.instance().getEffectiveSide().isServer()) + { + prevTransferAmount = 0; + + if(transferDelay == 0) + { + didTransfer = false; + } + else { + transferDelay--; + } + + int stored = gasStored != null ? gasStored.amount : 0; + + if(stored != prevStored) + { + needsUpdate = true; + } + + prevStored = stored; + + if(didTransfer != prevTransfer || needsUpdate) + { + MinecraftForge.EVENT_BUS.post(new GasTransferEvent(this, gasStored, didTransfer)); + needsUpdate = false; + } + + prevTransfer = didTransfer; + + if(gasStored != null) + { + prevTransferAmount = tickEmit(gasStored); + gasStored.amount -= prevTransferAmount; + + if(gasStored.amount <= 0) + { + gasStored = null; + } + } + } + } + + @Override + public void clientTick() + { + super.clientTick(); + + gasScale = Math.max(gasScale, getScale()); + + if(didTransfer && gasScale < 1) + { + gasScale = Math.max(getScale(), Math.min(1, gasScale+0.02F)); + } + else if(!didTransfer && gasScale > 0) + { + gasScale = Math.max(getScale(), Math.max(0, gasScale-0.02F)); + + if(gasScale == 0) + { + gasStored = null; + } + } + } + + @Override + public synchronized Set getAcceptors(Object... data) + { + Gas type = (Gas)data[0]; + Set toReturn = new HashSet(); + + for(IGasHandler acceptor : possibleAcceptors.values()) + { + if(acceptorDirections.get(acceptor) == null) + { + continue; + } + + if(acceptor.canReceiveGas(acceptorDirections.get(acceptor).getOpposite(), type)) + { + toReturn.add(acceptor); + } + } + + return toReturn; + } + + @Override + public synchronized void refresh() + { + Set> iterTubes = (Set>)transmitters.clone(); + Iterator> it = iterTubes.iterator(); + boolean networkChanged = false; + + while(it.hasNext()) + { + IGridTransmitter conductor = (IGridTransmitter)it.next(); + + if(conductor == null || conductor.getTile().isInvalid()) + { + it.remove(); + networkChanged = true; + transmitters.remove(conductor); + } + else { + conductor.setTransmitterNetwork(this); + } + } + + if(networkChanged) + { + updateCapacity(); + } + } + + @Override + public synchronized void refresh(IGridTransmitter transmitter) + { + IGasHandler[] acceptors = GasTransmission.getConnectedAcceptors(transmitter.getTile()); + + clearAround(transmitter); + + for(IGasHandler acceptor : acceptors) + { + ForgeDirection side = ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor)); + + if(side != null && acceptor != null && !(acceptor instanceof IGridTransmitter) && transmitter.canConnectToAcceptor(side, true)) + { + possibleAcceptors.put(Coord4D.get((TileEntity)acceptor), acceptor); + acceptorDirections.put(acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor))); + } + } + } + + public static class GasTransferEvent extends Event + { + public final GasNetwork gasNetwork; + + public final GasStack transferType; + public final boolean didTransfer; + + public GasTransferEvent(GasNetwork network, GasStack type, boolean did) + { + gasNetwork = network; + transferType = type; + didTransfer = did; + } + } + + public float getScale() + { + return Math.min(1, (gasStored == null || getCapacity() == 0 ? 0 : (float)gasStored.amount/getCapacity())); + } + + @Override + public String toString() + { + return "[GasNetwork] " + transmitters.size() + " transmitters, " + possibleAcceptors.size() + " acceptors."; + } + + @Override + public boolean canMerge(List> networks) + { + Gas found = null; + + for(ITransmitterNetwork network : networks) + { + if(network instanceof GasNetwork) + { + GasNetwork net = (GasNetwork)network; + + if(net.gasStored != null) + { + if(found != null && found != net.gasStored.getGas()) + { + return false; + } + + found = net.gasStored.getGas(); + } + } + } + + return true; + } + + @Override + protected GasNetwork create(IGridTransmitter... varTransmitters) + { + GasNetwork network = new GasNetwork(varTransmitters); + network.refGas = refGas; + + if(gasStored != null) + { + if(network.gasStored == null) + { + network.gasStored = gasStored; + } + else { + network.gasStored.amount += gasStored.amount; + } + } + + network.gasScale = network.getScale(); + gasScale = 0; + refGas = null; + gasStored = null; + + return network; + } + + @Override + protected GasNetwork create(Collection> collection) + { + GasNetwork network = new GasNetwork(collection); + network.refGas = refGas; + + if(gasStored != null) + { + if(network.gasStored == null) + { + network.gasStored = gasStored; + } + else { + network.gasStored.amount += gasStored.amount; + } + } + + network.gasScale = network.getScale(); + + return network; + } + + @Override + protected GasNetwork create(Set networks) + { + return new GasNetwork(networks); + } + + @Override + public TransmissionType getTransmissionType() + { + return TransmissionType.GAS; + } + + @Override + public String getNeededInfo() + { + return Integer.toString(getGasNeeded()); + } + + @Override + public String getStoredInfo() + { + return gasStored != null ? gasStored.getGas().getLocalizedName() + " (" + gasStored.amount + ")" : "None"; + } + + @Override + public String getFlowInfo() + { + return Integer.toString(prevTransferAmount) + "/t"; + } +} diff --git a/src/api/java/mekanism/api/gas/GasRegistry.java b/src/api/java/mekanism/api/gas/GasRegistry.java new file mode 100644 index 000000000..25db9667e --- /dev/null +++ b/src/api/java/mekanism/api/gas/GasRegistry.java @@ -0,0 +1,113 @@ +package mekanism.api.gas; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraftforge.fluids.Fluid; + +public class GasRegistry +{ + private static ArrayList registeredGasses = new ArrayList(); + + /** + * Register a new gas into GasRegistry. + * @param gas - Gas to register + * @return the gas that has been registered, pulled right out of GasRegistry + */ + public static Gas register(Gas gas) + { + if(gas == null) + { + return null; + } + + registeredGasses.add(gas); + + return getGas(gas.getName()); + } + + /** + * Gets the gas associated with the defined ID. + * @param id - ID to check + * @return gas associated with defined ID + */ + public static Gas getGas(int id) + { + if(id == -1) + { + return null; + } + + return registeredGasses.get(id); + } + + /** + * Gets the gas associated with the defined fluid. + * @param f - fluid to check + * @return the gas associated with the fluid + */ + public static Gas getGas(Fluid f) + { + for(Gas gas : getRegisteredGasses()) + { + if(gas.hasFluid() && gas.getFluid() == f) + { + return gas; + } + } + + return null; + } + + /** + * Whether or not GasRegistry contains a gas with the specified name + * @param name - name to check + * @return if GasRegistry contains a gas with the defined name + */ + public static boolean containsGas(String name) + { + return getGas(name) != null; + } + + /** + * Gets the list of all gasses registered in GasRegistry. + * @return a cloned list of all registered gasses + */ + public static List getRegisteredGasses() + { + return (List)registeredGasses.clone(); + } + + /** + * Gets the gas associated with the specified name. + * @param name - name of the gas to get + * @return gas associated with the name + */ + public static Gas getGas(String name) + { + for(Gas gas : registeredGasses) + { + if(gas.getName().toLowerCase().equals(name.toLowerCase())) + { + return gas; + } + } + + return null; + } + + /** + * Gets the gas ID of a specified gas. + * @param gas - gas to get the ID from + * @return gas ID + */ + public static int getGasID(Gas gas) + { + if(gas == null || !containsGas(gas.getName())) + { + return -1; + } + + return registeredGasses.indexOf(gas); + } +} diff --git a/src/api/java/mekanism/api/gas/GasStack.java b/src/api/java/mekanism/api/gas/GasStack.java new file mode 100644 index 000000000..0f3f40bfb --- /dev/null +++ b/src/api/java/mekanism/api/gas/GasStack.java @@ -0,0 +1,119 @@ +package mekanism.api.gas; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * GasStack - a specified amount of a defined Gas with certain properties. + * @author aidancbrady + * + */ +public class GasStack +{ + private Gas type; + + public int amount; + + /** + * Creates a new GasStack with a defined gas ID and quantity. + * @param id - gas ID to associate this GasStack to, will perform a GasRegistry lookup in the constructor + * @param quantity - amount of gas to be referenced in this GasStack + */ + public GasStack(int id, int quantity) + { + type = GasRegistry.getGas(id); + amount = quantity; + } + + /** + * Creates a new GasStack with a defined Gas type and quantity. + * @param gas - gas type of the stack + * @param quantity - amount of gas to be referenced in this GasStack + */ + public GasStack(Gas gas, int quantity) + { + type = gas; + amount = quantity; + } + + private GasStack() {} + + /** + * Gets the Gas type of this GasStack. + * @return this GasStack's Gas type + */ + public Gas getGas() + { + return type; + } + + /** + * Writes this GasStack to a defined tag compound. + * @param nbtTags - tag compound to write to + * @return tag compound with this GasStack's data + */ + public NBTTagCompound write(NBTTagCompound nbtTags) + { + type.write(nbtTags); + nbtTags.setInteger("amount", amount); + + return nbtTags; + } + + /** + * Reads this GasStack's data from a defined tag compound. + * @param nbtTags - tag compound to read from + */ + public void read(NBTTagCompound nbtTags) + { + type = Gas.readFromNBT(nbtTags); + amount = nbtTags.getInteger("amount"); + } + + /** + * Returns the GasStack stored in the defined tag compound, or null if it doesn't exist. + * @param nbtTags - tag compound to read from + * @return GasStack stored in the tag compound + */ + public static GasStack readFromNBT(NBTTagCompound nbtTags) + { + if(nbtTags == null || nbtTags.hasNoTags()) + { + return null; + } + + GasStack stack = new GasStack(); + stack.read(nbtTags); + + if(stack.getGas() == null) + { + return null; + } + + return stack; + } + + /** + * Returns a copied form of this GasStack. + * @return copied GasStack + */ + public GasStack copy() + { + return new GasStack(type, amount); + } + + /** + * Whether or not this GasStack's gas type is equal to the other defined GasStack. + * @param stack - GasStack to check + * @return if the GasStacks contain the same gas type + */ + public boolean isGasEqual(GasStack stack) + { + return stack != null && getGas() == stack.getGas(); + } + + @Override + public String toString() + { + return "[" + type + ", " + amount + "]"; + } +} diff --git a/src/api/java/mekanism/api/gas/GasTank.java b/src/api/java/mekanism/api/gas/GasTank.java new file mode 100644 index 000000000..7aa5ad5ba --- /dev/null +++ b/src/api/java/mekanism/api/gas/GasTank.java @@ -0,0 +1,241 @@ +package mekanism.api.gas; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * An optional way of managing and/or storing gasses. Would be very useful in TileEntity and Entity gas storage. + * @author aidancbrady + * + */ +public class GasTank +{ + public GasStack stored; + + private int maxGas; + + private GasTank() {} + + /** + * Creates a tank with a defined capacity. + * @param max - the maximum amount of gas this GasTank can hold + */ + public GasTank(int max) + { + maxGas = max; + } + + /** + * Sets this tank's GasStack value to a new value. Will cap the amount to this GasTank's capacity. + * @param stack - value to set this tank's GasStack value to + */ + public void setGas(GasStack stack) + { + stored = stack; + + if(stored != null) + { + stored.amount = Math.min(getMaxGas(), stored.amount); + } + } + + /** + * Draws a specified amount of gas out of this tank. + * @param amount - amount to draw + * @param doDraw - if the gas should actually be removed from this tank + * @return gas taken from this GasTank as a GasStack value + */ + public GasStack draw(int amount, boolean doDraw) + { + if(stored == null || amount <= 0) + { + return null; + } + + GasStack ret = new GasStack(getGas().getGas(), Math.min(getStored(), amount)); + + if(ret.amount > 0) + { + if(doDraw) + { + stored.amount -= ret.amount; + + if(stored.amount <= 0) + { + stored = null; + } + } + + return ret; + } + + return null; + } + + /** + * Adds a specified amount of gas to this tank. + * @param amount - the GasStack for this tank to receive + * @param doReceive - if the gas should actually be added to this tank + * @return the amount of gas accepted by this tank + */ + public int receive(GasStack amount, boolean doReceive) + { + if(amount == null || (stored != null && stored.amount == getMaxGas())) + { + return 0; + } + + int toFill = Math.min(getMaxGas()-getStored(), amount.amount); + + if(doReceive) + { + if(stored == null) + { + stored = amount.copy(); + } + else { + stored.amount = Math.min(getMaxGas(), getStored()+amount.amount); + } + } + + return toFill; + } + + /** + * If this GasTank can receive the specified type of gas. Will return false if this tank does not need anymore gas. + * @param gas - gas to check + * @return if this GasTank can accept the defined gas + */ + public boolean canReceive(Gas gas) + { + if(getNeeded() == 0 || stored != null && (gas != null && gas != stored.getGas())) + { + return false; + } + + return true; + } + + /** + * If this GasTank can receive the specified type of gas. Will return TRUE if this tank does not need anymore gas. + * @param gas - gas to check + * @return if this GasTank can accept the defined gas + */ + public boolean canReceiveType(Gas gas) + { + if(stored != null && (gas != null && gas != stored.getGas())) + { + return false; + } + + return true; + } + + /** + * If this GasTank can be drawn of the specified type of gas. Will return false if this tank does not contain any gas. + * @param gas - gas to check + * @return if this GasTank can be drawn of the defined gas + */ + public boolean canDraw(Gas gas) + { + if(stored == null || (gas != null && gas != stored.getGas())) + { + return false; + } + + return true; + } + + /** + * Gets the amount of gas needed by this GasTank. + * @return + */ + public int getNeeded() + { + return getMaxGas()-getStored(); + } + + /** + * Gets the maximum amount of gas this tank can hold. + * @return - max gas + */ + public int getMaxGas() + { + return maxGas; + } + + /** + * Gets the GasStack held by this GasTank. + * @return - GasStakc held by this tank + */ + public GasStack getGas() + { + return stored; + } + + /** + * Gets the type of gas currently stored in this GasTank. + * @return gas type contained + */ + public Gas getGasType() + { + return stored != null ? stored.getGas() : null; + } + + /** + * Gets the amount of gas stored by this GasTank. + * @return amount of gas stored + */ + public int getStored() + { + return stored != null ? stored.amount : 0; + } + + /** + * Writes this tank to a defined tag compound. + * @param nbtTags - tag compound to write to + * @return tag compound with this tank's data + */ + public NBTTagCompound write(NBTTagCompound nbtTags) + { + if(stored != null) + { + nbtTags.setTag("stored", stored.write(new NBTTagCompound())); + } + + nbtTags.setInteger("maxGas", maxGas); + + return nbtTags; + } + + /** + * Reads this tank's data from a defined tag compound. + * @param nbtTags - tag compound to read from + */ + public void read(NBTTagCompound nbtTags) + { + if(nbtTags.hasKey("stored")) + { + stored = GasStack.readFromNBT(nbtTags.getCompoundTag("stored")); + } + + maxGas = nbtTags.getInteger("maxGas"); + } + + /** + * Returns the tank stored in the defined tag compound, or null if it doesn't exist. + * @param nbtTags - tag compound to read from + * @return tank stored in the tag compound + */ + public static GasTank readFromNBT(NBTTagCompound nbtTags) + { + if(nbtTags == null || nbtTags.hasNoTags()) + { + return null; + } + + GasTank tank = new GasTank(); + tank.read(nbtTags); + + return tank; + } +} diff --git a/src/api/java/mekanism/api/gas/GasTransmission.java b/src/api/java/mekanism/api/gas/GasTransmission.java new file mode 100644 index 000000000..c90914116 --- /dev/null +++ b/src/api/java/mekanism/api/gas/GasTransmission.java @@ -0,0 +1,141 @@ +package mekanism.api.gas; + +import mekanism.api.Coord4D; +import mekanism.api.transmitters.IGridTransmitter; +import mekanism.api.transmitters.TransmissionType; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +/** + * A handy class containing several utilities for efficient gas transfer. + * @author AidanBrady + * + */ +public final class GasTransmission +{ + /** + * Gets all the tubes around a tile entity. + * @param tileEntity - center tile entity + * @return array of TileEntities + */ + public static TileEntity[] getConnectedTubes(TileEntity tileEntity) + { + TileEntity[] tubes = new TileEntity[] {null, null, null, null, null, null}; + + for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) + { + TileEntity tube = Coord4D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.getWorldObj()); + + if(TransmissionType.checkTransmissionType(tube, TransmissionType.GAS, tileEntity)) + { + tubes[orientation.ordinal()] = tube; + } + } + + return tubes; + } + + /** + * Gets all the acceptors around a tile entity. + * @param tileEntity - center tile entity + * @return array of IGasAcceptors + */ + public static IGasHandler[] getConnectedAcceptors(TileEntity tileEntity) + { + IGasHandler[] acceptors = new IGasHandler[] {null, null, null, null, null, null}; + + for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) + { + TileEntity acceptor = Coord4D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.getWorldObj()); + + if(acceptor instanceof IGasHandler) + { + acceptors[orientation.ordinal()] = (IGasHandler)acceptor; + } + } + + return acceptors; + } + + /** + * Gets all the tube connections around a tile entity. + * @param tileEntity - center tile entity + * @return array of ITubeConnections + */ + public static ITubeConnection[] getConnections(TileEntity tileEntity) + { + ITubeConnection[] connections = new ITubeConnection[] {null, null, null, null, null, null}; + + for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) + { + TileEntity connection = Coord4D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.getWorldObj()); + + if(canConnect(connection, orientation)) + { + connections[orientation.ordinal()] = (ITubeConnection)connection; + } + } + + return connections; + } + + /** + * Whether or not a TileEntity can connect to a specified tile on a specified side. + * @param tileEntity - TileEntity to attempt connection to + * @param side - side to attempt connection on + * @return if this tile and side are connectable + */ + public static boolean canConnect(TileEntity tileEntity, ForgeDirection side) + { + if(tileEntity instanceof ITubeConnection && (!(tileEntity instanceof IGasTransmitter) || TransmissionType.checkTransmissionType(tileEntity, TransmissionType.GAS, tileEntity))) + { + if(((ITubeConnection)tileEntity).canTubeConnect(side.getOpposite())) + { + return true; + } + } + + return false; + } + + /** + * Removes a specified amount of gas from an IGasItem. + * @param itemStack - ItemStack of the IGasItem + * @param type - type of gas to remove from the IGasItem, null if it doesn't matter + * @param amount - amount of gas to remove from the ItemStack + * @return the GasStack removed by the IGasItem + */ + public static GasStack removeGas(ItemStack itemStack, Gas type, int amount) + { + if(itemStack != null && itemStack.getItem() instanceof IGasItem) + { + IGasItem item = (IGasItem)itemStack.getItem(); + + if(type != null && item.getGas(itemStack) != null && item.getGas(itemStack).getGas() != type || !item.canProvideGas(itemStack, type)) + { + return null; + } + + return item.removeGas(itemStack, amount); + } + + return null; + } + + /** + * Adds a specified amount of gas to an IGasItem. + * @param itemStack - ItemStack of the IGasItem + * @param stack - stack to add to the IGasItem + * @return amount of gas accepted by the IGasItem + */ + public static int addGas(ItemStack itemStack, GasStack stack) + { + if(itemStack != null && itemStack.getItem() instanceof IGasItem && ((IGasItem)itemStack.getItem()).canReceiveGas(itemStack, stack.getGas())) + { + return ((IGasItem)itemStack.getItem()).addGas(itemStack, stack.copy()); + } + + return 0; + } +} diff --git a/src/api/java/mekanism/api/gas/IGasHandler.java b/src/api/java/mekanism/api/gas/IGasHandler.java new file mode 100644 index 000000000..8723da69a --- /dev/null +++ b/src/api/java/mekanism/api/gas/IGasHandler.java @@ -0,0 +1,41 @@ +package mekanism.api.gas; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this if your tile entity accepts gas from an external source. + * @author AidanBrady + * + */ +public interface IGasHandler +{ + /** + * Transfer a certain amount of gas to this block. + * @param stack - gas to add + * @return gas added + */ + public int receiveGas(ForgeDirection side, GasStack stack); + + /** + * Draws a certain amount of gas from this block. + * @param amount - amount to draw + * @return gas drawn + */ + public GasStack drawGas(ForgeDirection side, int amount); + + /** + * Whether or not this block can accept gas from a certain side. + * @param side - side to check + * @param type - type of gas to check + * @return if block accepts gas + */ + public boolean canReceiveGas(ForgeDirection side, Gas type); + + /** + * Whether or not this block can be drawn of gas from a certain side. + * @param side - side to check + * @param type - type of gas to check + * @return if block can be drawn of gas + */ + public boolean canDrawGas(ForgeDirection side, Gas type); +} diff --git a/src/api/java/mekanism/api/gas/IGasItem.java b/src/api/java/mekanism/api/gas/IGasItem.java new file mode 100644 index 000000000..9c7d33230 --- /dev/null +++ b/src/api/java/mekanism/api/gas/IGasItem.java @@ -0,0 +1,81 @@ +package mekanism.api.gas; + +import net.minecraft.item.ItemStack; + +/** + * Implement this in your item class if it can store or transfer certain gasses. + * @author AidanBrady + * + */ +public interface IGasItem +{ + /** + * Gets the rate of transfer this item can handle. + * @return + */ + public int getRate(ItemStack itemstack); + + /** + * Adds a defined amount of a certain gas to an item. + * @param itemstack - the itemstack to add gas to + * @param type - the type of gas to add + * @param amount - the amount of gas to add + * @return the gas that was accepted by the item + */ + public int addGas(ItemStack itemstack, GasStack stack); + + /** + * Removes the defined amount of a certain gas from the item. + * @param itemstack - the itemstack to remove gas from + * @param type - the type of gas to remove + * @param amount - the amount of gas to remove + * @return the gas that was removed by the item + */ + public GasStack removeGas(ItemStack itemstack, int amount); + + /** + * Whether or not this storage tank be given a specific gas. + * @param itemstack - the itemstack to check + * @param type - the type of gas the tank can possibly receive + * @return if the item be charged + */ + public boolean canReceiveGas(ItemStack itemstack, Gas type); + + /** + * Whether or not this item can give a gas receiver a certain type of gas. + * @param itemstack - the itemstack to check + * @param type - the type of gas the tank can provide + * @return if the item can provide gas + */ + public boolean canProvideGas(ItemStack itemstack, Gas type); + + /** + * Get the gas of a declared type. + * @param type - type of gas + * @param data - ItemStack parameter if necessary + * @return gas stored + */ + public GasStack getGas(ItemStack itemstack); + + /** + * Set the gas of a declared type to a new amount; + * @param type - type of gas + * @param data - ItemStack parameter if necessary + * @param amount - amount to store + */ + public void setGas(ItemStack itemstack, GasStack stack); + + /** + * Gets the maximum amount of gas this tile entity can store. + * @param type - type of gas + * @param data - ItemStack parameter if necessary + * @return maximum gas + */ + public int getMaxGas(ItemStack itemstack); + + /** + * Returns whether or not this item contains metadata-specific subtypes instead of using metadata for damage display. + * @return if the item contains metadata-specific subtypes + */ + public boolean isMetadataSpecific(ItemStack itemstack); +} diff --git a/src/api/java/mekanism/api/gas/IGasTransmitter.java b/src/api/java/mekanism/api/gas/IGasTransmitter.java new file mode 100644 index 000000000..63eb02fd1 --- /dev/null +++ b/src/api/java/mekanism/api/gas/IGasTransmitter.java @@ -0,0 +1,9 @@ +package mekanism.api.gas; + +import mekanism.api.transmitters.IGridTransmitter; +import net.minecraft.tileentity.TileEntity; + +public interface IGasTransmitter extends IGridTransmitter +{ + public boolean canTransferGasToTube(TileEntity tile); +} diff --git a/src/api/java/mekanism/api/gas/ITubeConnection.java b/src/api/java/mekanism/api/gas/ITubeConnection.java new file mode 100644 index 000000000..b669fedda --- /dev/null +++ b/src/api/java/mekanism/api/gas/ITubeConnection.java @@ -0,0 +1,18 @@ +package mekanism.api.gas; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this if your block can connect to Pressurized Tubes. + * @author AidanBrady + * + */ +public interface ITubeConnection +{ + /** + * Whether or not a tube can connect to a certain orientation. + * @param side - orientation to check + * @return if a tube can connect + */ + public boolean canTubeConnect(ForgeDirection side); +} diff --git a/src/api/java/mekanism/api/gas/OreGas.java b/src/api/java/mekanism/api/gas/OreGas.java new file mode 100644 index 000000000..316169c2a --- /dev/null +++ b/src/api/java/mekanism/api/gas/OreGas.java @@ -0,0 +1,38 @@ +package mekanism.api.gas; + +import net.minecraft.util.StatCollector; + +public class OreGas extends Gas +{ + private String oreName; + private OreGas cleanGas; + + public OreGas(String s, String name) + { + super(s); + + oreName = name; + } + + public boolean isClean() + { + return getCleanGas() == null; + } + + public OreGas getCleanGas() + { + return cleanGas; + } + + public OreGas setCleanGas(OreGas gas) + { + cleanGas = gas; + + return this; + } + + public String getOreName() + { + return StatCollector.translateToLocal(oreName); + } +} diff --git a/src/api/java/mekanism/api/infuse/InfuseObject.java b/src/api/java/mekanism/api/infuse/InfuseObject.java new file mode 100644 index 000000000..a86c02f1a --- /dev/null +++ b/src/api/java/mekanism/api/infuse/InfuseObject.java @@ -0,0 +1,21 @@ +package mekanism.api.infuse; + +/** + * InfuseObject - an object associated with an ItemStack that can modify a Metallurgic Infuser's internal infuse. + * @author AidanBrady + * + */ +public class InfuseObject +{ + /** The type of infuse this item stores */ + public InfuseType type; + + /** How much infuse this item stores */ + public int stored; + + public InfuseObject(InfuseType infusion, int i) + { + type = infusion; + stored = i; + } +} diff --git a/src/api/java/mekanism/api/infuse/InfuseRegistry.java b/src/api/java/mekanism/api/infuse/InfuseRegistry.java new file mode 100644 index 000000000..308b9c5be --- /dev/null +++ b/src/api/java/mekanism/api/infuse/InfuseRegistry.java @@ -0,0 +1,113 @@ +package mekanism.api.infuse; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.item.ItemStack; + +/** + * Use this class to add a new object that registers as an infuse object. + * @author AidanBrady + * + */ +public class InfuseRegistry +{ + /** The (private) map of ItemStacks and their related InfuseObjects. */ + private static Map infuseObjects = new HashMap(); + + /** The (private) map of infuse names and their corresponding InfuseTypes. */ + private static Map infuseTypes = new HashMap(); + + /** + * Registers an InfuseType into the registry. Call this in PreInit! + * @param infuse + */ + public static void registerInfuseType(InfuseType infuse) + { + if(infuseTypes.containsKey(infuse.name)) + { + return; + } + + infuseTypes.put(infuse.name, infuse); + } + + /** + * Gets an InfuseType from it's name, or null if it doesn't exist. + * @param name - the name of the InfuseType to get + * @return the name's corresponding InfuseType + */ + public static InfuseType get(String name) + { + if(name.equals("null")) + { + return null; + } + + return infuseTypes.get(name); + } + + /** + * Whether or not the registry contains a correspondent InfuseType to a name. + * @param name - the name to check + * @return if the name has a coorespondent InfuseType + */ + public static boolean contains(String name) + { + return get(name) != null; + } + + /** + * Registers a block or item that serves as an infuse object. An infuse object will store a certain type and amount of infuse, + * and will deliver this amount to the Metallurgic Infuser's buffer of infuse. The item's stack size will be decremented when + * it is placed in the Metallurgic Infuser's infuse slot, and the machine can accept the type and amount of infuse stored in the + * object. + * @param itemStack - stack the infuse object is linked to -- stack size is ignored + * @param infuseObject - the infuse object with the type and amount data + */ + public static void registerInfuseObject(ItemStack itemStack, InfuseObject infuseObject) + { + if(getObject(itemStack) != null) + { + return; + } + + infuseObjects.put(itemStack, infuseObject); + } + + /** + * Gets the InfuseObject data from an ItemStack. + * @param itemStack - the ItemStack to check + * @return the ItemStack's InfuseObject + */ + public static InfuseObject getObject(ItemStack itemStack) + { + for(Map.Entry obj : infuseObjects.entrySet()) + { + if(itemStack.isItemEqual(obj.getKey())) + { + return obj.getValue(); + } + } + + return null; + } + + /** + * Gets the private map for InfuseObjects. + * @return private InfuseObject map + */ + public static final Map getObjectMap() + { + return infuseObjects; + } + + /** + * Gets the private map for InfuseTypes. + * @return private InfuseType map + */ + public static final Map getInfuseMap() + { + return infuseTypes; + } +} diff --git a/src/api/java/mekanism/api/infuse/InfuseType.java b/src/api/java/mekanism/api/infuse/InfuseType.java new file mode 100644 index 000000000..1f5215cb7 --- /dev/null +++ b/src/api/java/mekanism/api/infuse/InfuseType.java @@ -0,0 +1,47 @@ +package mekanism.api.infuse; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; + +/** + * The types of infuse currently available in Mekanism. + * @author AidanBrady + * + */ +public final class InfuseType +{ + /** The name of this infusion */ + public String name; + + /** The location of this infuse's GUI texture */ + public ResourceLocation texture; + + /** The infuse's GUI texture X offset. */ + public int texX; + + /** The infuse's GUI texture Y offset. */ + public int texY; + + /** The unlocalized name of this type. */ + public String unlocalizedName; + + public InfuseType(String s, ResourceLocation location, int x, int y) + { + name = s; + texture = location; + texX = x; + texY = y; + } + + public InfuseType setUnlocalizedName(String name) + { + unlocalizedName = name; + + return this; + } + + public String getLocalizedName() + { + return StatCollector.translateToLocal(unlocalizedName); + } +} diff --git a/src/api/java/mekanism/api/infuse/InfusionInput.java b/src/api/java/mekanism/api/infuse/InfusionInput.java new file mode 100644 index 000000000..edbad48cd --- /dev/null +++ b/src/api/java/mekanism/api/infuse/InfusionInput.java @@ -0,0 +1,32 @@ +package mekanism.api.infuse; + +import net.minecraft.item.ItemStack; + +/** + * An infusion input, containing the type of and amount of infuse the operation requires, as well as the input ItemStack. + * @author AidanBrady + * + */ +public class InfusionInput +{ + /** The type of this infusion */ + public InfuseType infusionType; + + /** How much infuse it takes to perform this operation */ + public int infuseAmount; + + /** The input ItemStack */ + public ItemStack inputStack; + + public InfusionInput(InfuseType infusiontype, int required, ItemStack itemstack) + { + infusionType = infusiontype; + infuseAmount = required; + inputStack = itemstack; + } + + public static InfusionInput getInfusion(InfuseType type, int stored, ItemStack itemstack) + { + return new InfusionInput(type, stored, itemstack); + } +} diff --git a/src/api/java/mekanism/api/infuse/InfusionOutput.java b/src/api/java/mekanism/api/infuse/InfusionOutput.java new file mode 100644 index 000000000..ad6d79a62 --- /dev/null +++ b/src/api/java/mekanism/api/infuse/InfusionOutput.java @@ -0,0 +1,38 @@ +package mekanism.api.infuse; + +import net.minecraft.item.ItemStack; + +/** + * An infusion output, containing a reference to it's input as well as the output resource. + * @author AidanBrady + * + */ +public class InfusionOutput +{ + /** The input infusion */ + public InfusionInput infusionInput; + + /** The output resource of this infusion */ + public ItemStack resource; + + public InfusionOutput(InfusionInput input, ItemStack itemstack) + { + infusionInput = input; + resource = itemstack; + } + + public static InfusionOutput getInfusion(InfusionInput input, ItemStack itemstack) + { + return new InfusionOutput(input, itemstack); + } + + public int getInfuseRequired() + { + return infusionInput.infuseAmount; + } + + public InfusionOutput copy() + { + return new InfusionOutput(infusionInput, resource); + } +} diff --git a/src/api/java/mekanism/api/transmitters/DynamicNetwork.java b/src/api/java/mekanism/api/transmitters/DynamicNetwork.java new file mode 100644 index 000000000..bef1f0d88 --- /dev/null +++ b/src/api/java/mekanism/api/transmitters/DynamicNetwork.java @@ -0,0 +1,526 @@ +package mekanism.api.transmitters; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Set; + +import mekanism.api.Coord4D; +import mekanism.api.IClientTicker; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.Event; + +public abstract class DynamicNetwork> implements ITransmitterNetwork, IClientTicker, INetworkDataHandler +{ + public LinkedHashSet> transmitters = new LinkedHashSet>(); + + public HashMap possibleAcceptors = new HashMap(); + public HashMap acceptorDirections = new HashMap(); + + private List updateQueue = new ArrayList(); + + protected AxisAlignedBB packetRange = null; + + protected int ticksSinceCreate = 0; + + protected int capacity = 0; + protected double meanCapacity = 0; + + protected boolean fixed = false; + + protected boolean needsUpdate = false; + + protected abstract ITransmitterNetwork create(IGridTransmitter... varTransmitters); + + protected abstract ITransmitterNetwork create(Collection> collection); + + protected abstract ITransmitterNetwork create(Set networks); + + protected void clearAround(IGridTransmitter transmitter) + { + for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) + { + Coord4D coord = Coord4D.get(transmitter.getTile()).getFromSide(side); + possibleAcceptors.remove(coord); + acceptorDirections.remove(coord.getTileEntity(transmitter.getTile().getWorldObj())); + } + } + + public void addAllTransmitters(Set> newTransmitters) + { + transmitters.addAll(newTransmitters); + updateCapacity(); + } + + public boolean isFirst(IGridTransmitter transmitter) + { + return transmitters.iterator().next().equals(transmitter); + } + + @Override + public void fullRefresh() + { + possibleAcceptors.clear(); + acceptorDirections.clear(); + + for(IGridTransmitter transmitter : transmitters) + { + refresh(transmitter); + } + + refresh(); + } + + public AxisAlignedBB getPacketRange() + { + if(packetRange == null) + { + return genPacketRange(); + } + + return packetRange; + } + + public int getDimension() + { + if(getSize() == 0) + { + return 0; + } + + return transmitters.iterator().next().getTile().getWorldObj().provider.dimensionId; + } + + protected AxisAlignedBB genPacketRange() + { + if(getSize() == 0) + { + deregister(); + return null; + } + + Coord4D initCoord = Coord4D.get(transmitters.iterator().next().getTile()); + + int minX = initCoord.xCoord; + int minY = initCoord.yCoord; + int minZ = initCoord.zCoord; + int maxX = initCoord.xCoord; + int maxY = initCoord.yCoord; + int maxZ = initCoord.zCoord; + + for(IGridTransmitter transmitter : transmitters) + { + Coord4D coord = Coord4D.get(transmitter.getTile()); + + if(coord.xCoord < minX) minX = coord.xCoord; + if(coord.yCoord < minY) minY = coord.yCoord; + if(coord.zCoord < minZ) minZ = coord.zCoord; + if(coord.xCoord > maxX) maxX = coord.xCoord; + if(coord.yCoord > maxY) maxY = coord.yCoord; + if(coord.zCoord > maxZ) maxZ = coord.zCoord; + } + + minX -= 40; + minY -= 40; + minZ -= 40; + maxX += 40; + maxY += 40; + maxZ += 40; + + return AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX, maxY, maxZ); + } + + @Override + public void removeTransmitter(IGridTransmitter transmitter) + { + transmitters.remove(transmitter); + updateCapacity(); + + if(transmitters.size() == 0) + { + deregister(); + } + } + + @Override + public void register() + { + try { + IGridTransmitter aTransmitter = transmitters.iterator().next(); + + if(aTransmitter instanceof TileEntity) + { + if(!((TileEntity)aTransmitter).getWorldObj().isRemote) + { + TransmitterNetworkRegistry.getInstance().registerNetwork(this); + } + else { + MinecraftForge.EVENT_BUS.post(new ClientTickUpdate(this, (byte)1)); + } + } + } catch(NoSuchElementException e) {} + } + + @Override + public void deregister() + { + transmitters.clear(); + + if(FMLCommonHandler.instance().getEffectiveSide().isServer()) + { + TransmitterNetworkRegistry.getInstance().removeNetwork(this); + } + else { + MinecraftForge.EVENT_BUS.post(new ClientTickUpdate(this, (byte)0)); + } + } + + @Override + public int getSize() + { + return transmitters.size(); + } + + @Override + public int getAcceptorSize() + { + return possibleAcceptors.size(); + } + + public synchronized void updateCapacity() { + updateMeanCapacity(); + capacity = (int)meanCapacity * transmitters.size(); + } + + /** + * Override this if things can have variable capacity along the network. + * @return An 'average' value of capacity. Calculate it how you will. + */ + protected synchronized void updateMeanCapacity() + { + if(transmitters.size() > 0) + { + meanCapacity = transmitters.iterator().next().getCapacity(); + } + else { + meanCapacity = 0; + } + } + + public int getCapacity() + { + return capacity; + } + + public double getMeanCapacity() + { + return meanCapacity; + } + + @Override + public void tick() + { + boolean didFix = false; + + if(!fixed) + { + ticksSinceCreate++; + + if(transmitters.size() == 0) + { + deregister(); + return; + } + + if(ticksSinceCreate > 1200) + { + ticksSinceCreate = 0; + fixMessedUpNetwork(transmitters.iterator().next()); + didFix = true; + } + } + + if(!didFix) + { + onUpdate(); + } + } + + public void onUpdate() + { + if(FMLCommonHandler.instance().getEffectiveSide().isServer()) + { + Iterator i = updateQueue.iterator(); + + try { + while(i.hasNext()) + { + DelayQueue q = i.next(); + + if(q.delay > 0) + { + q.delay--; + } + else { + needsUpdate = true; + i.remove(); + } + } + } catch(Exception e) {} + } + } + + @Override + public synchronized void fixMessedUpNetwork(IGridTransmitter transmitter) + { + if(transmitter instanceof TileEntity) + { + NetworkFinder finder = new NetworkFinder(((TileEntity)transmitter).getWorldObj(), getTransmissionType(), Coord4D.get((TileEntity)transmitter)); + List partNetwork = finder.exploreNetwork(); + Set> newTransporters = new HashSet>(); + + for(Coord4D node : partNetwork) + { + TileEntity nodeTile = node.getTileEntity(((TileEntity)transmitter).getWorldObj()); + + if(TransmissionType.checkTransmissionType(nodeTile, getTransmissionType(), (TileEntity)transmitter)) + { + ((IGridTransmitter)nodeTile).removeFromTransmitterNetwork(); + newTransporters.add((IGridTransmitter)nodeTile); + } + } + + ITransmitterNetwork newNetwork = create(newTransporters); + newNetwork.fullRefresh(); + newNetwork.setFixed(true); + deregister(); + } + } + + @Override + public synchronized void split(IGridTransmitter splitPoint) + { + if(splitPoint instanceof TileEntity) + { + removeTransmitter(splitPoint); + + TileEntity[] connectedBlocks = new TileEntity[6]; + boolean[] dealtWith = {false, false, false, false, false, false}; + List> newNetworks = new ArrayList>(); + + for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) + { + TileEntity sideTile = Coord4D.get((TileEntity)splitPoint).getFromSide(side).getTileEntity(((TileEntity)splitPoint).getWorldObj()); + + if(sideTile != null) + { + connectedBlocks[side.ordinal()] = sideTile; + } + } + + for(int count = 0; count < connectedBlocks.length; count++) + { + TileEntity connectedBlockA = connectedBlocks[count]; + + if(TransmissionType.checkTransmissionType(connectedBlockA, getTransmissionType()) && !dealtWith[count]) + { + NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).getWorldObj(), getTransmissionType(), Coord4D.get(connectedBlockA), Coord4D.get((TileEntity)splitPoint)); + List partNetwork = finder.exploreNetwork(); + + for(int check = count; check < connectedBlocks.length; check++) + { + if(check == count) + { + continue; + } + + TileEntity connectedBlockB = connectedBlocks[check]; + + if(TransmissionType.checkTransmissionType(connectedBlockB, getTransmissionType()) && !dealtWith[check]) + { + if(partNetwork.contains(Coord4D.get(connectedBlockB))) + { + dealtWith[check] = true; + } + } + } + + Set> newNetCables = new HashSet>(); + + for(Coord4D node : finder.iterated) + { + TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).getWorldObj()); + + if(TransmissionType.checkTransmissionType(nodeTile, getTransmissionType())) + { + if(nodeTile != splitPoint) + { + newNetCables.add((IGridTransmitter)nodeTile); + } + } + } + + newNetworks.add(create(newNetCables)); + } + } + + if(newNetworks.size() > 0) + { + onNetworksCreated((List)newNetworks); + + for(ITransmitterNetwork network : newNetworks) + { + network.fullRefresh(); + } + } + + deregister(); + } + } + + @Override + public void onNetworksCreated(List networks) {} + + @Override + public void setFixed(boolean value) + { + fixed = value; + } + + @Override + public boolean needsTicks() + { + return getSize() > 0; + } + + @Override + public void clientTick() + { + ticksSinceCreate++; + + if(ticksSinceCreate == 5 && getSize() > 0) + { + TileEntity tile = (TileEntity)transmitters.iterator().next(); + MinecraftForge.EVENT_BUS.post(new NetworkClientRequest(tile)); + } + } + + @Override + public boolean canMerge(List> networks) + { + return true; + } + + public static class ClientTickUpdate extends Event + { + public DynamicNetwork network; + public byte operation; /*0 remove, 1 add*/ + + public ClientTickUpdate(DynamicNetwork net, byte b) + { + network = net; + operation = b; + } + } + + public static class NetworkClientRequest extends Event + { + public TileEntity tileEntity; + + public NetworkClientRequest(TileEntity tile) + { + tileEntity = tile; + } + } + + public void addUpdate(EntityPlayer player) + { + updateQueue.add(new DelayQueue(player)); + } + + public static class NetworkFinder + { + public TransmissionType transmissionType; + + public World worldObj; + public Coord4D start; + + public List iterated = new ArrayList(); + public List toIgnore = new ArrayList(); + + public NetworkFinder(World world, TransmissionType type, Coord4D location, Coord4D... ignore) + { + worldObj = world; + start = location; + + transmissionType = type; + + if(ignore != null) + { + for(int i = 0; i < ignore.length; i++) + { + toIgnore.add(ignore[i]); + } + } + } + + public void loopAll(Coord4D location) + { + if(TransmissionType.checkTransmissionType(location.getTileEntity(worldObj), transmissionType)) + { + iterated.add(location); + } + else { + toIgnore.add(location); + } + + for(ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) + { + Coord4D obj = location.getFromSide(direction); + + if(!iterated.contains(obj) && !toIgnore.contains(obj)) + { + TileEntity tileEntity = obj.getTileEntity(worldObj); + + if(!(tileEntity instanceof IBlockableConnection) || ((IBlockableConnection)tileEntity).canConnectMutual(direction.getOpposite())) + { + if(TransmissionType.checkTransmissionType(tileEntity, transmissionType, location.getTileEntity(worldObj))) + { + loopAll(obj); + } + } + } + } + } + + public List exploreNetwork() + { + loopAll(start); + + return iterated; + } + } + + public static class DelayQueue + { + public EntityPlayer player; + public int delay; + + public DelayQueue(EntityPlayer p) + { + player = p; + delay = 5; + } + } +} diff --git a/src/api/java/mekanism/api/transmitters/IBlockableConnection.java b/src/api/java/mekanism/api/transmitters/IBlockableConnection.java new file mode 100644 index 000000000..f6811fbec --- /dev/null +++ b/src/api/java/mekanism/api/transmitters/IBlockableConnection.java @@ -0,0 +1,10 @@ +package mekanism.api.transmitters; + +import net.minecraftforge.common.util.ForgeDirection; + +public interface IBlockableConnection +{ + public boolean canConnectMutual(ForgeDirection side); + + public boolean canConnect(ForgeDirection side); +} diff --git a/src/api/java/mekanism/api/transmitters/IGridTransmitter.java b/src/api/java/mekanism/api/transmitters/IGridTransmitter.java new file mode 100644 index 000000000..ea222d8e6 --- /dev/null +++ b/src/api/java/mekanism/api/transmitters/IGridTransmitter.java @@ -0,0 +1,66 @@ +package mekanism.api.transmitters; + +import mekanism.api.Coord4D; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +public interface IGridTransmitter> extends ITransmitter +{ + /** + * Gets the network currently in use by this transmitter segment. + * @return network this transmitter is using + */ + public N getTransmitterNetwork(); + + /** + * Gets the network currently in use by this transmitter segment. + * @param createIfNull - If true, the transmitter will try and connect to an + * adjacent network, merging several if necessary, or creating a new one + * if none is available + * @return network this transmitter is using + */ + public N getTransmitterNetwork(boolean createIfNull); + + /** + * Sets this transmitter segment's network to a new value. + * @param network - network to set to + */ + public void setTransmitterNetwork(N network); + + /** + * Refreshes the transmitter's network. + */ + public void refreshTransmitterNetwork(); + + /** + * Called when the chunk this transmitter is in is loaded. + */ + public void chunkLoad(); + + /** + * Remove this transmitter from its network. + */ + public void removeFromTransmitterNetwork(); + + public boolean canConnectToAcceptor(ForgeDirection side, boolean ignoreActive); + + /** + * Call this if you're worried a transmitter's network is messed up and you want + * it to try and fix itself. + */ + public void fixTransmitterNetwork(); + + public boolean areTransmitterNetworksEqual(TileEntity tileEntity); + + public int getTransmitterNetworkSize(); + + public int getTransmitterNetworkAcceptorSize(); + + public String getTransmitterNetworkNeeded(); + + public String getTransmitterNetworkFlow(); + + public int getCapacity(); + + public TileEntity getTile(); +} diff --git a/src/api/java/mekanism/api/transmitters/INetworkDataHandler.java b/src/api/java/mekanism/api/transmitters/INetworkDataHandler.java new file mode 100644 index 000000000..38cd63702 --- /dev/null +++ b/src/api/java/mekanism/api/transmitters/INetworkDataHandler.java @@ -0,0 +1,10 @@ +package mekanism.api.transmitters; + +public interface INetworkDataHandler +{ + public String getNeededInfo(); + + public String getStoredInfo(); + + public String getFlowInfo(); +} diff --git a/src/api/java/mekanism/api/transmitters/ITransmitter.java b/src/api/java/mekanism/api/transmitters/ITransmitter.java new file mode 100644 index 000000000..cddc76a7a --- /dev/null +++ b/src/api/java/mekanism/api/transmitters/ITransmitter.java @@ -0,0 +1,11 @@ +package mekanism.api.transmitters; + +public interface ITransmitter +{ + /** + * Get the transmitter's transmission type + * + * @return TransmissionType this transmitter uses + */ + public TransmissionType getTransmissionType(); +} diff --git a/src/api/java/mekanism/api/transmitters/ITransmitterNetwork.java b/src/api/java/mekanism/api/transmitters/ITransmitterNetwork.java new file mode 100644 index 000000000..4bb2e8236 --- /dev/null +++ b/src/api/java/mekanism/api/transmitters/ITransmitterNetwork.java @@ -0,0 +1,39 @@ +package mekanism.api.transmitters; + +import java.util.List; +import java.util.Set; + +public interface ITransmitterNetwork> +{ + public void tick(); + + public int getSize(); + + public int getAcceptorSize(); + + public Set getAcceptors(Object... data); + + public void removeTransmitter(IGridTransmitter transmitter); + + public void refresh(); + + public void fullRefresh(); + + public void refresh(IGridTransmitter transmitter); + + public void split(IGridTransmitter splitPoint); + + public void fixMessedUpNetwork(IGridTransmitter transmitter); + + public void register(); + + public void deregister(); + + public void setFixed(boolean value); + + public TransmissionType getTransmissionType(); + + public boolean canMerge(List> networks); + + public void onNetworksCreated(List networks); +} diff --git a/src/api/java/mekanism/api/transmitters/TransmissionType.java b/src/api/java/mekanism/api/transmitters/TransmissionType.java new file mode 100644 index 000000000..ae9388cca --- /dev/null +++ b/src/api/java/mekanism/api/transmitters/TransmissionType.java @@ -0,0 +1,43 @@ +package mekanism.api.transmitters; + +import mekanism.api.gas.IGasTransmitter; +import net.minecraft.tileentity.TileEntity; + +public enum TransmissionType +{ + ENERGY, + FLUID, + GAS, + ITEM; + + public static boolean checkTransmissionType(TileEntity sideTile, TransmissionType type) + { + return checkTransmissionType(sideTile, type, null); + } + + public static boolean checkTransmissionType(TileEntity sideTile, TransmissionType type, TileEntity currentPipe) + { + return type.checkTransmissionType(sideTile, currentPipe); + } + + public boolean checkTransmissionType(TileEntity sideTile, TileEntity currentTile) + { + if(sideTile instanceof ITransmitter) + { + if(((ITransmitter)sideTile).getTransmissionType() == this) + { + return true; + } + } + + if(this == GAS && currentTile instanceof IGasTransmitter) + { + if(((IGasTransmitter)currentTile).canTransferGasToTube(sideTile)) + { + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/src/api/java/mekanism/api/transmitters/TransmitterNetworkRegistry.java b/src/api/java/mekanism/api/transmitters/TransmitterNetworkRegistry.java new file mode 100644 index 000000000..f0784f081 --- /dev/null +++ b/src/api/java/mekanism/api/transmitters/TransmitterNetworkRegistry.java @@ -0,0 +1,160 @@ +package mekanism.api.transmitters; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.ChunkEvent; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent.Phase; +import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent; +import cpw.mods.fml.relauncher.Side; + +public class TransmitterNetworkRegistry +{ + private static TransmitterNetworkRegistry INSTANCE = new TransmitterNetworkRegistry(); + private static boolean loaderRegistered = false; + + private HashSet networks = new HashSet(); + + public static void initiate() + { + if(!loaderRegistered) + { + loaderRegistered = true; + + MinecraftForge.EVENT_BUS.register(new NetworkLoader()); + FMLCommonHandler.instance().bus().register(INSTANCE); + } + } + + public static TransmitterNetworkRegistry getInstance() + { + return INSTANCE; + } + + public void registerNetwork(ITransmitterNetwork network) + { + networks.add(network); + } + + public void removeNetwork(ITransmitterNetwork network) + { + if(networks.contains(network)) + { + networks.remove(network); + } + } + + public void pruneEmptyNetworks() + { + HashSet copySet = new HashSet(networks); + + for(ITransmitterNetwork e : copySet) + { + if(e.getSize() == 0) + { + removeNetwork(e); + } + } + } + + @SubscribeEvent + public void onTick(ServerTickEvent event) + { + if(event.phase == Phase.END && event.side == Side.SERVER) + { + tickEnd(); + } + } + + public void tickEnd() + { + Set iterNetworks = (Set)networks.clone(); + + for(ITransmitterNetwork net : iterNetworks) + { + if(networks.contains(net)) + { + net.tick(); + } + } + } + + @Override + public String toString() + { + return "Network Registry:\n" + networks; + } + + public String[] toStrings() + { + String[] strings = new String[networks.size()]; + int i = 0; + + for(ITransmitterNetwork network : networks) + { + strings[i] = network.toString(); + ++i; + } + + return strings; + } + + public static class NetworkLoader + { + @SubscribeEvent + public void onChunkLoad(ChunkEvent.Load event) + { + if(event.getChunk() != null && !event.world.isRemote) + { + int x = event.getChunk().xPosition; + int z = event.getChunk().zPosition; + + IChunkProvider cProvider = event.getChunk().worldObj.getChunkProvider(); + Chunk[] neighbors = new Chunk[5]; + + neighbors[0] = event.getChunk(); + + if(cProvider.chunkExists(x + 1, z)) neighbors[1] = cProvider.provideChunk(x + 1, z); + if(cProvider.chunkExists(x - 1, z)) neighbors[2] = cProvider.provideChunk(x - 1, z); + if(cProvider.chunkExists(x, z + 1)) neighbors[3] = cProvider.provideChunk(x, z + 1); + if(cProvider.chunkExists(x, z - 1)) neighbors[4] = cProvider.provideChunk(x, z - 1); + + for(Chunk c : neighbors) + { + refreshChunk(c); + } + } + } + + public synchronized void refreshChunk(Chunk c) + { + try { + if(c != null) + { + Map copy = (Map)((HashMap)c.chunkTileEntityMap).clone(); + + for(Iterator iter = copy.values().iterator(); iter.hasNext();) + { + Object obj = iter.next(); + + if(obj instanceof IGridTransmitter) + { + ((IGridTransmitter)obj).refreshTransmitterNetwork(); + ((IGridTransmitter)obj).chunkLoad(); + } + } + } + } catch(Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/api/java/mekanism/common/util/MinerUtils.java b/src/api/java/mekanism/common/util/MinerUtils.java new file mode 100644 index 000000000..c51edadb6 --- /dev/null +++ b/src/api/java/mekanism/common/util/MinerUtils.java @@ -0,0 +1,49 @@ +package mekanism.common.util; + +import java.util.ArrayList; +import java.util.List; + +import mekanism.api.Coord4D; +import mekanism.api.ListUtils; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public final class MinerUtils +{ + public static List specialSilkIDs = ListUtils.asList(Blocks.ice); + + public static List getDrops(World world, Coord4D obj, boolean silk) + { + Block block = obj.getBlock(world); + + if(block == null) + { + return new ArrayList(); + } + + if(block.isAir(world, obj.xCoord, obj.yCoord, obj.zCoord)) + { + return new ArrayList(); + } + + int meta = obj.getMetadata(world); + + if(!silk) + { + return block.getDrops(world, obj.xCoord, obj.yCoord, obj.zCoord, meta, 0); + } + else { + List ret = new ArrayList(); + ret.add(new ItemStack(block, 1, meta)); + + if(specialSilkIDs.contains(block) || (block.getDrops(world, obj.xCoord, obj.yCoord, obj.zCoord, meta, 0) != null && block.getDrops(world, obj.xCoord, obj.yCoord, obj.zCoord, meta, 0).size() > 0)) + { + return ret; + } + } + + return new ArrayList(); + } +} diff --git a/src/api/java/mekanism/common/util/PipeUtils.java b/src/api/java/mekanism/common/util/PipeUtils.java new file mode 100644 index 000000000..38d50b615 --- /dev/null +++ b/src/api/java/mekanism/common/util/PipeUtils.java @@ -0,0 +1,114 @@ +package mekanism.common.util; + +import java.util.Arrays; + +import mekanism.api.Coord4D; +import mekanism.api.transmitters.IGridTransmitter; +import mekanism.api.transmitters.TransmissionType; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +public final class PipeUtils +{ + public static final FluidTankInfo[] EMPTY = new FluidTankInfo[] {}; + + /** + * Gets all the pipes around a tile entity. + * @param tileEntity - center tile entity + * @return array of TileEntities + */ + public static TileEntity[] getConnectedPipes(TileEntity tileEntity) + { + TileEntity[] pipes = new TileEntity[] {null, null, null, null, null, null}; + + for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) + { + TileEntity pipe = Coord4D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.getWorldObj()); + + if(TransmissionType.checkTransmissionType(pipe, TransmissionType.FLUID)) + { + pipes[orientation.ordinal()] = pipe; + } + } + + return pipes; + } + + /** + * Gets all the adjacent connections to a TileEntity. + * @param tileEntity - center TileEntity + * @return boolean[] of adjacent connections + */ + public static boolean[] getConnections(TileEntity tileEntity) + { + boolean[] connectable = new boolean[] {false, false, false, false, false, false}; + + TileEntity[] connectedPipes = PipeUtils.getConnectedPipes(tileEntity); + IFluidHandler[] connectedAcceptors = PipeUtils.getConnectedAcceptors(tileEntity); + + for(IFluidHandler container : connectedAcceptors) + { + if(container != null) + { + int side = Arrays.asList(connectedAcceptors).indexOf(container); + + FluidTankInfo[] infoArray = container.getTankInfo(ForgeDirection.getOrientation(side).getOpposite()); + + if(infoArray != null && infoArray.length > 0) + { + boolean notNull = false; + + for(FluidTankInfo info : container.getTankInfo(ForgeDirection.getOrientation(side).getOpposite())) + { + if(info != null) + { + notNull = true; + break; + } + } + + if(notNull) + { + connectable[side] = true; + } + } + } + } + + for(TileEntity tile : connectedPipes) + { + if(tile != null) + { + int side = Arrays.asList(connectedPipes).indexOf(tile); + + connectable[side] = true; + } + } + + return connectable; + } + + /** + * Gets all the acceptors around a tile entity. + * @param tileEntity - center tile entity + * @return array of IFluidHandlers + */ + public static IFluidHandler[] getConnectedAcceptors(TileEntity tileEntity) + { + IFluidHandler[] acceptors = new IFluidHandler[] {null, null, null, null, null, null}; + + for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) + { + TileEntity acceptor = Coord4D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.getWorldObj()); + + if(acceptor instanceof IFluidHandler && !(acceptor instanceof IGridTransmitter)) + { + acceptors[orientation.ordinal()] = (IFluidHandler)acceptor; + } + } + + return acceptors; + } +} diff --git a/src/api/java/mekanism/common/util/StackUtils.java b/src/api/java/mekanism/common/util/StackUtils.java new file mode 100644 index 000000000..9b8e78611 --- /dev/null +++ b/src/api/java/mekanism/common/util/StackUtils.java @@ -0,0 +1,149 @@ +package mekanism.common.util; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public final class StackUtils +{ + public static List split(ItemStack stack) + { + if(stack == null || stack.stackSize == 0) + { + return null; + } + + List ret = new ArrayList(); + + if(stack.stackSize == 1) + { + ret.add(stack); + return ret; + } + + int remain = stack.stackSize % 2; + int split = (int)((float)(stack.stackSize)/2F); + + ret.add(size(stack, split+remain)); + ret.add(size(stack, split)); + + return ret; + } + + public static Item getItem(ItemStack stack) + { + if(stack == null) + { + return null; + } + + return stack.getItem(); + } + + public static boolean diffIgnoreNull(ItemStack stack1, ItemStack stack2) + { + if(stack1 == null || stack2 == null) + { + return false; + } + + return stack1.getItem() != stack2.getItem() || stack1.getItemDamage() != stack2.getItemDamage(); + } + + public static boolean equalsWildcard(ItemStack wild, ItemStack check) + { + return wild.getItem() == check.getItem() && (wild.getItemDamage() == OreDictionary.WILDCARD_VALUE || wild.getItemDamage() == check.getItemDamage()); + } + + public static List even(ItemStack stack1, ItemStack stack2) + { + ArrayList ret = new ArrayList(); + + if(getSize(stack1) == getSize(stack2) || Math.abs(getSize(stack1)-getSize(stack2)) == 1) + { + ret.add(stack1); + ret.add(stack2); + + return ret; + } + + if(getSize(stack1) > getSize(stack2)) + { + int diff = getSize(stack1)-getSize(stack2); + + List split = split(size(stack1, diff)); + + ret.add(subtract(stack1, split.get(0))); + ret.add(add(stack2, split.get(0))); + } + else if(getSize(stack2) > getSize(stack1)) + { + int diff = getSize(stack2)-getSize(stack1); + + List split = split(size(stack2, diff)); + + ret.add(subtract(stack2, split.get(0))); + ret.add(add(stack1, split.get(0))); + } + + return ret; + } + + public static ItemStack add(ItemStack stack1, ItemStack stack2) + { + if(stack1 == null) + { + return stack2; + } + else if(stack2 == null) + { + return stack1; + } + + return size(stack1, getSize(stack1)+getSize(stack2)); + } + + public static ItemStack subtract(ItemStack stack1, ItemStack stack2) + { + if(stack1 == null) + { + return null; + } + else if(stack2 == null) + { + return stack1; + } + + return size(stack1, getSize(stack1)-getSize(stack2)); + } + + public static ItemStack size(ItemStack stack, int size) + { + if(size <= 0 || stack == null) + { + return null; + } + + ItemStack ret = stack.copy(); + ret.stackSize = size; + return ret; + } + + public static ItemStack copy(ItemStack stack) + { + if(stack == null) + { + return null; + } + + return stack.copy(); + } + + public static int getSize(ItemStack stack) + { + return stack != null ? stack.stackSize : 0; + } +} diff --git a/src/api/java/micdoodle8/mods/galacticraft/api/block/IPartialSealedBlock.java b/src/api/java/micdoodle8/mods/galacticraft/api/block/IPartialSealedBlock.java new file mode 100644 index 000000000..568dfe926 --- /dev/null +++ b/src/api/java/micdoodle8/mods/galacticraft/api/block/IPartialSealedBlock.java @@ -0,0 +1,8 @@ +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.world.World; + +public interface IPartialSealedBlock +{ + public boolean isSealed(World world, int x, int y, int z); +} diff --git a/src/api/java/mods/immibis/core/api/multipart/ICoverSystem.java b/src/api/java/mods/immibis/core/api/multipart/ICoverSystem.java new file mode 100644 index 000000000..64191e7d8 --- /dev/null +++ b/src/api/java/mods/immibis/core/api/multipart/ICoverSystem.java @@ -0,0 +1,22 @@ +package mods.immibis.core.api.multipart; + + +/** + * An object that allows extra parts to be added to multipart tiles. + * For example, you can add covers to InfiniTubes transport conduits + * because they use a MicroblockCoverSystem. + * + * This interface's existence is a bit unintuitive, but it was + */ +public interface ICoverSystem extends IPartContainer { + /** + * Converts the block containing this cover system into + * a block containing only parts from this cover system, + * or to air if the cover system has no parts. + * + * Call it when, for example, all wires in a RedLogic wire block are destroyed, + * to replace it with a microblock container block if there were any microblocks + * in the wire block. + */ + public void convertToContainerBlock(); +} diff --git a/src/api/java/mods/immibis/core/api/multipart/IMultipartTile.java b/src/api/java/mods/immibis/core/api/multipart/IMultipartTile.java new file mode 100644 index 000000000..4048cf738 --- /dev/null +++ b/src/api/java/mods/immibis/core/api/multipart/IMultipartTile.java @@ -0,0 +1,10 @@ +package mods.immibis.core.api.multipart; + + +public interface IMultipartTile extends IPartContainer { + /** + * Returns an ICoverSystem object, or null if this tile does not support a cover system + * @see mods.immibis.core.api.multipart.ICoverSystem + */ + public ICoverSystem getCoverSystem(); +} diff --git a/src/api/java/mods/immibis/core/api/multipart/IPartContainer.java b/src/api/java/mods/immibis/core/api/multipart/IPartContainer.java new file mode 100644 index 000000000..9434b6a3f --- /dev/null +++ b/src/api/java/mods/immibis/core/api/multipart/IPartContainer.java @@ -0,0 +1,90 @@ +package mods.immibis.core.api.multipart; + +import java.util.List; + +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * Contains common methods from ICoverSystem and IMultipartTile. + */ +public interface IPartContainer { + + /** + * Gets the speed at which a player breaks a part. + * See Block.getPlayerRelativeBlockHardness. + * @param ply The player. + * @param The part. + * @return The speed. + */ + float getPlayerRelativePartHardness(EntityPlayer ply, int part); + + /** + * Called when the player middle-clicks on a part. + * @param rayTrace The location under the player's crosshair. + * @param part The part number they middle-clicked on. + * @return The itemstack to pick. + */ + public ItemStack pickPart(MovingObjectPosition rayTrace, int part); + + /** + * Checks if a given face of this block is solid. + * Used to determine the result of Block.isBlockSolidOnSide. + */ + public boolean isSolidOnSide(ForgeDirection side); + + /** + * Renders all the parts. + * @param render The render context. + */ + @SideOnly(Side.CLIENT) + public void render(RenderBlocks render); + + /** + * Renders one part. + * @param render The render context. + * @param part The part number. + */ + @SideOnly(Side.CLIENT) + public void renderPart(RenderBlocks render, int part); + + /** + * Returns all collision boxes that intersect the given mask, in world coordinates. + * @param mask The mask AABB, in world coordinates. + * @param list The list to add the returned boxes to. + */ + public void getCollidingBoundingBoxes(AxisAlignedBB mask, List list); + + /** + * Called when a player finishes breaking a part. + * @param ply The player breaking the part. + * @param subhit The part being broken. + * @return The item stacks dropped, or null if none. + */ + public List removePartByPlayer(EntityPlayer ply, int part); + + /** + * Returns the AABB of a part, in tile-local coordinates. + * Currently used for drawing the selection box. + * May return null, in which case no selection box is drawn. + * + * @param part The part ID to check. + * @return The AABB of the part, or null. + */ + public AxisAlignedBB getPartAABBFromPool(int part); + + /** + * Finds the closest intercept of the given ray with parts in this container. + * @param src The start of the ray, in world coordinates. + * @param dst The end of the ray, in world coordinates. + * @return A ray-trace result, or null if the ray does not intersect any parts. + */ + public MovingObjectPosition collisionRayTrace(Vec3 src, Vec3 dst); +} diff --git a/src/api/java/mods/railcraft/api/crafting/IBlastFurnaceCraftingManager.java b/src/api/java/mods/railcraft/api/crafting/IBlastFurnaceCraftingManager.java new file mode 100644 index 000000000..1529b45f6 --- /dev/null +++ b/src/api/java/mods/railcraft/api/crafting/IBlastFurnaceCraftingManager.java @@ -0,0 +1,29 @@ +package mods.railcraft.api.crafting; + +import java.util.List; +import net.minecraft.item.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IBlastFurnaceCraftingManager { + + /** + * Adds a new Blast Furnace Recipe. + * + * @param input the input, if null the function will silently abort + * @param matchDamage if true, it will compare item damage, if false, just + * the item ID + * @param matchNBT if true, it will compare nbt + * @param cookTime the time it takes to cook the recipe + * @param output the output + */ + void addRecipe(ItemStack input, boolean matchDamage, boolean matchNBT, int cookTime, ItemStack output); + + List getFuels(); + + IBlastFurnaceRecipe getRecipe(ItemStack stack); + + List getRecipes(); +} diff --git a/src/api/java/mods/railcraft/api/crafting/IBlastFurnaceRecipe.java b/src/api/java/mods/railcraft/api/crafting/IBlastFurnaceRecipe.java new file mode 100644 index 000000000..4e2aebeb1 --- /dev/null +++ b/src/api/java/mods/railcraft/api/crafting/IBlastFurnaceRecipe.java @@ -0,0 +1,21 @@ +package mods.railcraft.api.crafting; + +import net.minecraft.item.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IBlastFurnaceRecipe +{ + + public int getCookTime(); + + public ItemStack getInput(); + + public ItemStack getOutput(); + + int getOutputStackSize(); + + boolean isRoomForOutput(ItemStack outputSlot); +} diff --git a/src/api/java/mods/railcraft/api/crafting/ICokeOvenCraftingManager.java b/src/api/java/mods/railcraft/api/crafting/ICokeOvenCraftingManager.java new file mode 100644 index 000000000..65f51885c --- /dev/null +++ b/src/api/java/mods/railcraft/api/crafting/ICokeOvenCraftingManager.java @@ -0,0 +1,18 @@ +package mods.railcraft.api.crafting; + +import java.util.List; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +/** + * + * @author CovertJaguar + */ +public interface ICokeOvenCraftingManager { + + void addRecipe(ItemStack input, boolean matchDamage, boolean matchNBT, ItemStack output, FluidStack liquidOutput, int cookTime); + + ICokeOvenRecipe getRecipe(ItemStack stack); + + List getRecipes(); +} diff --git a/src/api/java/mods/railcraft/api/crafting/ICokeOvenRecipe.java b/src/api/java/mods/railcraft/api/crafting/ICokeOvenRecipe.java new file mode 100644 index 000000000..46ea2a4bd --- /dev/null +++ b/src/api/java/mods/railcraft/api/crafting/ICokeOvenRecipe.java @@ -0,0 +1,20 @@ +package mods.railcraft.api.crafting; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +/** + * + * @author CovertJaguar + */ +public interface ICokeOvenRecipe +{ + + public int getCookTime(); + + public ItemStack getInput(); + + public FluidStack getFluidOutput(); + + public ItemStack getOutput(); +} diff --git a/src/api/java/mods/railcraft/api/crafting/IRockCrusherCraftingManager.java b/src/api/java/mods/railcraft/api/crafting/IRockCrusherCraftingManager.java new file mode 100644 index 000000000..837354c93 --- /dev/null +++ b/src/api/java/mods/railcraft/api/crafting/IRockCrusherCraftingManager.java @@ -0,0 +1,17 @@ +package mods.railcraft.api.crafting; + +import java.util.List; +import net.minecraft.item.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IRockCrusherCraftingManager { + + IRockCrusherRecipe createNewRecipe(ItemStack input, boolean matchDamage, boolean matchNBT); + + IRockCrusherRecipe getRecipe(ItemStack input); + + List getRecipes(); +} diff --git a/src/api/java/mods/railcraft/api/crafting/IRockCrusherRecipe.java b/src/api/java/mods/railcraft/api/crafting/IRockCrusherRecipe.java new file mode 100644 index 000000000..a5799397a --- /dev/null +++ b/src/api/java/mods/railcraft/api/crafting/IRockCrusherRecipe.java @@ -0,0 +1,45 @@ +package mods.railcraft.api.crafting; + +import java.util.List; +import java.util.Map; +import net.minecraft.item.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IRockCrusherRecipe { + + public ItemStack getInput(); + + /** + * Adds a new entry to the output list. + * + * @param output the stack to output + * @param chance the change to output this stack + */ + void addOutput(ItemStack output, float chance); + + /** + * Returns a list containing each output entry and its chance of being + * included. + * + * @return + */ + public List> getOutputs(); + + /** + * Returns a list of all possible outputs. This is basically a condensed + * version of getOutputs() without the chances. + * + * @return + */ + public List getPossibleOuputs(); + + /** + * Returns a list of outputs after it has passed through the randomizer. + * + * @return + */ + public List getRandomizedOuputs(); +} diff --git a/src/api/java/mods/railcraft/api/crafting/IRollingMachineCraftingManager.java b/src/api/java/mods/railcraft/api/crafting/IRollingMachineCraftingManager.java new file mode 100644 index 000000000..a0d279791 --- /dev/null +++ b/src/api/java/mods/railcraft/api/crafting/IRollingMachineCraftingManager.java @@ -0,0 +1,24 @@ +package mods.railcraft.api.crafting; + +import java.util.List; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * + * @author CovertJaguar + */ +public interface IRollingMachineCraftingManager +{ + + void addRecipe(ItemStack output, Object... components); + + void addShapelessRecipe(ItemStack output, Object... compenents); + + ItemStack findMatchingRecipe(InventoryCrafting inventorycrafting, World world); + + List getRecipeList(); + +} diff --git a/src/api/java/mods/railcraft/api/crafting/RailcraftCraftingManager.java b/src/api/java/mods/railcraft/api/crafting/RailcraftCraftingManager.java new file mode 100644 index 000000000..abe8e20d6 --- /dev/null +++ b/src/api/java/mods/railcraft/api/crafting/RailcraftCraftingManager.java @@ -0,0 +1,16 @@ +package mods.railcraft.api.crafting; + +/** + * These variables are defined during the pre-init phase. + * Do not attempt to access them during pre-init. + * + * @author CovertJaguar + */ +public abstract class RailcraftCraftingManager +{ + + public static ICokeOvenCraftingManager cokeOven; + public static IBlastFurnaceCraftingManager blastFurnace; + public static IRockCrusherCraftingManager rockCrusher; + public static IRollingMachineCraftingManager rollingMachine; +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/BetterStorageBackpack.java b/src/api/java/net/mcft/copy/betterstorage/api/BetterStorageBackpack.java new file mode 100644 index 000000000..0a87fb7b8 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/BetterStorageBackpack.java @@ -0,0 +1,54 @@ +package net.mcft.copy.betterstorage.api; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.common.FMLLog; +import cpw.mods.fml.common.Loader; + +public final class BetterStorageBackpack { + + private static Method getBackpack = null; + + public static List spawnWithBackpack = new ArrayList(); + + private BetterStorageBackpack() { } + + /** Enables a type of entity to spawn with a backpack with a certain probability.
+ * The class has to match exactly, subclasses need to be registered separately.
+ * Don't use too high probability, mobs spawning with backpacks should be a rarity. */ + public static void spawnWithBackpack(Class entityClass, double probability) { + spawnWithBackpack.add(new BackpackSpawnEntry(entityClass, probability)); + } + + /** Returns the backpack stack if an entity is carrying one, or null of it doesn't.
+ * This can and should be used to check if the entity has a backpack equipped. */ + // Used Thaumcraft's API to see how it did things - I'm unsure what's the best way. + public static ItemStack getBackpack(EntityLivingBase entity) { + if (Loader.isModLoaded("betterstorage")) { + try { + if (getBackpack == null) { + Class itemBackpack = Class.forName("net.mcft.copy.betterstorage.item.ItemBackpack"); + getBackpack = itemBackpack.getMethod("getBackpack", EntityLivingBase.class); + } + return (ItemStack)getBackpack.invoke(null, entity); + } catch (Exception e) { + FMLLog.warning("[betterstorage] Could not invoke net.mcft.copy.betterstorage.item.ItemBackpack.getBackpack."); + } + } + return null; + } + + public static class BackpackSpawnEntry { + public final Class entityClass; + public final double probability; + public BackpackSpawnEntry(Class entityClass, double probability) { + this.entityClass = entityClass; + this.probability = probability; + } + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/BetterStorageEnchantment.java b/src/api/java/net/mcft/copy/betterstorage/api/BetterStorageEnchantment.java new file mode 100644 index 000000000..a976ee1a9 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/BetterStorageEnchantment.java @@ -0,0 +1,38 @@ +package net.mcft.copy.betterstorage.api; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.EnumEnchantmentType; +import net.minecraft.item.ItemStack; + +public final class BetterStorageEnchantment { + + public static Map enchantmentTypes = new HashMap(); + public static Map enchantments = new HashMap(); + + private BetterStorageEnchantment() { } + + /** Returns a BetterStorage enchantment type with that name.
+ * Types: key, lock */ + public static EnumEnchantmentType getType(String name) { + return enchantmentTypes.get(name); + } + + /** Returns a BetterStorage enchantment with that name.
+ * Key: unlocking, lockpicking, morphing.
+ * Lock: persistance, security, shock, trigger. */ + public static Enchantment get(String name) { + return enchantments.get(name); + } + + /** Helper method to get the level of that enchantment on the item. */ + public static int getLevel(ItemStack stack, String name) { + Enchantment enchantment = get(name); + if (enchantment == null) return 0; + return EnchantmentHelper.getEnchantmentLevel(enchantment.effectId, stack); + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/BetterStorageUtils.java b/src/api/java/net/mcft/copy/betterstorage/api/BetterStorageUtils.java new file mode 100644 index 000000000..53ffc33d4 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/BetterStorageUtils.java @@ -0,0 +1,22 @@ +package net.mcft.copy.betterstorage.api; + +import net.minecraft.item.ItemStack; + +public final class BetterStorageUtils +{ + + private BetterStorageUtils() { + } + + /** + * Returns if the stack matches the match stack. Stack size is ignored.
+ * If the match stack damage is WILDCARD_VALUE, it will match any damage.
+ * If the match stack doesn't have an NBT compound, it will match any NBT data.
+ * (If the match stack has an empty NBT compound it'll only match stacks without NBT data.) + */ + public static boolean wildcardMatch(ItemStack match, ItemStack stack) + { + return false; + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/IContainerItem.java b/src/api/java/net/mcft/copy/betterstorage/api/IContainerItem.java new file mode 100644 index 000000000..aa92ad61f --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/IContainerItem.java @@ -0,0 +1,17 @@ +package net.mcft.copy.betterstorage.api; + +import net.minecraft.item.ItemStack; + +/** When implemented for an Item, signalizes that it can store or + * is storing other items. This is useful for other container items to + * keep themselves from accepting them, resulting in infinite storage. */ +public interface IContainerItem { + + /** Returns the contents of this container item.
+ * May return null if not supported. */ + public ItemStack[] getContainerItemContents(ItemStack container); + + /** Returns if this item can be stored in another container item. */ + public boolean canBeStoredInContainerItem(ItemStack item); + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/BetterStorageCrafting.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/BetterStorageCrafting.java new file mode 100644 index 000000000..413f2caa0 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/BetterStorageCrafting.java @@ -0,0 +1,44 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public final class BetterStorageCrafting { + + public static final List recipes = new ArrayList(); + + private BetterStorageCrafting() { } + + /** Adds a station recipe to the recipe list. */ + public static void addStationRecipe(IStationRecipe recipe) { recipes.add(recipe); } + + /** Creates and returns a crafting matching the input, or null if none was found. */ + public static StationCrafting findMatchingStationCrafting(ItemStack[] input) { + RecipeBounds bounds = new RecipeBounds(input); + for (IStationRecipe recipe : recipes) { + StationCrafting crafting = recipe.checkMatch(input, bounds); + if (crafting != null) return crafting; + } + return null; + } + + // Utility functions + + /** Returns an IRecipeInput from the object.
+ * Can be an IRecipeInput, ItemStack, Item, Block or ore dictionary String. */ + public static IRecipeInput makeInput(Object obj) { + if (obj instanceof IRecipeInput) return (IRecipeInput)obj; + else if (obj instanceof ItemStack) return new RecipeInputItemStack((ItemStack)obj); + else if (obj instanceof Item) return new RecipeInputItemStack(new ItemStack((Item)obj)); + else if (obj instanceof Block) return new RecipeInputItemStack(new ItemStack((Block)obj)); + else if (obj instanceof String) return new RecipeInputOreDict((String)obj, 1); + else throw new IllegalArgumentException( + String.format("Argument is %s, not an IRecipeInput, ItemStack, Item, Block or String.", + ((obj != null) ? obj.getClass().getSimpleName() : "null"))); + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/ContainerInfo.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/ContainerInfo.java new file mode 100644 index 000000000..46651d088 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/ContainerInfo.java @@ -0,0 +1,18 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import net.minecraft.item.ItemStack; + +public class ContainerInfo { + + private ItemStack containerItem = null; + private boolean doesLeaveCrafting = true; + + public ItemStack getContainerItem() { return containerItem; } + public boolean doesLeaveCrafting() { return doesLeaveCrafting; } + + public void set(ItemStack containerItem, boolean doesLeaveCrafting) { + this.containerItem = containerItem; + this.doesLeaveCrafting = doesLeaveCrafting; + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/CraftingSourceTileEntity.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/CraftingSourceTileEntity.java new file mode 100644 index 000000000..6fb0b5aa6 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/CraftingSourceTileEntity.java @@ -0,0 +1,32 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class CraftingSourceTileEntity implements ICraftingSource { + + public final TileEntity entity; + public final EntityPlayer player; + public final World world; + + public CraftingSourceTileEntity(TileEntity entity, EntityPlayer player) { + this.entity = entity; + this.player = player; + this.world = ((entity != null) ? entity.getWorldObj() : ((player != null) ? player.worldObj : null)); + } + + @Override + public EntityPlayer getPlayer() { return player; } + + @Override + public World getWorld() { return world; } + + @Override + public double getX() { return ((entity != null) ? (entity.xCoord + 0.5) : 0); } + @Override + public double getY() { return ((entity != null) ? (entity.yCoord + 0.5) : 0); } + @Override + public double getZ() { return ((entity != null) ? (entity.zCoord + 0.5) : 0); } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/ICraftingSource.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/ICraftingSource.java new file mode 100644 index 000000000..9c7395ed3 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/ICraftingSource.java @@ -0,0 +1,18 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +public interface ICraftingSource { + + /** Returns the player currently crafting, null if none. */ + EntityPlayer getPlayer(); + + /** Returns the world the recipe is being crafted in. */ + World getWorld(); + + double getX(); + double getY(); + double getZ(); + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/IRecipeInput.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/IRecipeInput.java new file mode 100644 index 000000000..170dff5bc --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/IRecipeInput.java @@ -0,0 +1,29 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public interface IRecipeInput { + + /** Returns the amount needed to craft. */ + int getAmount(); + + /** Returns if the stack matches the input, ignores stack size. */ + boolean matches(ItemStack stack); + + /** Called when a recipe is crafted, allows modification (decrease stack size, damage item) + * of the input stack. Empty stacks and damageable items with no durability left are removed + * automatically. */ + void craft(ItemStack input, ContainerInfo containerInfo); + + // NEI related functions + + /** Returns a list of possible item stacks that will match this input. + * Used to display and cycle items for the NEI addon. */ + @SideOnly(Side.CLIENT) + List getPossibleMatches(); + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/IStationRecipe.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/IStationRecipe.java new file mode 100644 index 000000000..7c41006bb --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/IStationRecipe.java @@ -0,0 +1,35 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public interface IStationRecipe { + + /** If the input matches this recipe, returns a new station crafting + * instance, specific for this input, or null if it didn't match. */ + StationCrafting checkMatch(ItemStack[] input, RecipeBounds bounds); + + // NEI related functions + + /** Returns a list of sample inputs that will match the recipe. + * Used to display and cycle recipes for the NEI addon. + * Return null if the recipe should not be displayed in NEI. */ + @SideOnly(Side.CLIENT) + List getSampleInputs(); + + /** Returns a list of input items that may be used in this recipe. + * Used to show recipes using these inputs for the NEI addon. + * Return null if the inputs should be grabbed from getSampleInputs. */ + @SideOnly(Side.CLIENT) + List getPossibleInputs(); + + /** Returns a list of output items that can result from this recipe. + * Used to show recipes matching these outputs for the NEI addon. + * Return null if the output made from getSampleInputs should be used. */ + @SideOnly(Side.CLIENT) + List getPossibleOutputs(); + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeBounds.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeBounds.java new file mode 100644 index 000000000..2b1c00eff --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeBounds.java @@ -0,0 +1,35 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import net.minecraft.item.ItemStack; + +public class RecipeBounds { + + public final int minX, maxX, minY, maxY; + + public int getWidth() { return (maxX - minX + 1); } + public int getHeight() { return (maxY - minY + 1); } + + public RecipeBounds(int minX, int maxX, int minY, int maxY) { + this.minX = minX; this.maxX = maxX; + this.minY = minY; this.maxY = maxY; + } + public RecipeBounds(ItemStack[] input) { + int minX = 2, maxX = -1; + int minY = 2, maxY = -1; + for (int x = 0; x <= 2; x++) + for (int y = 0; y <= 2; y++) + if (input[x + y * 3] != null) { + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + if ((minX <= maxX) && (minY <= maxY)) { + this.minX = minX; + this.minY = minY; + } else this.minX = this.minY = 0; + this.maxX = maxX; + this.maxY = maxY; + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputBase.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputBase.java new file mode 100644 index 000000000..ec9992426 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputBase.java @@ -0,0 +1,26 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public abstract class RecipeInputBase implements IRecipeInput { + + @Override + public abstract int getAmount(); + + @Override + public abstract boolean matches(ItemStack stack); + + @Override + public void craft(ItemStack input, ContainerInfo containerInfo) { + if (input == null) return; + + Item item = input.getItem(); + ItemStack containerItem = item.getContainerItem(input.copy()); + boolean doesLeaveCrafting = item.doesContainerItemLeaveCraftingGrid(input); + containerInfo.set(containerItem, doesLeaveCrafting); + + input.stackSize -= getAmount(); + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputItemStack.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputItemStack.java new file mode 100644 index 000000000..893b7fde7 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputItemStack.java @@ -0,0 +1,49 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import java.util.Arrays; +import java.util.List; + +import net.mcft.copy.betterstorage.api.BetterStorageUtils; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.oredict.OreDictionary; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class RecipeInputItemStack extends RecipeInputBase { + + public final ItemStack stack; + + public RecipeInputItemStack(ItemStack stack) { + this.stack = stack; + } + public RecipeInputItemStack(ItemStack stack, boolean nbtSensitive) { + this(stack); + // If input is NBT sensitive, make sure it has an NBT compound. + // Empty means it only matches items with no NBT data. + if (nbtSensitive) { + if (!stack.hasTagCompound()) + stack.setTagCompound(new NBTTagCompound()); + // Otherwise, always remove the NBT compound, + // because then it will match any item. + } else if (stack.hasTagCompound()) + stack.setTagCompound(null); + } + + @Override + public int getAmount() { return stack.stackSize; } + + @Override + public boolean matches(ItemStack stack) { return BetterStorageUtils.wildcardMatch(this.stack, stack); } + + private List list = null; + @Override + @SideOnly(Side.CLIENT) + public List getPossibleMatches() { + ItemStack stack = this.stack.copy(); + if (stack.getItemDamage() == OreDictionary.WILDCARD_VALUE) + stack.setItemDamage(0); + return Arrays.asList(stack); + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputOreDict.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputOreDict.java new file mode 100644 index 000000000..7cabf9f51 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/RecipeInputOreDict.java @@ -0,0 +1,37 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import java.util.List; + +import net.mcft.copy.betterstorage.api.BetterStorageUtils; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class RecipeInputOreDict extends RecipeInputBase { + + public final String name; + private final int amount; + + public RecipeInputOreDict(String name, int amount) { + this.name = name; + this.amount = amount; + } + + @Override + public int getAmount() { return amount; } + + @Override + public boolean matches(ItemStack stack) { + for (ItemStack oreStack : OreDictionary.getOres(name)) + if (BetterStorageUtils.wildcardMatch(oreStack, stack)) return true; + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public List getPossibleMatches() { + return OreDictionary.getOres(name); + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/ShapedStationRecipe.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/ShapedStationRecipe.java new file mode 100644 index 000000000..33bb63858 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/ShapedStationRecipe.java @@ -0,0 +1,169 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ShapedStationRecipe implements IStationRecipe { + + public final IRecipeInput[] recipeInput; + public final ItemStack[] recipeOutput; + public final int recipeWidth; + public final int recipeHeight; + + public int requiredExperience = 0; + public int craftingTime = 0; + + public ShapedStationRecipe(IRecipeInput[] input, int width, int height, ItemStack[] output) { + recipeInput = input; + recipeOutput = output; + recipeWidth = width; + recipeHeight = height; + } + + public ShapedStationRecipe(ItemStack[] output, Object... input) { + int width = 0; + int height = 0; + + int inputIndex = 0; + Map inputMap = new HashMap(); + + while ((inputIndex < input.length) && (input[inputIndex] instanceof String)) { + String line = (String)input[inputIndex++]; + if (line.isEmpty()) + throw new IllegalArgumentException("Empty string isn't valid."); + if (width <= 0) width = line.length(); + else if (width != line.length()) + throw new IllegalArgumentException("All strings must have the same length."); + for (char chr : line.toCharArray()) + inputMap.put(chr, null); + height++; + } + if (height <= 0) + throw new IllegalArgumentException("At least one string must be supplied."); + + if (inputIndex >= input.length) + throw new IllegalArgumentException("At least one mapping must be supplied."); + if ((input.length - inputIndex) % 2 > 0) + throw new IllegalArgumentException("Mappings have to be in pairs of two."); + + for (; inputIndex < input.length; inputIndex += 2) { + if (!(input[inputIndex] instanceof Character)) + throw new IllegalArgumentException("First argument of a mapping needs to be a character."); + char chr = (Character)input[inputIndex]; + if (!inputMap.containsKey(chr)) + throw new IllegalArgumentException("Mapping for unused character '" + chr + "'."); + if (inputMap.get(chr) != null) + throw new IllegalArgumentException("Duplicate mapping for character '" + chr + "'."); + IRecipeInput mapping = BetterStorageCrafting.makeInput(input[inputIndex + 1]); + inputMap.put(chr, mapping); + } + + for (Entry entry : inputMap.entrySet()) + if ((entry.getKey() != ' ') && (entry.getValue() == null)) + throw new IllegalArgumentException("No mapping for character '" + entry.getKey() + "'."); + + recipeInput = new IRecipeInput[width * height]; + recipeOutput = output; + + for (int x = 0; x < width; x++) + for (int y = 0; y < height; y++) + recipeInput[x + y * width] = inputMap.get(((String)input[y]).charAt(x)); + + recipeWidth = width; + recipeHeight = height; + } + public ShapedStationRecipe(ItemStack output, Object... input) { + this(new ItemStack[]{ null, null, null, null, output }, input); + } + + public ShapedStationRecipe setRequiredExperience(int experience) { + requiredExperience = experience; + return this; + } + public ShapedStationRecipe setCraftingTime(int time) { + craftingTime = time; + return this; + } + + @Override + @SideOnly(Side.CLIENT) + public List getSampleInputs() { + IRecipeInput[] input; + if ((recipeWidth != 3) || (recipeHeight != 3)) { + input = new IRecipeInput[9]; + for (int y = 0; y < recipeHeight; y++) + System.arraycopy(recipeInput, y * recipeWidth, input, y * 3, recipeWidth); + } else input = recipeInput; + return Arrays.asList(new IRecipeInput[][]{ input }); + } + + @Override + @SideOnly(Side.CLIENT) + public List getPossibleInputs() { return null; } + + @Override + @SideOnly(Side.CLIENT) + public List getPossibleOutputs() { return null; } + + // IStationRecipe implementation + + @Override + public StationCrafting checkMatch(ItemStack[] input, RecipeBounds bounds) { + // Check if boundaries match recipe size. + if ((recipeWidth != bounds.getWidth()) || + (recipeHeight != bounds.getHeight())) return null; + + IRecipeInput[] requiredInput = new IRecipeInput[9]; + for (int y = 0; y < recipeHeight; y++) { + System.arraycopy(recipeInput, y * recipeWidth, requiredInput, + bounds.minX + (bounds.minY + y) * 3, recipeWidth); + for (int x = 0; x < recipeWidth; x++) { + int adjustedIndex = (bounds.minX + x) + (bounds.minY + y) * 3; + IRecipeInput recipeStack = recipeInput[x + y * recipeWidth]; + ItemStack inputStack = input[adjustedIndex]; + if ((recipeStack == null) ? (inputStack != null) + : (!recipeStack.matches(inputStack) || + (inputStack.stackSize < recipeStack.getAmount()))) + return null; + } + } + return new StationCrafting(recipeOutput, requiredInput, requiredExperience, craftingTime); + } + + // Utility functions + + /** Returns the bounds of the input items: + * An array with minX, minY, width and height. */ + public static int[] calculateRecipeBounds(ItemStack[] input) { + int minX = 0, maxX = 2, minY = 0, maxY = 2; + + for (int x = minX; x <= maxX; x++) + for (int y = minY; y <= maxY; y++) + if (input[x + y * 3] != null) { minX = x; break; } + + for (int x = maxX; x >= minX; x--) + for (int y = minY; y <= maxY; y++) + if (input[x + y * 3] != null) { maxX = x; break; } + + for (int y = minY; y <= maxY; y++) + for (int x = minX; x <= maxX; x++) + if (input[x + y * 3] != null) { minY = y; break; } + + for (int y = maxY; y >= minY; y--) + for (int x = minX; x <= maxX; x++) + if (input[x + y * 3] != null) { maxY = y; break; } + + int width = (maxX - minX + 1); + int height = (maxY - minY + 1); + + return new int[]{ minX, minY, width, height }; + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/ShapelessStationRecipe.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/ShapelessStationRecipe.java new file mode 100644 index 000000000..43398f9b6 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/ShapelessStationRecipe.java @@ -0,0 +1,82 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ShapelessStationRecipe implements IStationRecipe { + + public final IRecipeInput[] recipeInput; + public final ItemStack[] recipeOutput; + + public int requiredExperience = 0; + public int craftingTime = 0; + + public ShapelessStationRecipe(IRecipeInput[] input, ItemStack[] output) { + recipeInput = input; + recipeOutput = output; + } + + public ShapelessStationRecipe(ItemStack[] output, Object... input) { + recipeInput = new IRecipeInput[input.length]; + recipeOutput = output; + for (int i = 0; i < input.length; i++) + recipeInput[i] = BetterStorageCrafting.makeInput(input[i]); + } + public ShapelessStationRecipe(ItemStack output, Object... input) { + this(new ItemStack[]{ null, null, null, null, output }, input); + } + + public ShapelessStationRecipe setRequiredExperience(int experience) { + requiredExperience = experience; + return this; + } + public ShapelessStationRecipe setCraftingTime(int time) { + craftingTime = time; + return this; + } + + @Override + @SideOnly(Side.CLIENT) + public List getSampleInputs() { + IRecipeInput[] input = new IRecipeInput[9]; + System.arraycopy(recipeInput, 0, input, 0, recipeInput.length); + return Arrays.asList(new IRecipeInput[][]{ input }); + } + + @Override + @SideOnly(Side.CLIENT) + public List getPossibleInputs() { return null; } + + @Override + @SideOnly(Side.CLIENT) + public List getPossibleOutputs() { return null; } + + // IStationRecipe implementation + + @Override + public StationCrafting checkMatch(ItemStack[] input, RecipeBounds bounds) { + IRecipeInput[] requiredInput = new IRecipeInput[9]; + List checklist = new LinkedList(Arrays.asList(recipeInput)); + inputLoop: + for (int i = 0; i < input.length; i++) { + ItemStack item = input[i]; + if (item == null) continue; + Iterator iter = checklist.iterator(); + while (iter.hasNext()) + if ((requiredInput[i] = iter.next()).matches(item)) { + iter.remove(); + continue inputLoop; + } + return null; + } + if (!checklist.isEmpty()) return null; + return new StationCrafting(recipeOutput, requiredInput, requiredExperience, craftingTime); + } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crafting/StationCrafting.java b/src/api/java/net/mcft/copy/betterstorage/api/crafting/StationCrafting.java new file mode 100644 index 000000000..f53acd905 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crafting/StationCrafting.java @@ -0,0 +1,55 @@ +package net.mcft.copy.betterstorage.api.crafting; + +import net.minecraft.item.ItemStack; + +/** Represents a particular crafting instance for a recipe from a specific input. + * Only calculate the output, experience cost, crafting time and craft requirements once. */ +public class StationCrafting { + + protected final ItemStack[] output; + protected final IRecipeInput[] requiredInput; + + protected int requiredExperience; + protected int craftingTime; + + public StationCrafting(ItemStack[] output, IRecipeInput[] requiredInput, + int requiredExperience, int craftingTime) { + this.output = output; + this.requiredInput = requiredInput; + this.requiredExperience = requiredExperience; + this.craftingTime = craftingTime; + } + public StationCrafting(ItemStack[] output, IRecipeInput[] requiredInput, int requiredExperience) { + this(output, requiredInput, requiredExperience, 0); + } + public StationCrafting(ItemStack[] output, IRecipeInput[] requiredInput) { + this(output, requiredInput, 0, 0); + } + + /** Returns the crafting output. */ + public ItemStack[] getOutput() { return output; } + + /** Returns the amount of experience required. */ + public int getRequiredExperience() { return requiredExperience; } + + /** Returns the time (in game ticks) needed to craft this recipe.
+ * Return 0 for the recipe to be instantly available. + * Keep within 0 to 32000 ticks. */ + public int getCraftingTime() { return craftingTime; } + + /** Returns if the recipe can be crafted. Experience is checked automatically. + * @param source Contains information of where this recipe is crafted and who crafts it. */ + public boolean canCraft(ICraftingSource source) { return true; } + + /** Returns the requirements for crafting this recipe again. + * Called after {@link #canCraft} and before {@link #craft}.
+ * After crafting, the crafting grid is filled with items from the + * crafting station's internal storage that match the requirements. + * @param requiredInput The items needed to craft this recipe again. */ + public IRecipeInput[] getCraftRequirements() { return requiredInput; } + + /** Called after the recipe is successfully crafted. Experience is removed automatically. + * @param source contains information of where this recipe was crafted and who crafted it. */ + public void craft(ICraftingSource source) { } + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crate/ICrateStorage.java b/src/api/java/net/mcft/copy/betterstorage/api/crate/ICrateStorage.java new file mode 100644 index 000000000..dbf817f2e --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crate/ICrateStorage.java @@ -0,0 +1,87 @@ +package net.mcft.copy.betterstorage.api.crate; + +import net.minecraft.item.ItemStack; + +public interface ICrateStorage { + + // The "identifier" item stacks are used to look up specific + // types of items within the crate. Item type, damage and NBT + // data are used to identify items, so they have to match. + + // You can see which exact items are stored within the crate + // using the getContents() and getRandomStacks() methods and + // use the stacks returned to extract these items. Do not + // modify stacks returned by these methods. + + // Storage crates are supposed to be random and less efficient, + // as a downside to their ability to expand and store lots of + // items. Therefore, where possible / it makes sense, it's + // recommended to use getRandomStacks(). Look at a few items + // every tick (or a different interval) and give up if none + // matched the requirements. This encourages players to keep + // the number of different items within a crate low. + + // If this is not possible, it's recommended to balance things + // by for example increasing resource or energy cost, perhaps + // depending on the number of unique items. + + + /** Returns the crate's identifier. If it's the same as another + * crate's identifier, they're part of the same crate pile and + * therefore share the same inventory. */ + public Object getCrateIdentifier(); + + + /** Returns the number of slots in this crate pile. */ + public int getCapacity(); + + /** Returns the number of slots that are occupied by items. This is + * also the number of stacks that will be returned by getRandomStacks(). */ + public int getOccupiedSlots(); + + // You can calculate the number of free slots by subtracting the + // capacity by the number of occupied slots. Note that even if this + // is 0, there might still be space for items in occupied slots. + + /** Returns the number of different unique items. This is also + * the number of items that will be returned by getContents(). */ + public int getUniqueItems(); + + + /** Returns all items in the crate pile. The stacks may have + * stack sizes above their usual limit. */ + public Iterable getContents(); + + /** Returns a randomized stream of stacks from the crate pile. This + * works best if used to look at a few items. If the intention is to + * look at the whole inventory, getContents() should be used instead. */ + public Iterable getRandomStacks(); + + + /** Returns the number of items of this specific type. */ + public int getItemCount(ItemStack identifier); + + /** Returns the space left for items of this specific type. */ + public int getSpaceForItem(ItemStack identifier); + + + /** Tries to insert an item stack into the crate. Returns null + * if all items were inserted successfully, or an item stack + * of whatever items could not be inserted. + * The stack may have a stack size above its usual limit. */ + public ItemStack insertItems(ItemStack stack); + + /** Tries to extract the specified type and amount of items. + * Returns null if no items could be extracted, or an item + * stack if some, or all of them could be extracted successfully. */ + public ItemStack extractItems(ItemStack identifier, int amount); + + + /** Registers a crate watcher. Its onCrateItemsModified method + * will be called when any items are changed. */ + public void registerCrateWatcher(ICrateWatcher watcher); + + /** Unregisters a crate watcher. */ + public void unregisterCrateWatcher(ICrateWatcher watcher); + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/crate/ICrateWatcher.java b/src/api/java/net/mcft/copy/betterstorage/api/crate/ICrateWatcher.java new file mode 100644 index 000000000..0b389c6c6 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/crate/ICrateWatcher.java @@ -0,0 +1,13 @@ +package net.mcft.copy.betterstorage.api.crate; + +import net.minecraft.item.ItemStack; + +public interface ICrateWatcher { + + /** Called when any items in the crate storage get + * changed. The stack will represent which items were + * added or removed. Stack size is negative if items + * were removed. */ + public void onCrateItemsModified(ItemStack stack); + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/lock/EnumLockInteraction.java b/src/api/java/net/mcft/copy/betterstorage/api/lock/EnumLockInteraction.java new file mode 100644 index 000000000..e0ce67bb9 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/lock/EnumLockInteraction.java @@ -0,0 +1,9 @@ +package net.mcft.copy.betterstorage.api.lock; + +public enum EnumLockInteraction { + + OPEN, + PICK, + ATTACK + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/lock/IKey.java b/src/api/java/net/mcft/copy/betterstorage/api/lock/IKey.java new file mode 100644 index 000000000..fa730852a --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/lock/IKey.java @@ -0,0 +1,19 @@ +package net.mcft.copy.betterstorage.api.lock; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.item.ItemStack; + +public interface IKey { + + /** Returns if the key is a normal key, instead of a + * special item which has some key-like features. */ + public boolean isNormalKey(); + + /** Gets called when a key is used to open a lock and returns if it's successful.
+ * If useAbility is true, the key will use up an ability, like lockpicking or morphing. */ + public boolean unlock(ItemStack key, ItemStack lock, boolean useAbility); + + /** Returns if the key can be enchanted with this key enchantment. */ + public boolean canApplyEnchantment(ItemStack key, Enchantment enchantment); + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/lock/ILock.java b/src/api/java/net/mcft/copy/betterstorage/api/lock/ILock.java new file mode 100644 index 000000000..1ba9026fd --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/lock/ILock.java @@ -0,0 +1,24 @@ +package net.mcft.copy.betterstorage.api.lock; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public interface ILock { + + /** Returns a string describing the lock's type or how it functions.
+ * Currently there is only "normal" locks, which work with damage. */ + public String getLockType(); + + /** Gets called after a player tries to open a lock, successfully or not. */ + public void onUnlock(ItemStack lock, ItemStack key, ILockable lockable, + EntityPlayer player, boolean success); + + /** Applies any effects from the lock when an interaction fails. */ + public void applyEffects(ItemStack lock, ILockable lockable, + EntityPlayer player, EnumLockInteraction interaction); + + /** Returns if the lock can be enchanted with this lock enchantment. */ + public boolean canApplyEnchantment(ItemStack lock, Enchantment enchantment); + +} diff --git a/src/api/java/net/mcft/copy/betterstorage/api/lock/ILockable.java b/src/api/java/net/mcft/copy/betterstorage/api/lock/ILockable.java new file mode 100644 index 000000000..2b4386543 --- /dev/null +++ b/src/api/java/net/mcft/copy/betterstorage/api/lock/ILockable.java @@ -0,0 +1,29 @@ +package net.mcft.copy.betterstorage.api.lock; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public interface ILockable { + + /** Returns the lock of this container, or null if there is none. */ + public ItemStack getLock(); + + /** Returns if this container can be locked with this lock. */ + public boolean isLockValid(ItemStack lock); + + /** Sets the lock of this container.
+ * Has no effect if canSetLock() returns false. */ + public void setLock(ItemStack lock); + + /** Returns if this container can be used by the player without using a key, + * for example, while the container is being held open by another player. */ + public boolean canUse(EntityPlayer player); + + /** Called when a lock gets unlocked by a key and the container + * should be used/opened by the player as if it wasn't locked. */ + public void useUnlocked(EntityPlayer player); + + /** Makes the container emit a redstone signal for 10 ticks. */ + public void applyTrigger(); + +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/FactoryRegistry.java b/src/api/java/powercrystals/minefactoryreloaded/api/FactoryRegistry.java new file mode 100644 index 000000000..d6c37d45a --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/FactoryRegistry.java @@ -0,0 +1,113 @@ +package powercrystals.minefactoryreloaded.api; + +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.event.FMLInterModComms; +import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; + +/** + * @author PowerCrystals + * + * Class used to register plants and other farming-related things with MFR. Will do nothing if MFR does not exist. + * + */ +public class FactoryRegistry +{ + /* + * This may be called at any time during pre-init, init or post-init, assuming all blocks and items + * that are being accessed from the registry have been appropriately registered. + * Possible messages: + * + * // Registration: + * addLaserPreferredOre | NBTTag with an ItemStack saved on it, with the color on the "value" attribute, + * | A ValuedItem with item and value set. + * registerAutoSpawnerBlacklist | The String identifier of an entity, + * | A subclass of EntityLivingBase. + * registerFertilizable | An instance of IFactoryFertilizable. + * registerFertilizer | An instance of IFactoryFertilizer. + * registerFruitLog | The String identifier of a block. + * registerGrindable | An instance of IFactoryGrindable. + * registerGrinderBlacklist | A subclass of EntityLivingBase. + * registerHarvestable | An instance of IFactoryHarvestable. + * registerLaserOre | NBTTag with an ItemStack saved on it, with the weight on the "value" attribute, + * | A ValuedItem with item and value set. + * registerLiquidDrinkHandler | A ValuedItem with key and object set; ILiquidDrinkHandler expected. + * registerMobEggHandler | An instance of IMobEggHandler. + * registerPickableFruit | An instance of IFactoryFruit. + * registerPlantable | An instance of IFactoryPlantable. + * registerRanchable | An instance of IFactoryRanchable. + * registerRedNetLogicCircuit | An instance of IRedNetLogicCircuit. + * registerRubberTreeBiome | The biomeName field of a biome to white list for rubber trees to spawn in. + * registerSafariNetBlacklist | A subclass of EntityLivingBase. + * registerSafariNetHandler | An instance of ISafariNetHandler. + * registerSludgeDrop | NBTTag with an ItemStack saved on it, with the weight on the "value" attribute, + * | A ValuedItem with item and value set. + * registerSpawnHandler | An instance of IMobSpawnHandler. + * registerVillagerTradeMob | An instance of IRandomMobProvider. + * + * // Simple implementations: + * { Harvestables + * registerHarvestable_Standard | The String identifier of a block. + * registerHarvestable_Log | The String identifier of a block. + * registerHarvestable_Leaves | The String identifier of a block. + * registerHarvestable_Vine | The String identifier of a block. + * registerHarvestable_Shrub | The String identifier of a block. + * registerHarvestable_Mushroom | The String identifier of a block. + * registerHarvestable_Crop | An ItemStack of a block, with a damage value indicating the meta value to harvest at. + * | A ValuedItem with value and object set; Block expected. + * registerHarvestable_Gourd | An NBTTag with the stem and fruit attributes, both String identifiers of blocks. + * } + * { Plantables + * registerPlantable_Standard | An NBTTag with the seed (Item, String identifier), and + * crop (Block, String identifier) attributes set, optionally + * also having the meta (Integer, placed metadata value) attribute set. + * No special checks for location, just sustainability. + * registerPlantable_Crop | An NBTTag with the seed (Item, String identifier), and + * crop (Block, String identifier) attributes set, optionally + * also having the meta (Integer, placed metadata value) attribute set. + * Will automatically hoe dirt and grass into farmland when planting. + * registerPlantable_Sapling | An NBTTag with the sapling (Block, String identifier), and optionally + * the seed (Item, String identifier) attributes set. + * } + * { Fertilizer + * registerFertilizer | An NBTTag with the fert (Item, String identifier), meta (Integer), and + * type (Integer, index into FertilizerType.values()) attributes set. + * } + * { Fertilizables + * registerFertilizable_Grass | The String identifier of a block. Will bonemeal the block and expect + * tall grass be planted above and around it, must be IGrowable. Works with + * the GrowPlant and Grass type fertilizers, not recommended for crop plants. + * registerFertilizable_Gourd | The String identifier of a block. Must be IGrowable, and expects identical + * behavior to vanilla stems. Works with the GrowPlant fertilizers. + * registerFertilizable_Crop | An NBTTag with the plant (Block, String identifier, IGrowable), and + * meta (Integer, max growth phase) attributes set, optionally also having + * the type (Integer, index into FertilizerType) attribute set. + * registerFertilizable_Cocoa | An NBTTag with the plant (Block, String identifier), and optionally also + * the type (Integer, index into FertilizerType) attributes set. + * Expects metadata of the block to exactly match cocoa pods. + * registerFertilizable_Standard | An NBTTag with the plant (Block, String identifier, IGrowable), and + * optionally also the type (Integer, index into FertilizerType) attributes set. + * Expects the block to change when successfully grown (e.g., saplings). + * } + */ + public static void sendMessage(String message, Object value) + { + if (!Loader.isModLoaded("MineFactoryReloaded") || + Loader.instance().activeModContainer() == null) + return; + try + { + Method m = FMLInterModComms.class.getDeclaredMethod("enqueueMessage", Object.class, String.class, IMCMessage.class); + m.setAccessible(true); + Constructor c = IMCMessage.class.getConstructor(String.class, Object.class); + c.setAccessible(true); + m.invoke(null, Loader.instance().activeModContainer(), "MineFactoryReloaded", c.newInstance(message, value)); + } + catch(Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/FertilizerType.java b/src/api/java/powercrystals/minefactoryreloaded/api/FertilizerType.java new file mode 100644 index 000000000..63ae32e60 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/FertilizerType.java @@ -0,0 +1,27 @@ +package powercrystals.minefactoryreloaded.api; + +/** + * @author PowerCrystals + * + * Determines what kind of action a given fertilizer can perform. Your IFactoryFertilizable instances should check this before + * performing any action to maintain future compatibility. + */ +public enum FertilizerType +{ + /** + * The fertilizer will fertilize nothing. + */ + None, + /** + * The fertilizer will fertilize grass. + */ + Grass, + /** + * The fertilizer will grow a plant. + */ + GrowPlant, + /** + * The fertilizer will grow magical crops. + */ + GrowMagicalCrop, +} \ No newline at end of file diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/HarvestType.java b/src/api/java/powercrystals/minefactoryreloaded/api/HarvestType.java new file mode 100644 index 000000000..a56208eed --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/HarvestType.java @@ -0,0 +1,44 @@ +package powercrystals.minefactoryreloaded.api; + +/** + * @author PowerCrystals + * + * Determines what algorithm the Harvester uses when it encounters this IFactoryHarvestable in the world. + */ +public enum HarvestType +{ + /** + * Just break the single block - no special action needed. e.g. Carrots, flowers, wheat. + */ + Normal, + /** + * Search for harvestable blocks adjacent to this block but leave this block. e.g. Pumpkin, melon + */ + Gourd, + /** + * Search for identical blocks above. + */ + Column, + /** + * Search for identical blocks above but leave the bottom one for the future. e.g. Cactus, sugarcane. + */ + LeaveBottom, + /** + * This block is the base of a tree and the harvester should enter tree-cutting mode. + */ + Tree, + /** + * This block is the base of the tree and the harvester should enter tree-cutting mode. + * The tree is searched for in the negative y axis instead. + */ + TreeFlipped, + /** + * This block is part of a tree as above. + */ + TreeLeaf, + /** + * This block is part of a tree as above, but fruits are cut before logs. e.g. cocoa + * The tree is not searched for. + */ + TreeFruit +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java b/src/api/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java new file mode 100644 index 000000000..ac718c2b9 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java @@ -0,0 +1,29 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.item.ItemStack; + +public interface IDeepStorageUnit +{ + /** + * @return A populated ItemStack with stackSize for the full amount of materials in the DSU. + * May have a stackSize > getMaxStackSize(). May have a stackSize of 0 (indicating locked contents). + */ + ItemStack getStoredItemType(); + + /** + * Sets the total amount of the item currently being stored, or zero if all items are to be removed. + */ + void setStoredItemCount(int amount); + + /** + * Sets the type of the stored item and initializes the number of stored items to amount. + * Will overwrite any existing stored items. + */ + void setStoredItemType(ItemStack type, int amount); + + /** + * @return The maximum number of items the DSU can hold. + * May change based on the current type stored. + */ + int getMaxStoredCount(); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizable.java new file mode 100644 index 000000000..a690df517 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizable.java @@ -0,0 +1,41 @@ +package powercrystals.minefactoryreloaded.api; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.world.World; + +/** + * @author PowerCrystals + * + * Defines a fertilizable block, and the process to fertilize it. You can assume that you will never have to check that block ID matches the one returned by + * getFertilizableBlockId(). + */ +public interface IFactoryFertilizable +{ + /** + * @return The block this instance is managing. + */ + public Block getPlant(); + + /** + * @param world The world this block belongs to. + * @param x The X coordinate of this block. + * @param y The Y coordinate of this block. + * @param z The Z coordinate of this block. + * @param fertilizerType The kind of fertilizer being used. + * @return True if the block at (x,y,z) can be fertilized with the given type of fertilizer. + */ + public boolean canFertilize(World world, int x, int y, int z, FertilizerType fertilizerType); + + /** + * @param world The world this block belongs to. + * @param rand A Random instance to use when fertilizing, if necessary. + * @param x The X coordinate of this block. + * @param y The Y coordinate of this block. + * @param z The Z coordinate of this block. + * @param fertilizerType The kind of fertilizer being used. + * @return True if fertilization was successful. If false, the Fertilizer will not consume a fertilizer item and will not drain power. + */ + public boolean fertilize(World world, Random rand, int x, int y, int z, FertilizerType fertilizerType); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizer.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizer.java new file mode 100644 index 000000000..f230ccc47 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizer.java @@ -0,0 +1,29 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +/** + * @author PowerCrystals + * + * Defines a fertilizer item for use in the Fertilizer. + */ +public interface IFactoryFertilizer +{ + /** + * @return The ID of this fertilizer item. + */ + Item getFertilizer(); + + /** + * @return The type of fertilizer this is. + */ + FertilizerType getFertilizerType(ItemStack stack); + + /** + * Called when a fertilization is successful. If you set the ItemStack size to 0, it will be deleted by the fertilizer. + * + * @param fertilizer The ItemStack used to fertilize. + */ + void consume(ItemStack fertilizer); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFruit.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFruit.java new file mode 100644 index 000000000..44c0d4bb8 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFruit.java @@ -0,0 +1,75 @@ +package powercrystals.minefactoryreloaded.api; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * Defines a fruit entry for the Fruit Picker. + * + * @author powercrystals + * + */ +public interface IFactoryFruit +{ + /** + * @return The block this fruit has in the world. + */ + public Block getPlant(); + + /** + * Used to determine if this fruit can be picked (is it ripe yet, etc) + * @param world The world where the fruit is being picked + * @param x The x-coordinate of the fruit + * @param y The y-coordinate of the fruit + * @param z The z-coordinate of the fruit + * @return True if the fruit can be picked + */ + public boolean canBePicked(World world, int x, int y, int z); + + /** + * @return Whether or not the Fruit Picker should break the block when harvesting. If false, no changes will be performed by the Fruit Picker itself. + */ + public boolean breakBlock(); + + /** + * Called by the Fruit Picker to determine what block to replace the picked block with. Only ID and meta/damage will be used. + * At the time this method is called, the fruit still exists. Do not pass an item ID as the return value. + * @param world The world where the fruit is being picked + * @param x The x-coordinate of the fruit + * @param y The y-coordinate of the fruit + * @param z The z-coordinate of the fruit + * @return The block to replace the fruit block with, or null for air. + */ + public ReplacementBlock getReplacementBlock(World world, int x, int y, int z); + + /** + * Called by the Fruit Picker before the fruit is picked. + * @param world The world where the fruit is being picked + * @param x The x-coordinate of the fruit + * @param y The y-coordinate of the fruit + * @param z The z-coordinate of the fruit + */ + public void prePick(World world, int x, int y, int z); + + /** + * Called by the Fruit Picker to determine what drops to generate. At the time this method is called, the fruit still exists. + * @param world The world where the fruit is being picked + * @param x The x-coordinate of the fruit + * @param y The y-coordinate of the fruit + * @param z The z-coordinate of the fruit + */ + public List getDrops(World world, Random rand, int x, int y, int z); + + /** + * Called by the Fruit Picker after the fruit is picked. + * @param world The world where the fruit is being picked + * @param x The x-coordinate of the fruit + * @param y The y-coordinate of the fruit + * @param z The z-coordinate of the fruit + */ + public void postPick(World world, int x, int y, int z); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryGrindable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryGrindable.java new file mode 100644 index 000000000..edfb8c995 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryGrindable.java @@ -0,0 +1,35 @@ +package powercrystals.minefactoryreloaded.api; + +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +/** + * @author PowerCrystals + * + * Defines a grindable entity for the Grinder. + */ +public interface IFactoryGrindable +{ + /** + * @return The class that this grindable instance is handling. This must be a subtype of EntityLivingBase or the entity will never + * be noticed by the Grinder. + */ + public Class getGrindableEntity(); + + /** + * @param world The world this entity is in. + * @param entity The entity instance being ground. + * @param random A Random instance. + * @return The drops generated when this entity is killed. + */ + public List grind(World world, EntityLivingBase entity, Random random); + + /** + * @param entity The entity instance being ground. + * @return Whether this entity has been fully processed or not. + */ + public boolean processEntity(EntityLivingBase entity); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryHarvestable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryHarvestable.java new file mode 100644 index 000000000..d4e620a83 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryHarvestable.java @@ -0,0 +1,71 @@ +package powercrystals.minefactoryreloaded.api; + +import java.util.List; +import java.util.Map; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * @author PowerCrystals + * + * Defines a harvestable block for the Harvester. + */ +public interface IFactoryHarvestable +{ + /** + * @return The block this harvestable instance is managing. + */ + public Block getPlant(); + + /** + * @return The type of harvest the Harvester should perform on this block. + */ + public HarvestType getHarvestType(); + + /** + * @return Whether or not the Harvester should break the block when harvesting. If false, no changes will be performed by the Harvester itself. + */ + public boolean breakBlock(); + + /** + * @param world The world this block is in. + * @param harvesterSettings The harvester's current settings. Do not modify these. + * @param x The X coordinate of the block being harvested. + * @param y The Y coordinate of the block being harvested. + * @param z The Z coordinate of the block being harvested. + * @return True if this block can be harvested. + */ + public boolean canBeHarvested(World world, Map harvesterSettings, int x, int y, int z); + + /** + * @param world The world this block is in. + * @param rand A Random instance to use when generating drops. + * @param harvesterSettings The harvester's current settings. Do not modify these. + * @param x The X coordinate of the block being harvested. + * @param y The Y coordinate of the block being harvested. + * @param z The Z coordinate of the block being harvested. + * @return The drops generated by breaking this block. For a default implementation, calling Block.getBlockDropped() is usually sufficient. + */ + public List getDrops(World world, Random rand, Map harvesterSettings, int x, int y, int z); + + /** + * Called before the block is going to be harvested. Usually empty. + * @param world The world this block is in. + * @param x The X coordinate of the block being harvested. + * @param y The Y coordinate of the block being harvested. + * @param z The Z coordinate of the block being harvested. + */ + public void preHarvest(World world, int x, int y, int z); + + /** + * Called after the block is going to be harvested. Used to re-till soil, for example. + * @param world The world this block is in. + * @param x The X coordinate of the block being harvested. + * @param y The Y coordinate of the block being harvested. + * @param z The Z coordinate of the block being harvested. + */ + public void postHarvest(World world, int x, int y, int z); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryLaserTarget.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryLaserTarget.java new file mode 100644 index 000000000..26ded7abb --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryLaserTarget.java @@ -0,0 +1,25 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * @author skyboy + * + * Defines a target for the Laser Drill Precharger + */ +public interface IFactoryLaserTarget +{ + /** + * @param from The direction the laser is coming from + * @return true if the precharger can form a beam from this side + */ + public boolean canFormBeamWith(ForgeDirection from); + + /** + * @param from The direction the energy is coming from + * @param energy The amount of energy being transferred + * @param simulate true if this transaction will only be simulated + * @return The amount of energy not consumed + */ + public int addEnergy(ForgeDirection from, int energy, boolean simulate); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryPlantable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryPlantable.java new file mode 100644 index 000000000..f9d343892 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryPlantable.java @@ -0,0 +1,64 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * @author PowerCrystals + * + * Defines a plantable object for use in the Planter. + */ +public interface IFactoryPlantable +{ + /** + * @return The item this plantable is managing. + */ + public Item getSeed(); + + /** + * @param stack The stack being planted. + * @return True if this plantable can be planted (useful for metadata items). + */ + public boolean canBePlanted(ItemStack stack); + + /** + * @param world The world instance this block or item will be placed into. + * @param x The destination X coordinate. + * @param y The destination Y coordinate. + * @param z The destination Z coordinate. + * @param stack The stack being planted. + * @return The block that will be placed into the world. + */ + public ReplacementBlock getPlantedBlock(World world, int x, int y, int z, ItemStack stack); + + /** + * @param world The world instance this block or item will be placed into. + * @param x The destination X coordinate. + * @param y The destination Y coordinate. + * @param z The destination Z coordinate. + * @param stack The stack being planted. + * @return True if this plantable can be placed at the provided coordinates. + */ + public boolean canBePlantedHere(World world, int x, int y, int z, ItemStack stack); + + /** + * Called before planting is performed. Used to till soil, for example. + * @param world The world instance this block or item will be placed into. + * @param x The destination X coordinate. + * @param y The destination Y coordinate. + * @param z The destination Z coordinate. + * @param stack The stack being planted. + */ + public void prePlant(World world, int x, int y, int z, ItemStack stack); + + /** + * Called after planting is performed. Usually empty. + * @param world The world instance this block or item will be placed into. + * @param x The destination X coordinate. + * @param y The destination Y coordinate. + * @param z The destination Z coordinate. + * @param stack The stack being planted. + */ + public void postPlant(World world, int x, int y, int z, ItemStack stack); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryRanchable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryRanchable.java new file mode 100644 index 000000000..27c173fa6 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryRanchable.java @@ -0,0 +1,28 @@ +package powercrystals.minefactoryreloaded.api; + +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.inventory.IInventory; +import net.minecraft.world.World; + +/** + * @author PowerCrystals + * + * Defines a ranchable entity for use in the Rancher. + */ +public interface IFactoryRanchable +{ + /** + * @return The entity being ranched. Must be a subtype of EntityLivingBase. + */ + public Class getRanchableEntity(); + + /** + * @param world The world this entity is in. + * @param entity The entity instance being ranched. + * @param rancher The rancher instance doing the ranching. Used to access the Rancher's inventory when milking cows, for example. + * @return A list of drops. + */ + public List ranch(World world, EntityLivingBase entity, IInventory rancher); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ILiquidDrinkHandler.java b/src/api/java/powercrystals/minefactoryreloaded/api/ILiquidDrinkHandler.java new file mode 100644 index 000000000..31eba0040 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/ILiquidDrinkHandler.java @@ -0,0 +1,8 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.entity.EntityLivingBase; + +public interface ILiquidDrinkHandler +{ + public void onDrink(EntityLivingBase player); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IMobEggHandler.java b/src/api/java/powercrystals/minefactoryreloaded/api/IMobEggHandler.java new file mode 100644 index 000000000..01693a738 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IMobEggHandler.java @@ -0,0 +1,18 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.entity.EntityList.EntityEggInfo; +import net.minecraft.item.ItemStack; + +/** + * @author PowerCrystals + * + * Defines a class that MFR will use to local egg info for a given mob. This is used to color the Safari Net based on the captured mob. + */ +public interface IMobEggHandler +{ + /** + * @param safariNet The Safari Net that is looking for egg info. + * @return An EntityEggInfo, or null if this instance cannot handle this mob. + */ + public EntityEggInfo getEgg(ItemStack safariNet); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IMobSpawnHandler.java b/src/api/java/powercrystals/minefactoryreloaded/api/IMobSpawnHandler.java new file mode 100644 index 000000000..46e295eae --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IMobSpawnHandler.java @@ -0,0 +1,27 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.entity.EntityLivingBase; + +/** + * @author skyboy + * + * Defines a handler for mob spawns from the autospawner. + * Added primarily to solve item duping on exact spawn & entity inventories + */ +public interface IMobSpawnHandler +{ + /** + * @return The class that this instance is handling. + */ + public Class getMobClass(); + + /** + * @param entity The entity instance being spawned. Typically your regular spawn code 100% handles this + */ + public void onMobSpawn(EntityLivingBase entity); + + /** + * @param entity The entity instance being exact-copied. Clear your inventories & etc. here + */ + public void onMobExactSpawn(EntityLivingBase entity); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/INeedleAmmo.java b/src/api/java/powercrystals/minefactoryreloaded/api/INeedleAmmo.java new file mode 100644 index 000000000..74dae7e8d --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/INeedleAmmo.java @@ -0,0 +1,13 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface INeedleAmmo +{ + public boolean onHitEntity(ItemStack stac, EntityPlayer owner, Entity hit, double distance); + public void onHitBlock(ItemStack stac, EntityPlayer owner, World world, int x, int y, int z, int side, double distance); + public float getSpread(ItemStack stack); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IRandomMobProvider.java b/src/api/java/powercrystals/minefactoryreloaded/api/IRandomMobProvider.java new file mode 100644 index 000000000..b03d6f08a --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IRandomMobProvider.java @@ -0,0 +1,11 @@ +package powercrystals.minefactoryreloaded.api; + +import java.util.List; + +import net.minecraft.world.World; + + +public interface IRandomMobProvider +{ + public List getRandomMobs(World world); +} \ No newline at end of file diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ISafariNetHandler.java b/src/api/java/powercrystals/minefactoryreloaded/api/ISafariNetHandler.java new file mode 100644 index 000000000..370017956 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/ISafariNetHandler.java @@ -0,0 +1,28 @@ +package powercrystals.minefactoryreloaded.api; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** + * @author PowerCrystals + * + * Defines an object that can display information about a captured mob in a Safari net. + */ +public interface ISafariNetHandler +{ + /** + * @return The class of mob that this handler applies to. + */ + public Class validFor(); + + /** + * @param safariNetStack The Safari Net that is requesting information. + * @param player The player holding the Safari Net. + * @param infoList The current list of information strings. Add yours to this. + * @param advancedTooltips True if the advanced tooltips option is on. + */ + @SuppressWarnings("rawtypes") + public void addInformation(ItemStack safariNetStack, EntityPlayer player, List infoList, boolean advancedTooltips); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ISyringe.java b/src/api/java/powercrystals/minefactoryreloaded/api/ISyringe.java new file mode 100644 index 000000000..5e876e807 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/ISyringe.java @@ -0,0 +1,46 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * @author PowerCrystals + * + * Defines a syringe for use in the Vet machine. + */ +public interface ISyringe +{ + /** + * Called when the vet is deciding if it should use this syringe. + * @param world The world instance. + * @param entity The entity being injected. + * @param syringe The syringe ItemStack. + * @return True if the entity can be injected by this syringe. + */ + public boolean canInject(World world, EntityLivingBase entity, ItemStack syringe); + + /** + * Called to perform an injection. + * @param world The world instance. + * @param entity The entity being injected. + * @param syringe The syringe ItemStack. + * @return True if injection was successful. + */ + public boolean inject(World world, EntityLivingBase entity, ItemStack syringe); + + /** + * Called to check if a syringe is empty + * @param syringe The syringe ItemStack. + * @return True if the syringe is empty + */ + public boolean isEmpty(ItemStack syringe); + + /** + * Called to get the empty syringe + * Note: this will replace the syringe, max stacksize should be 1 + * @param syringe The syringe ItemStack. + * @return An empty syringe ItemStack + */ + public ItemStack getEmptySyringe(ItemStack syringe); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IToolHammer.java b/src/api/java/powercrystals/minefactoryreloaded/api/IToolHammer.java new file mode 100644 index 000000000..09ce77713 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IToolHammer.java @@ -0,0 +1,9 @@ +package powercrystals.minefactoryreloaded.api; + +/** + * @author PowerCrystals + * Defines a tool that can rotate MFR machines. Implement on an Item class. Requires no additional work on your part. + */ +public interface IToolHammer +{ +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IToolHammerAdvanced.java b/src/api/java/powercrystals/minefactoryreloaded/api/IToolHammerAdvanced.java new file mode 100644 index 000000000..9c4523495 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IToolHammerAdvanced.java @@ -0,0 +1,16 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.item.ItemStack; + +/** + * @author PowerCrystals + * + * This interface is like IToolHammer, but is for items that change state on a per-stack basis. Implement this + * instead of IToolHammer - not both! + * + * This interface will replace IToolHammer in MC 1.6. + */ +public interface IToolHammerAdvanced +{ + public boolean isActive(ItemStack stack); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IUpgrade.java b/src/api/java/powercrystals/minefactoryreloaded/api/IUpgrade.java new file mode 100644 index 000000000..d4ee62f3b --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/IUpgrade.java @@ -0,0 +1,36 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.item.ItemStack; + +/** + * @author skyboy + * + * Defines an upgrade item for use in various MFR machines. + */ +public interface IUpgrade +{ + public static enum UpgradeType + { + RADIUS, + SPEED, + EFFICIENCY, + STRENGTH, + ENERGY; + } + + /** + * Called to get the strength of the upgrade + * @param type The type of the upgrade + * @param stack The upgrade ItemStack. + * @return The strength of the upgrade + */ + public int getUpgradeLevel(UpgradeType type, ItemStack stack); + + /** + * Called to get what the upgrade is applicable for + * @param type The type of the upgrade + * @param stack The upgrade ItemStack. + * @return True if the upgrade is effective for the upgrade type + */ + public boolean isApplicableFor(UpgradeType type, ItemStack stack); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/MobDrop.java b/src/api/java/powercrystals/minefactoryreloaded/api/MobDrop.java new file mode 100644 index 000000000..7f5dd7cc9 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/MobDrop.java @@ -0,0 +1,21 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.WeightedRandom; + +public class MobDrop extends WeightedRandom.Item +{ + private ItemStack _stack; + + public MobDrop(int weight, ItemStack stack) + { + super(weight); + _stack = stack; + } + + public ItemStack getStack() + { + if(_stack == null) return null; + return _stack.copy(); + } +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/RanchedItem.java b/src/api/java/powercrystals/minefactoryreloaded/api/RanchedItem.java new file mode 100644 index 000000000..86791cc54 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/RanchedItem.java @@ -0,0 +1,68 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +/** + * @author skyboy026 + * + * Defines an ItemStack or a FluidStack that is the result of an entity being ranched + */ +public final class RanchedItem { + private final ItemStack item; + private final FluidStack fluid; + + public RanchedItem(Block item, int amount, int meta) + { + this(new ItemStack(item, amount, meta)); + } + + public RanchedItem(Block item, int amount) + { + this(new ItemStack(item, amount)); + } + + public RanchedItem(Block item) + { + this(new ItemStack(item)); + } + + public RanchedItem(Item item, int amount, int meta) + { + this(new ItemStack(item, amount, meta)); + } + + public RanchedItem(Item item, int amount) + { + this(new ItemStack(item, amount)); + } + + public RanchedItem(Item item) + { + this(new ItemStack(item)); + } + + public RanchedItem(ItemStack item) + { + this.item = item; + fluid = null; + } + + public RanchedItem(FluidStack fluid) + { + this.fluid = fluid; + item = null; + } + + public boolean hasFluid() + { + return item == null & fluid != null; + } + + public Object getResult() + { + return item == null ? fluid : item; + } +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/RandomMob.java b/src/api/java/powercrystals/minefactoryreloaded/api/RandomMob.java new file mode 100644 index 000000000..2ffa56b1a --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/RandomMob.java @@ -0,0 +1,28 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.entity.Entity; +import net.minecraft.util.WeightedRandom; + +public class RandomMob extends WeightedRandom.Item +{ + private Entity _mob; + public final boolean shouldInit; + + public RandomMob(Entity savedMob, int weight, boolean init) + { + super(weight); + _mob = savedMob; + shouldInit = init; + } + + public RandomMob(Entity savedMob, int weight) + { + this(savedMob, weight, true); + } + + public Entity getMob() + { + if(_mob == null) return null; + return _mob; + } +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ReplacementBlock.java b/src/api/java/powercrystals/minefactoryreloaded/api/ReplacementBlock.java new file mode 100644 index 000000000..88cd7a86f --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/ReplacementBlock.java @@ -0,0 +1,137 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class ReplacementBlock +{ + protected byte _hasMeta; + protected int _meta; + protected final Block _block; + protected final NBTTagCompound _tileTag; + + /** + * Called to replace a block in the world. + * @param world The world object + * @param x The X coord + * @param y The Y coord + * @param z The Z coord + * @param stack The ItemStack being used to replace the block (may be null) + * @return True if the block was set successfully + */ + public boolean replaceBlock(World world, int x, int y, int z, ItemStack stack) + { + int meta = getMeta(world, x, y, z, stack); + if (world.setBlock(x, y, z, _block, meta, 3)) + { + if (hasTag(stack) && _block.hasTileEntity(meta)) + { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile != null) + tile.readFromNBT(getTag(world, x, y, z, stack)); + } + return true; + } + return false; + } + + /** + * Called to get the metadata of the replacement block in the world. + * @param world The world object + * @param x The X coord + * @param y The Y coord + * @param z The Z coord + * @param stack The ItemStack being used to replace the block (may be null) + * @return The metadata of the block + */ + protected int getMeta(World world, int x, int y, int z, ItemStack stack) + { + int m = 0; + if (_hasMeta > 0) + { + if (_hasMeta > 1) + return _meta; + m = stack.getItemDamage(); + Item item = stack.getItem(); + if (item instanceof ItemBlock) + m = ((ItemBlock)item).getMetadata(m); + } + return m; + } + + /** + * Called to set the metdata of this ReplacementBlock to a fixed value + * @param meta The metadata of the block + * @return This instance + */ + public ReplacementBlock setMeta(int meta) + { + if (meta >= 0) + { + _hasMeta = 2; + _meta = meta; + } + return this; + } + + /** + * Called to set the metdata of this ReplacementBlock to a value read from an ItemStack + * @param meta The metadata of the block + * @return This instance + */ + public ReplacementBlock setMeta(boolean hasMeta) + { + _hasMeta = (byte) (hasMeta ? 1 : 0); + return this; + } + + /** + * Called to get the NBTTagCompound a TileEntity will read its state from + * @param world The world object + * @param x The X coord + * @param y The Y coord + * @param z The Z coord + * @param stack The ItemStack being used to replace the block (may be null) + * @return The NBTTagCompound a TileEntity will read its state from + */ + protected NBTTagCompound getTag(World world, int x, int y, int z, ItemStack stack) + { + return _tileTag; + } + + /** + * Called to see if a TileEntity should have its state set + * @param stack The ItemStack being used to replace the block (may be null) + * @return True if the TileEntity should have its state set + */ + protected boolean hasTag(ItemStack stack) + { + return _tileTag != null; + } + + public ReplacementBlock(Item block) + { + this(Block.getBlockFromItem(block)); + } + + public ReplacementBlock(Item block, NBTTagCompound tag) + { + this(Block.getBlockFromItem(block), tag); + } + + public ReplacementBlock(Block block) + { + this(block, null); + } + + public ReplacementBlock(Block block, NBTTagCompound tag) + { + _block = block; + _tileTag = tag; + } +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ValuedItem.java b/src/api/java/powercrystals/minefactoryreloaded/api/ValuedItem.java new file mode 100644 index 000000000..3d075fa3b --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/ValuedItem.java @@ -0,0 +1,72 @@ +package powercrystals.minefactoryreloaded.api; + +import net.minecraft.item.ItemStack; + +public class ValuedItem +{ + public final int value; + public final ItemStack item; + public final String key; + public final Object object; + + public ValuedItem(int v, ItemStack i) + { + value = v; + item = i; + key = null; + object = null; + } + + public ValuedItem(String v, Object i) + { + value = -1; + item = null; + key = v; + object = i; + } + + /** + * Presently unused but included so that if they do get used in the future, + * people including this in their jar and loading before MFR don't destroy everyone + */ + + public ValuedItem(int v, Object i) + { + value = v; + item = null; + key = null; + object = i; + } + + public ValuedItem(String v, ItemStack i) + { + value = -1; + item = i; + key = v; + object = null; + } + + public ValuedItem(int v, String k, ItemStack i) + { + value = v; + item = i; + key = k; + object = null; + } + + public ValuedItem(int v, String k, Object i) + { + value = v; + item = null; + key = k; + object = i; + } + + public ValuedItem(int v, String k, ItemStack i, Object o) + { + value = v; + item = i; + key = k; + object = o; + } +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInputNode.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInputNode.java new file mode 100644 index 000000000..85186b789 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInputNode.java @@ -0,0 +1,52 @@ +package powercrystals.minefactoryreloaded.api.rednet; + +import powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection; + +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Defines a Block that can connect to RedNet cables. This must be implemented on your Block class. + *

+ * Note that when you implement this, the RedNet network makes several assumptions about your code - + * It will not clamp values to 0 <= x <= 15. This means you must be able to accept any possible integer + * without crashing, even negatives. It will also assume that calling the onInput(s)Changed() methods + * are sufficient, and will not issue block updates. In Single mode, it will call onInputChanged. + *

+ * RedNet cables have their subnets indicated to the user by colored bands on the cable. + * The color of a given subnet is the same as the wool with metadata equal to the subnet number. + *

+ * For reference:
+ * 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray, + * 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black + */ +public interface IRedNetInputNode extends IRedNetConnection +{ + /** + * Called when the input values to this block change. Only called if your block is connected in "All" mode. + * Do not issue a network value update from inside this method call; it will be ignored. Issue your updates + * on the next tick. + * + * @param world The world this block is in. + * @param x This block's X coordinate. + * @param y This block's Y coordinate. + * @param z This block's Z coordinate. + * @param side The side the input values are being changed on. + * @param inputValues The new set of input values. This array will be 16 elements long. + */ + public void onInputsChanged(World world, int x, int y, int z, ForgeDirection side, int[] inputValues); + + /** + * Called when the input value to this block changes. Only called if your block is connected in "Single" mode. + * Do not issue a network value update from inside this method call; it will be ignored. Issue your updates + * on the next tick. + * + * @param world The world this block is in. + * @param x This block's X coordinate. + * @param y This block's Y coordinate. + * @param z This block's Z coordinate. + * @param side The side the input values are being changed on. + * @param inputValue The new input value + */ + public void onInputChanged(World world, int x, int y, int z, ForgeDirection side, int inputValue); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicCircuit.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicCircuit.java new file mode 100644 index 000000000..981ce06b6 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicCircuit.java @@ -0,0 +1,19 @@ +package powercrystals.minefactoryreloaded.api.rednet; + +import net.minecraft.nbt.NBTTagCompound; + +public interface IRedNetLogicCircuit +{ + public byte getInputCount(); + + public byte getOutputCount(); + + public int[] recalculateOutputValues(long worldTime, int[] inputValues); + + public String getUnlocalizedName(); + public String getInputPinLabel(int pin); + public String getOutputPinLabel(int pin); + + public void readFromNBT(NBTTagCompound tag); + public void writeToNBT(NBTTagCompound tag); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicPoint.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicPoint.java new file mode 100644 index 000000000..dd05969e9 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicPoint.java @@ -0,0 +1,36 @@ +package powercrystals.minefactoryreloaded.api.rednet; + +/** + * + * @author skyboy + */ +public interface IRedNetLogicPoint +{ + /** + * + * @param out + * @return + */ + public void transformOutput(int[] out); + + /** + * + * @param out + * @return + */ + public void transformOutput(int out); + + /** + * + * @param in + * @return + */ + public int[] transformInput(int[] in); + + /** + * + * @param in + * @return + */ + public int transformInput(int in); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetNetworkContainer.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetNetworkContainer.java new file mode 100644 index 000000000..f2157d2c7 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetNetworkContainer.java @@ -0,0 +1,31 @@ +package powercrystals.minefactoryreloaded.api.rednet; + +import net.minecraft.world.World; + +/** + * + * You should not implement this yourself. Instead, use this to look for cables to notify from your IRedNetOmniNode as this does not + * require a block update. This will be implemented on the cable's Block class. + * + */ +public interface IRedNetNetworkContainer +{ + /** + * Tells the network to recalculate all subnets. + * @param world The world this cable is in. + * @param x The x-coordinate of this cable. + * @param x The y-coordinate of this cable. + * @param x The z-coordinate of this cable. + */ + public void updateNetwork(World world, int x, int y, int z); + + /** + * Tells the network to recalculate a specific subnet. + * @param world The world this cable is in. + * @param x The x-coordinate of this cable. + * @param x The y-coordinate of this cable. + * @param x The z-coordinate of this cable. + * @param subnet The subnet to recalculate. + */ + public void updateNetwork(World world, int x, int y, int z, int subnet); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOmniNode.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOmniNode.java new file mode 100644 index 000000000..f2bdf397c --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOmniNode.java @@ -0,0 +1,22 @@ +package powercrystals.minefactoryreloaded.api.rednet; + +/** + * Defines a Block that can connect to RedNet cables. This must be implemented on your Block class. + *

+ * Note that when you implement this, the RedNet network makes several assumptions about your code - + * It will not clamp values to 0 <= x <= 15. This means you must be able to accept any possible integer + * without crashing, even negatives. It will also assume that calling the onInput(s)Changed() methods + * are sufficient, and will not issue block updates. It will never call the vanilla redstone output + * methods, and will only query the methods contained in this interface. + *

+ * RedNet cables have their subnets indicated to the user by colored bands on the cable. + * The color of a given subnet is the same as the wool with metadata equal to the subnet number. + *

+ * For reference:
+ * 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray, + * 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black + */ +public interface IRedNetOmniNode extends IRedNetInputNode, IRedNetOutputNode +{ + // this is merely provided for convenience +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOutputNode.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOutputNode.java new file mode 100644 index 000000000..34281875b --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOutputNode.java @@ -0,0 +1,51 @@ +package powercrystals.minefactoryreloaded.api.rednet; + +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection; + +/** + * Defines a Block that can connect to RedNet cables. This must be implemented on your Block class. + *

+ * Note that when you implement this, the RedNet network makes several assumptions about your code - + * It will never call the vanilla redstone output methods, querying only the methods contained in + * this interface, and will not issue block updates. + *

+ * RedNet cables have their subnets indicated to the user by colored bands on the cable. + * The color of a given subnet is the same as the wool with metadata equal to the subnet number. + *

+ * For reference:
+ * 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray, + * 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black + */ +public interface IRedNetOutputNode extends IRedNetConnection +{ + /** + * Returns the output values of this RedNet node. + * This array must be 16 elements long. + * Only called if your block is connected in "All" mode. + * + * @param world The world this block is in. + * @param x This block's X coordinate. + * @param y This block's Y coordinate. + * @param z This block's Z coordinate. + * @param side The side the output values are required for. + * @return The output values. + */ + public int[] getOutputValues(World world, int x, int y, int z, ForgeDirection side); + + /** + * Returns the output value of this RedNet node for a given subnet. + * Must be the same as getOutputValues(world, x, y, z, side)[subnet]. + * + * @param world The world this block is in. + * @param x This block's X coordinate. + * @param y This block's Y coordinate. + * @param z This block's Z coordinate. + * @param side The side the output value is required for. + * @param subnet The subnet to get the output value for (0-15). + * @return The output value. + */ + public int getOutputValue(World world, int x, int y, int z, ForgeDirection side, int subnet); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetConnection.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetConnection.java new file mode 100644 index 000000000..003800d8f --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetConnection.java @@ -0,0 +1,26 @@ +package powercrystals.minefactoryreloaded.api.rednet.connectivity; + +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Defines a Block that can connect to RedNet cables. This must be implemented on your Block class. + */ +public interface IRedNetConnection +{ + /** + * Returns the connection type of this Block. If this value must be changed + * while the block is alive, it must notify neighbors of a change. + *

+ * For nodes that want to interact with rednet, + * see IRedNetInputNode, IRedNetOutputNode, and IRedNetOmniNode + * + * @param world The world this block is in. + * @param x This block's X coordinate. + * @param y This block's Y coordinate. + * @param z This block's Z coordinate. + * @param side The side that connection information is required for. + * @return The connection type. + */ + public RedNetConnectionType getConnectionType(World world, int x, int y, int z, ForgeDirection side); +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetDecorative.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetDecorative.java new file mode 100644 index 000000000..18f76313f --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetDecorative.java @@ -0,0 +1,6 @@ +package powercrystals.minefactoryreloaded.api.rednet.connectivity; + +public interface IRedNetDecorative +{ + +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetNoConnection.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetNoConnection.java new file mode 100644 index 000000000..d3d1bae45 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetNoConnection.java @@ -0,0 +1,6 @@ +package powercrystals.minefactoryreloaded.api.rednet.connectivity; + +public interface IRedNetNoConnection +{ + +} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/RedNetConnectionType.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/RedNetConnectionType.java new file mode 100644 index 000000000..d3b3dfe95 --- /dev/null +++ b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/RedNetConnectionType.java @@ -0,0 +1,80 @@ +package powercrystals.minefactoryreloaded.api.rednet.connectivity; + +import java.util.HashMap; +import java.util.Map; + +/** + * Defines how RedNet cable connects to a block + *

+ * None: RedNet will never connect to this block (if this is all you want: use IRedNetNoConnection) + *

+ * CableSingle: Connections will use the cable renderer with a single band, best used for whole blocks + *
+ * PlateSingle: Connections will use the plate renderer with a single band, used for conveyers and rails + *

+ * CableAll: Connections permit access to all 16 bands + *
+ * PlateAll: Connections permit access to all 16 bands + *

+ * Forced connection modes are best used for decoration blocks: RedNet will not connect normally, + * but will if the user forces it. Typically, IRedNetDecorative is desired for this instead + *

+ * ForcedCableSingle: Connections permit access to a single band, only when the cable is in forced connection mode + *
+ * ForcedPlateSingle: Connections permit access to a single band, only when the cable is in forced connection mode + *

+ * ForcedCableAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode + *
+ * ForcedPlateAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode + *

+ * The decorative nodes are for when you want rednet to decide how to connect to your block, + * but also need to receive full updates from the network. + *

+ * DecorativeSingle: Connections permit access to a single band, using standard connection logic + *
+ * DecorativeAll: Connections permit access to all 16 bands, using standard connection logic + */ +public enum RedNetConnectionType +{ + None, // 0; 0000000 + CableSingle, // 11; 0001011 + PlateSingle, // 13; 0001101 + CableAll, // 19; 0010011 + PlateAll, // 21; 0010101 + ForcedCableSingle, // 43; 0101011 + ForcedPlateSingle, // 45; 0101101 + ForcedCableAll, // 51; 0110011 + ForcedPlateAll, // 53; 0110101 + DecorativeSingle, // NA; 0001001 + DecorativeAll; // NA; 0010001 + + public final boolean isConnected = this.ordinal() != 0; // 0 bit (mask: 1) + public final boolean isSingleSubnet = this.name().endsWith("Single"); // 3 bit (mask: 8) + public final boolean isAllSubnets = this.name().endsWith("All"); // 4 bit (mask: 16) + public final boolean isPlate = this.name().contains("Plate"); // 2 bit (mask: 4) + public final boolean isCable = this.name().contains("Cable"); // 1 bit (mask: 2) + public final boolean isConnectionForced = this.name().startsWith("Forced"); // 5 bit (mask: 32) + public final boolean isDecorative = this.name().startsWith("Decorative"); + public final short flags = toFlags(isConnected, isCable, isPlate, + isSingleSubnet, isAllSubnets, isConnectionForced); + + public static final RedNetConnectionType fromFlags(short flags) + { + return connections.get(flags); + } + + private static final short toFlags(boolean ...flags) + { + short ret = 0; + for (int i = flags.length; i --> 0;) + ret |= (flags[i] ? 1 : 0) << i; + return ret; + } + + private static final Map connections = new HashMap(); + + static { + for (RedNetConnectionType type : RedNetConnectionType.values()) + connections.put(type.flags, type); + } +} diff --git a/src/api/java/rblocks/api/IOrientable.java b/src/api/java/rblocks/api/IOrientable.java new file mode 100644 index 000000000..aa0a5d6cb --- /dev/null +++ b/src/api/java/rblocks/api/IOrientable.java @@ -0,0 +1,41 @@ +package rblocks.api; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement on a tile entity to manage storage of rotation information. + * + * remember for optional dependencies use: + * + * @Interface(iface = "rblocks.api.IOrientable", modid = "RotateableBlocks") + * + * this will strip the interface at runtime and allow your mod to work without RotatableBlocks. + * + */ +public interface IOrientable +{ + + /** + * @return true or false, if the tile rotation is meaningful, or even changeable + */ + boolean canBeRotated(); + + /** + * @return the direction the tile is facing + */ + ForgeDirection getForward(); + + /** + * @return the direction top of the tile + */ + ForgeDirection getUp(); + + /** + * Update the orientation + * + * @param Forward + * @param Up + */ + void setOrientation(ForgeDirection Forward, ForgeDirection Up); + +} \ No newline at end of file diff --git a/src/api/java/rblocks/api/IRBMethods.java b/src/api/java/rblocks/api/IRBMethods.java new file mode 100644 index 000000000..6fcbd1592 --- /dev/null +++ b/src/api/java/rblocks/api/IRBMethods.java @@ -0,0 +1,29 @@ +package rblocks.api; + +/** + * These methods are added to the Block Class. + */ +public interface IRBMethods +{ + + /** + * @returns true or false based on previously set value, or null if a value has not been set. + */ + Boolean isRotableBlockSupported(); + + /** + * updates the field for the supported flag. + * + * @param supported + * @return supported + */ + boolean setRotableBlockSupported(boolean supported); + + /** + * Override this method if you wish to render your rotatable block instead of using the default renderer. + * + * @return the normal renderType value, or Rotablable Blocks render type depending on if the block is supported. + */ + int getRealRenderType(); + +} diff --git a/src/api/java/rblocks/api/IRotatableBlocksApi.java b/src/api/java/rblocks/api/IRotatableBlocksApi.java new file mode 100644 index 000000000..c67bad42f --- /dev/null +++ b/src/api/java/rblocks/api/IRotatableBlocksApi.java @@ -0,0 +1,19 @@ +package rblocks.api; + +/** + * obtain via + * + * @Instance("RotateableBlocks") + * static IRotatableBlocksApi api; + * + */ +public interface IRotatableBlocksApi +{ + + /** + * @return render type for rotatable blocks, not this render type only handles in world render, and will not render + * anything as entities, or inventory items. + */ + int getRotatableRenderType(); + +} diff --git a/src/api/java/rblocks/api/RotatableBlockDisable.java b/src/api/java/rblocks/api/RotatableBlockDisable.java new file mode 100644 index 000000000..216db54e1 --- /dev/null +++ b/src/api/java/rblocks/api/RotatableBlockDisable.java @@ -0,0 +1,12 @@ +package rblocks.api; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * If found on a Block, Rotatable Blocks will ignore the block, even if it would have normally supported it. + */ +@Retention(RetentionPolicy.RUNTIME) +public @interface RotatableBlockDisable { + +} diff --git a/src/api/java/rblocks/api/RotatableBlockEnable.java b/src/api/java/rblocks/api/RotatableBlockEnable.java new file mode 100644 index 000000000..5c449fbbc --- /dev/null +++ b/src/api/java/rblocks/api/RotatableBlockEnable.java @@ -0,0 +1,14 @@ +package rblocks.api; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * if this annotation is found on a block, Rotatable Blocks will consider it supported, even if it normally would not + * be, this dosn't magically make it work, but it will allow you to possibly render the rotation or work around the + * Limitations. + */ +@Retention(RetentionPolicy.RUNTIME) +public @interface RotatableBlockEnable { + +} diff --git a/src/api/java/uristqwerty/CraftGuide/CommonUtilities.java b/src/api/java/uristqwerty/CraftGuide/CommonUtilities.java new file mode 100644 index 000000000..0e79e9283 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/CommonUtilities.java @@ -0,0 +1,262 @@ +package uristqwerty.CraftGuide; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import uristqwerty.CraftGuide.api.StackInfo; +import uristqwerty.CraftGuide.api.StackInfoSource; +import uristqwerty.CraftGuide.api.Util; + +public class CommonUtilities +{ + public static Field getPrivateField(Class fromClass, String... names) throws NoSuchFieldException + { + Field field = null; + + for(String name: names) + { + try + { + field = fromClass.getDeclaredField(name); + field.setAccessible(true); + return field; + } + catch(NoSuchFieldException e) + { + } + } + + if(names.length == 1) + { + throw new NoSuchFieldException("Could not find a field named " + names[0]); + } + else + { + String nameStr = "[" + names[0]; + + for(int i = 1; i < names.length; i++) + { + nameStr += ", " + names[i]; + } + + throw new NoSuchFieldException("Could not find a field with any of the following names: " + nameStr + "]"); + } + } + + public static Object getPrivateValue(Class objectClass, T object, String... names) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException + { + Field field = getPrivateField(objectClass, names); + return field.get(object); + } + + public static String itemName(ItemStack item) + { + String idText = ""; + + if(Minecraft.getMinecraft().gameSettings.advancedItemTooltips) + { + if(item.getHasSubtypes()) + { + idText = String.format(" (%04d/%d)", Item.itemRegistry.getNameForObject(item.getItem()), getItemDamage(item)); + } + else + { + idText = String.format(" (%04d)", Item.itemRegistry.getNameForObject(item.getItem())); + } + } + + return item.getDisplayName() + idText; + } + + public static List itemNames(ItemStack item) + { + ArrayList list = new ArrayList(); + + if(getItemDamage(item) == CraftGuide.DAMAGE_WILDCARD && item.getHasSubtypes()) + { + ArrayList subItems = new ArrayList(); + item.getItem().getSubItems(item.getItem(), null, subItems); + + for(ItemStack stack: subItems) + { + list.add(itemName(stack)); + } + } + else + { + list.add(itemName(item)); + } + + return list; + } + + public static int countItemNames(ItemStack item) + { + if(getItemDamage(item) == CraftGuide.DAMAGE_WILDCARD && item.getHasSubtypes()) + { + ArrayList temp = new ArrayList(); + item.getItem().getSubItems(item.getItem(), null, temp); + + return temp.size(); + } + else + { + return 1; + } + } + + public static int countItemNames(Object item) + { + if(item instanceof ItemStack) + { + return countItemNames((ItemStack)item); + } + else if(item instanceof List) + { + int count = 0; + for(Object o: (List)item) + { + count += countItemNames(o); + } + + return count; + } + else + { + return 0; + } + } + + public static List getExtendedItemStackText(Object item) + { + List text = getItemStackText(item); + + if(item instanceof ItemStack || (item instanceof List && ((List)item).get(0) instanceof ItemStack)) + { + ItemStack stack = item instanceof ItemStack? (ItemStack)item : (ItemStack)((List)item).get(0); + + Iterator iterator = StackInfo.sources.iterator(); + while(iterator.hasNext()) + { + StackInfoSource infoSource = iterator.next(); + try + { + String info = infoSource.getInfo(stack); + + if(info != null) + { + text.add(info); + } + } + catch(LinkageError e) + { + CraftGuideLog.log(e); + iterator.remove(); + } + catch(Exception e) + { + CraftGuideLog.log(e); + } + } + } + + if(item instanceof List && ((List)item).size() > 1) + { + int count = CommonUtilities.countItemNames(item); + text.add("\u00a77" + (count - 1) + " other type" + (count > 2? "s" : "") + " of item accepted"); + } + + return text; + } + + public static boolean searchExtendedItemStackText(Object item, String text) + { + for(String line: getExtendedItemStackText(item)) + { + if(line != null && line.toLowerCase().contains(text)) + { + return true; + } + } + + return false; + } + + private static List getItemStackText(Object item) + { + if(item instanceof List) + { + return getItemStackText(((List)item).get(0)); + } + else if(item instanceof ItemStack) + { + return Util.instance.getItemStackText((ItemStack)item); + } + else + { + return null; + } + } + + static Field itemDamageField = null; + + static + { + try + { + itemDamageField = getPrivateField(ItemStack.class, "itemDamage", "field_77991_e", "e"); + } + catch(NoSuchFieldException e) + { + e.printStackTrace(); + } + } + + public static int getItemDamage(ItemStack stack) + { + if(stack.getItem() != null) + { + return stack.getItemDamage(); + } + else + { + if(itemDamageField != null) + { + try + { + return itemDamageField.getInt(stack); + } + catch(IllegalArgumentException e) + { + e.printStackTrace(); + } + catch(IllegalAccessException e) + { + e.printStackTrace(); + } + } + + return 0; + } + } + + public static boolean checkItemStackMatch(ItemStack first, ItemStack second) + { + if(first == null || second == null) + { + return first == second; + } + + return first.getItem() == second.getItem() + && ( + getItemDamage(first) == CraftGuide.DAMAGE_WILDCARD || + getItemDamage(second) == CraftGuide.DAMAGE_WILDCARD || + getItemDamage(first) == getItemDamage(second) + ); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/CraftGuide.java b/src/api/java/uristqwerty/CraftGuide/CraftGuide.java new file mode 100644 index 000000000..35e5e0cba --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/CraftGuide.java @@ -0,0 +1,393 @@ +package uristqwerty.CraftGuide; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import org.lwjgl.input.Keyboard; + +import uristqwerty.CraftGuide.RecipeGeneratorImplementation.RecipeGeneratorForgeExtension; +import uristqwerty.CraftGuide.api.ItemSlot; +import uristqwerty.gui_craftguide.theme.ThemeManager; + +public class CraftGuide +{ + public static CraftGuideSide side; + public static CraftGuideLoaderSide loaderSide; + + public static ItemCraftGuide itemCraftGuide; + private static Properties config = new Properties(); + + private static Map configComments; + + public static int resizeRate; + public static int mouseWheelScrollRate; + public static int defaultKeybind; + public static boolean pauseWhileOpen = true; + public static boolean gridPacking = true; + public static boolean alwaysShowID = false; + public static boolean textSearchRequiresShift = false; + public static boolean enableKeybind = true; + public static boolean newerBackgroundStyle = false; + public static boolean hideMundanePotionRecipes = true; + public static boolean insertBetterWithRenewablesRecipes = false; + public static boolean enableItemRecipe; + + public static boolean betterWithRenewablesDetected = false; + public static boolean needsRecipeRefresh = false; + + public static final int DAMAGE_WILDCARD = 32767; + + public void preInit(String iconName) + { + CraftGuideLog.init(new File(configDirectory(), "CraftGuide.log")); + + initForgeExtensions(); + loadProperties(); + + side.preInit(); + + ItemSlot.implementation = new ItemSlotImplementationImplementation(); + + if(enableKeybind) + { + side.initKeybind(); + } + + addItem(iconName); + } + + public void init() + { + try + { + Class.forName("uristqwerty.CraftGuide.recipes.DefaultRecipeProvider").newInstance(); + Class.forName("uristqwerty.CraftGuide.recipes.BrewingRecipes").newInstance(); + } + catch(InstantiationException e) + { + CraftGuideLog.log(e); + } + catch(IllegalAccessException e) + { + CraftGuideLog.log(e); + } + catch(ClassNotFoundException e) + { + CraftGuideLog.log(e); + } + + loadModRecipes("BTW", "uristqwerty.CraftGuide.recipes.BTWRecipes"); + addIC2Recipes(); + loadModRecipes("gregtech_addon", "uristqwerty.CraftGuide.recipes.GregTechRecipes"); + loadModRecipes("extendedWorkbench", "uristqwerty.CraftGuide.recipes.ExtendedWorkbench"); + loadModRecipes("BuildCraft|Factory", "uristqwerty.CraftGuide.recipes.BuildCraftRecipes"); + side.initNetworkChannels(); + } + + private void addIC2Recipes() + { + try + { + Class.forName("ic2.core.block.machine.tileentity.TileEntityMetalFormer"); + loadModRecipes("IC2", "uristqwerty.CraftGuide.recipes.IC2ExperimentalRecipes"); + } + catch(ClassNotFoundException e) + { + loadModRecipes("IC2", "uristqwerty.CraftGuide.recipes.IC2Recipes"); + } + } + + private void loadModRecipes(String modID, String recipeClass) + { + if(loaderSide.isModLoaded(modID)) + { + try + { + Class.forName(recipeClass).newInstance(); + } + catch(ClassNotFoundException e) + { + CraftGuideLog.log(e); + } + catch(Exception e) + { + CraftGuideLog.log(e, "", true); + } + catch(LinkageError e) + { + CraftGuideLog.log(e, "", true); + } + } + } + + private void initForgeExtensions() + { + if(loaderSide.isModLoaded("Forge")) + { + try + { + RecipeGeneratorImplementation.forgeExt = (RecipeGeneratorForgeExtension)Class.forName("uristqwerty.CraftGuide.ForgeStuff").newInstance(); + } + catch(InstantiationException e) + { + CraftGuideLog.log(e); + } + catch(IllegalAccessException e) + { + CraftGuideLog.log(e); + } + catch(ClassNotFoundException e) + { + CraftGuideLog.log(e); + } + } + } + + private void addItem(String iconName) + { + itemCraftGuide = new ItemCraftGuide(iconName); + loaderSide.addName(itemCraftGuide, "Crafting Guide"); + + if(enableItemRecipe) + { + loaderSide.addRecipe(new ItemStack(itemCraftGuide), new Object[] {"pbp", + "bcb", "pbp", Character.valueOf('c'), Blocks.crafting_table, + Character.valueOf('p'), Items.paper, Character.valueOf('b'), + Items.book}); + } + } + + static + { + configComments = new HashMap(); + configComments.put("newerBackgroundStyle", "If false, CraftGuide will use the images from CraftGuideRecipe.png for vanilla shaped crafting recipes, which is better for texture packs. If true, CraftGuide will use the default background (pieced together from parts of CraftGuide.png, then slot backgrounds drawn overtop), which is worse for texture packs, and looks identical without a texture pack."); + configComments.put("hideMundanePotionRecipes", "Hides recipes that convert a useful potion into a mundane potion with the damage value 8192, which is basically a failed potion. In the vanilla ingredients, they only occur when you try to add an effect without first adding netherwart (or add a second effect ingredient without using netherwart in between). Note that 8192 means, to the vanilla brewing system 'can make a splash potion without losing it's effects', and a potion with a value of EXACTLY 8192 does not have any effects anyway."); + configComments.put("logThemeDebugInfo", "If true, CraftGuide will output a lot of debugging text every time it reloads the themes."); + configComments.put("gridPacking", "Affects whether CraftGuide distributes leftover horizontal space between columns, or puts it all at the far right. Currently not useful, as any grid with columns now resizes itself so that it doesn't have any leftover horizntal space that needs to be distributed."); + configComments.put("resizeRate", "If greater than 0, the maximum number of pixels that the CraftGuide window will change size by each frame. When the effect was actually tried in-game, it just made the GUI feel slow, so defaults to 0 ('ALL the pixels!')."); + configComments.put("textSearchRequiresShift", "Normally, when typing in the item list search box, pressing enter instantly returns to the recipe list, using whatever you had typed as the text filter. If this option is true, you also have to hold shift, to avoid accidentally searching."); + configComments.put("RecipeList_mouseWheelScrollRate", "How many rows to scroll for each unit of mouse wheel scrolliness."); + configComments.put("enableItemRecipe", "Whether you can craft the CraftGuide item."); + configComments.put("enableKeybind", "Whether CraftGuide sets up a keybind so that you can open it without the item."); + configComments.put("PauseWhileOpen", "In singleplayer, whether the game is paused while you have CraftGuide open. If false, you can browse recipes while waiting for your machines to run, but it also means that a ninja creeper may be able to sneak up behind you while you are distracted."); + configComments.put("alwaysShowID", "If true, item tooltips have an additional line showing their item ID and damage value. Added before the vanilla F3+H, it has a different format, and puts the item ID on a separate line from the item name. If this setting is false, CraftGuide will only show item IDs in this way in the rare case of an item error"); + configComments.put("defaultKeybind", "If Minecraft isn't properly loading changed keybinds, or you are putting together a config/modpack and want a different default value, you can change the default CraftGuide keybind here."); + } + + private void setConfigDefaults() + { + config.setProperty("RecipeList_mouseWheelScrollRate", "3"); + config.setProperty("PauseWhileOpen", Boolean.toString(true)); + config.setProperty("resizeRate", "0"); + config.setProperty("gridPacking", Boolean.toString(true)); + config.setProperty("alwaysShowID", Boolean.toString(false)); + config.setProperty("textSearchRequiresShift", Boolean.toString(false)); + config.setProperty("enableKeybind", Boolean.toString(true)); + config.setProperty("enableItemRecipe", Boolean.toString(true)); + config.setProperty("newerBackgroundStyle", Boolean.toString(false)); + config.setProperty("hideMundanePotionRecipes", Boolean.toString(true)); + config.setProperty("insertBetterWithRenewablesRecipes", Boolean.toString(false)); + config.setProperty("logThemeDebugInfo", Boolean.toString(false)); + config.setProperty("defaultKeybind", Integer.toString(Keyboard.KEY_G)); + } + + /** + * Load configuration. If a configuration file exists in the new + * location, load from there. If not, but one exists in the old + * location, use that instead. If neither exists, just use the + * defaults. + * + * Afterwards, save it back to the new configuration directory + * (to create it if it doesn't exist, or to update it if it was + * created by an earlier version of CraftGuide that didn't have + * exactly the same set of properties). + */ + private void loadProperties() + { + File oldConfigDir = loaderSide.getConfigDir(); + File oldConfigFile = new File(oldConfigDir, "CraftGuide.cfg"); + File newConfigDir = configDirectory(); + File newConfigFile = newConfigDir == null? null : new File(newConfigDir, "CraftGuide.cfg"); + File configFile = null; + + if(newConfigFile != null && newConfigFile.exists()) + { + configFile = newConfigFile; + } + else if(oldConfigFile.exists() && oldConfigFile.canRead()) + { + configFile = oldConfigFile; + } + + setConfigDefaults(); + + if(configFile != null && configFile.exists() && configFile.canRead()) + { + try + { + config.load(new FileInputStream(configFile)); + } + catch(FileNotFoundException e) + { + e.printStackTrace(); + } + catch(IOException e) + { + e.printStackTrace(); + } + } + + try + { + resizeRate = Integer.valueOf(config.getProperty("resizeRate")); + } + catch(NumberFormatException e) + { + } + + try + { + mouseWheelScrollRate = Integer.valueOf(config + .getProperty("RecipeList_mouseWheelScrollRate")); + } + catch(NumberFormatException e) + { + } + + try + { + defaultKeybind = Integer.valueOf(config.getProperty("defaultKeybind")); + } + catch(NumberFormatException e) + { + } + + pauseWhileOpen = Boolean.valueOf(config.getProperty("PauseWhileOpen")); + gridPacking = Boolean.valueOf(config.getProperty("gridPacking")); + alwaysShowID = Boolean.valueOf(config.getProperty("alwaysShowID")); + textSearchRequiresShift = Boolean.valueOf(config.getProperty("textSearchRequiresShift")); + enableKeybind = Boolean.valueOf(config.getProperty("enableKeybind")); + newerBackgroundStyle = Boolean.valueOf(config.getProperty("newerBackgroundStyle")); + hideMundanePotionRecipes = Boolean.valueOf(config.getProperty("hideMundanePotionRecipes")); + insertBetterWithRenewablesRecipes = Boolean.valueOf(config.getProperty("insertBetterWithRenewablesRecipes")); + ThemeManager.debugOutput = Boolean.valueOf(config.getProperty("logThemeDebugInfo")); + enableItemRecipe = Boolean.valueOf(config.getProperty("enableItemRecipe")); + + if(newConfigFile != null && !newConfigFile.exists()) + { + try + { + newConfigFile.createNewFile(); + } + catch(IOException e) + { + e.printStackTrace(); + } + } + + if(newConfigFile != null && newConfigFile.exists() && newConfigFile.canWrite()) + { + try + { + saveConfig(new FileOutputStream(newConfigFile)); + } + catch(IOException e) + { + e.printStackTrace(); + } + } + } + + // config.store() does not permit per-setting comments. + private void saveConfig(OutputStream outputStream) throws IOException + { + Set properties = config.stringPropertyNames(); + + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream)); + + writer.write("# "); + writer.write(new Date().toString()); + writer.newLine(); + + for(String property: properties) + { + if(configComments.containsKey(property)) + { + writer.newLine(); + writer.write("# "); + writer.write(configComments.get(property)); + writer.newLine(); + writer.write(property); + writer.write('='); + writer.write(config.getProperty(property)); + writer.newLine(); + } + } + + writer.newLine(); + + for(String property: properties) + { + if(!configComments.containsKey(property)) + { + writer.write(property); + writer.write('='); + writer.write(config.getProperty(property)); + writer.newLine(); + } + } + + writer.close(); + } + + public static File configDirectory() + { + File dir = new File(loaderSide.getConfigDir(), "CraftGuide"); + + if(!dir.exists() && !dir.mkdirs()) + { + return null; + } + + return dir; + } + + public static String getTranslation(String string) + { + if(string.equals("filter_type.input")) + { + return "Input"; + } + else if(string.equals("filter_type.output")) + { + return "Output"; + } + else if(string.equals("filter_type.machine")) + { + return "Machine"; + } + else if(string.equals("filter")) + { + return "Filter"; + } + else + { + return null; + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/CraftGuideLoaderSide.java b/src/api/java/uristqwerty/CraftGuide/CraftGuideLoaderSide.java new file mode 100644 index 000000000..9aa4a8f13 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/CraftGuideLoaderSide.java @@ -0,0 +1,17 @@ +package uristqwerty.CraftGuide; + +import java.io.File; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public interface CraftGuideLoaderSide +{ + public boolean isModLoaded(String name); + public File getConfigDir(); + public void addRecipe(ItemStack itemStack, Object[] objects); + public void addName(Item item, String name); + public void logConsole(String text); + public void logConsole(String text, Throwable e); + public void initClientNetworkChannels(); +} diff --git a/src/api/java/uristqwerty/CraftGuide/CraftGuideLog.java b/src/api/java/uristqwerty/CraftGuide/CraftGuideLog.java new file mode 100644 index 000000000..7cd4da1d8 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/CraftGuideLog.java @@ -0,0 +1,66 @@ +package uristqwerty.CraftGuide; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; + +public class CraftGuideLog +{ + private static PrintWriter output; + private static int exceptionsLogged = 0; + private static final int EXCEPTION_LIMIT = 1000; + + public static void init(File file) + { + try + { + output = new PrintWriter(file); + } + catch(IOException e) + { + e.printStackTrace(); + } + } + + public static void log(String text) + { + log(text, false); + } + + public static void log(String text, boolean console) + { + if(console && CraftGuide.loaderSide != null) + { + CraftGuide.loaderSide.logConsole(text); + } + + output.println(text); + output.flush(); + } + + public static void log(Throwable e) + { + log(e, "", false); + } + + public static void log(Throwable e, String text, boolean console) + { + if(exceptionsLogged <= EXCEPTION_LIMIT) + { + if(console && CraftGuide.loaderSide != null) + { + CraftGuide.loaderSide.logConsole(text, e); + } + + e.printStackTrace(output); + output.flush(); + + if(exceptionsLogged == EXCEPTION_LIMIT) + { + log("Exception limit passed. To prevent excessively large log files, no further exceptions will be logged."); + } + + exceptionsLogged++; + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/CraftGuideSide.java b/src/api/java/uristqwerty/CraftGuide/CraftGuideSide.java new file mode 100644 index 000000000..24c897afb --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/CraftGuideSide.java @@ -0,0 +1,21 @@ +package uristqwerty.CraftGuide; + +import net.minecraft.entity.player.EntityPlayer; + +public interface CraftGuideSide +{ + public void initKeybind(); + public void checkKeybind(); + public void preInit(); + public void reloadRecipes(); + public void openGUI(EntityPlayer player); + public void initNetworkChannels(); + + /* Ensure that Tessellator isn't drawing. More to prevent an otherwise nonfatal + * rendering errors from crashing Minecraft entirely. Better for CraftGuide to + * be unusable (invisible items, offset stuff, other graphical glitches), than + * to dump the player back to windows. Since keyboard input not affected by + * render issues, you can always exit the GUI and continue playing without it. + */ + public void stopTessellating(); +} diff --git a/src/api/java/uristqwerty/CraftGuide/CraftGuide_FML.java b/src/api/java/uristqwerty/CraftGuide/CraftGuide_FML.java new file mode 100644 index 000000000..87b2e5cea --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/CraftGuide_FML.java @@ -0,0 +1,103 @@ +package uristqwerty.CraftGuide; + +import java.io.File; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.Logger; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.SidedProxy; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.gameevent.TickEvent; + +@Mod(modid = "craftguide", name = "CraftGuide", version = "1.5.2") +public class CraftGuide_FML implements CraftGuideLoaderSide +{ + private static Logger logger; + + @SidedProxy(clientSide = "uristqwerty.CraftGuide.client.fml.CraftGuideClient_FML", + serverSide = "uristqwerty.CraftGuide.server.CraftGuideServer") + public static CraftGuideSide side; + + private CraftGuide craftguide; + + public static class KeyCheckTick + { + @SubscribeEvent + public void clientTick(TickEvent.ClientTickEvent event) + { + side.checkKeybind(); + } + } + + @EventHandler + public void preInit(FMLPreInitializationEvent event) + { + logger = event.getModLog(); + CraftGuide.loaderSide = this; + CraftGuide.side = side; + craftguide = new CraftGuide(); + craftguide.preInit("craftguide:craftguide_item"); + + FMLCommonHandler.instance().bus().register(new KeyCheckTick()); + } + + @EventHandler + public void init(FMLInitializationEvent event) + { + craftguide.init(); + } + + + + @Override + public boolean isModLoaded(String name) + { + return Loader.isModLoaded(name); + } + + @Override + public File getConfigDir() + { + return Loader.instance().getConfigDir(); + } + + @Override + public void addRecipe(ItemStack output, Object[] recipe) + { + GameRegistry.addRecipe(output, recipe); + } + + @Override + public void addName(Item item, String name) + { + //LanguageRegistry.addName(item, name); + } + + @Override + public void logConsole(String text) + { + logger.log(Level.INFO, text); + } + + @Override + public void logConsole(String text, Throwable e) + { + logger.log(Level.WARN, text, e); + } + + @Override + public void initClientNetworkChannels() + { + // TODO Auto-generated method stub + + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/CraftType.java b/src/api/java/uristqwerty/CraftGuide/CraftType.java new file mode 100644 index 000000000..bf70b91e2 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/CraftType.java @@ -0,0 +1,166 @@ +package uristqwerty.CraftGuide; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class CraftType implements Comparable +{ + private static Map> cache = new HashMap>(); + private static Map arrayListCache = new HashMap(); + private int itemID, damage; + private Item item; + private Object stack; + + private CraftType(Item item, int itemDamage) + { + this.item = item; + itemID = Item.getIdFromItem(item); + damage = itemDamage; + stack = new ItemStack(item, 1, damage); + } + + private CraftType(ArrayList items) + { + ItemStack itemStack = items.get(0); + item = itemStack.getItem(); + itemID = Item.getIdFromItem(item); + damage = CommonUtilities.getItemDamage(itemStack); + stack = items; + } + + public static CraftType getInstance(Object stack) + { + if(stack instanceof ItemStack) + { + return getInstance((ItemStack)stack); + } + else if(stack instanceof ArrayList && ((ArrayList)stack).size() > 0) + { + return getInstance((ArrayList)stack); + } + else + { + return null; + } + } + + private static CraftType getInstance(ArrayList stack) + { + CraftType type = arrayListCache.get(stack); + + if(type == null) + { + type = new CraftType(stack); + arrayListCache.put(stack, type); + } + + return type; + } + + private static CraftType getInstance(ItemStack stack) + { + int id = Item.getIdFromItem(stack.getItem()); + Map map = cache.get(id); + + if(map == null) + { + map = new HashMap(); + cache.put(id, map); + } + + CraftType type = map.get(CommonUtilities.getItemDamage(stack)); + + if(type == null) + { + type = new CraftType(stack.getItem(), CommonUtilities.getItemDamage(stack)); + map.put(CommonUtilities.getItemDamage(stack), type); + } + + return type; + } + + public static boolean hasInstance(ItemStack stack) + { + int id = Item.getIdFromItem(stack.getItem()); + if(!cache.containsKey(id)) + { + return false; + } + + return cache.get(id).containsKey(CommonUtilities.getItemDamage(stack)); + } + + @Override + public int compareTo(CraftType other) + { + if(this.itemID != other.itemID) + { + return this.itemID > other.itemID? 1 : -1; + } + else if(this.damage != other.damage) + { + return this.damage > other.damage? 1 : -1; + } + else if((this.stack instanceof ArrayList) != (other.stack instanceof ArrayList)) + { + return (this.stack instanceof ArrayList)? -1 : 1; + } + + return 0; + } + + @Override + public boolean equals(Object obj) + { + if(obj != null && obj instanceof CraftType) + { + CraftType type = (CraftType)obj; + + if(stack instanceof ItemStack && type.stack instanceof ItemStack) + { + return type.itemID == this.itemID && type.damage == this.damage; + } + else if(stack instanceof ArrayList && type.stack instanceof ArrayList) + { + return stack.equals(type.stack); + } + else + { + return false; + } + } + + return super.equals(obj); + } + + @Override + public int hashCode() + { + return damage * 3571 + itemID; + } + + public Object getStack() + { + return stack; + } + + public ItemStack getDisplayStack() + { + if(stack instanceof ItemStack) + { + return (ItemStack)stack; + } + else if(stack instanceof ArrayList) + { + return (ItemStack)((ArrayList)stack).get(0); + } + else + { + return null; + } + } +} \ No newline at end of file diff --git a/src/api/java/uristqwerty/CraftGuide/DefaultRecipeTemplate.java b/src/api/java/uristqwerty/CraftGuide/DefaultRecipeTemplate.java new file mode 100644 index 000000000..74f7fb393 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/DefaultRecipeTemplate.java @@ -0,0 +1,53 @@ +package uristqwerty.CraftGuide; + +import net.minecraft.item.ItemStack; +import uristqwerty.CraftGuide.api.CraftGuideRecipe; +import uristqwerty.CraftGuide.api.RecipeTemplate; +import uristqwerty.CraftGuide.api.Slot; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.TexturedRect; +import uristqwerty.gui_craftguide.texture.Texture; + +public class DefaultRecipeTemplate implements RecipeTemplate +{ + private Slot[] slots; + private Texture backgroundTexture, backgroundSelectedTexture; + private Renderable background, backgroundSelected; + private int width = 79, height = 58; + + private ItemStack craftingType; + + public DefaultRecipeTemplate(Slot[] slots, ItemStack craftingType, Texture background, Texture backgroundSelected) + { + this.slots = slots; + this.backgroundTexture = background; + this.backgroundSelectedTexture = backgroundSelected; + this.background = new TexturedRect(0, 0, width, height, background, 0, 0); + this.backgroundSelected = new TexturedRect(0, 0, width, height, backgroundSelected, 0, 0); + this.craftingType = craftingType; + } + + @Override + public CraftGuideRecipe generate(Object[] items) + { + return new Recipe(slots, items, background, backgroundSelected).setSize(width, height); + } + + @Override + public RecipeTemplate setSize(int width, int height) + { + this.width = width; + this.height = height; + + background = new TexturedRect(0, 0, width, height, backgroundTexture, 0, 0); + backgroundSelected = new TexturedRect(0, 0, width, height, backgroundSelectedTexture, 0, 0); + + return this; + } + + @Override + public ItemStack getCraftingType() + { + return craftingType; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/ForgeStuff.java b/src/api/java/uristqwerty/CraftGuide/ForgeStuff.java new file mode 100644 index 000000000..354fa43f6 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/ForgeStuff.java @@ -0,0 +1,143 @@ +package uristqwerty.CraftGuide; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map.Entry; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; +import uristqwerty.CraftGuide.RecipeGeneratorImplementation.RecipeGeneratorForgeExtension; + +public class ForgeStuff implements RecipeGeneratorForgeExtension +{ + @Override + public boolean matchesType(IRecipe recipe) + { + return recipe instanceof ShapedOreRecipe || recipe instanceof ShapelessOreRecipe; + } + + @Override + public boolean isShapelessRecipe(IRecipe recipe) + { + return recipe instanceof ShapelessOreRecipe; + } + + @Override + public Object[] getCraftingRecipe(RecipeGeneratorImplementation gen, IRecipe recipe, boolean allowSmallGrid) + { + try + { + if(recipe instanceof ShapedOreRecipe) + { + int width = (Integer)CommonUtilities.getPrivateValue(ShapedOreRecipe.class, (ShapedOreRecipe)recipe, "width"); + int height = (Integer)CommonUtilities.getPrivateValue(ShapedOreRecipe.class, (ShapedOreRecipe)recipe, "height"); + Object[] items = (Object[])CommonUtilities.getPrivateValue(ShapedOreRecipe.class, (ShapedOreRecipe)recipe, "input"); + + if(allowSmallGrid && width < 3 && height < 3) + { + return gen.getSmallShapedRecipe(width, height, items, ((ShapedOreRecipe)recipe).getRecipeOutput()); + } + else + { + return gen.getCraftingShapedRecipe(width, height, items, ((ShapedOreRecipe)recipe).getRecipeOutput()); + } + } + else if(recipe instanceof ShapelessOreRecipe) + { + List items = (List)CommonUtilities.getPrivateValue(ShapelessOreRecipe.class, (ShapelessOreRecipe)recipe, "input"); + return gen.getCraftingShapelessRecipe(items, ((ShapelessOreRecipe)recipe).getRecipeOutput()); + } + } + catch(SecurityException e) + { + CraftGuideLog.log(e); + } + catch(NoSuchFieldException e) + { + CraftGuideLog.log(e); + } + catch(IllegalArgumentException e) + { + CraftGuideLog.log(e); + } + catch(IllegalAccessException e) + { + CraftGuideLog.log(e); + } + + return null; + } + + private IdentityHashMap mappingCache = new IdentityHashMap(); + + @Override + public List emptyOreDictEntryText(List oreDictionaryList) + { + if(!mappingCache.containsKey(oreDictionaryList)) + { + mappingCache.put(oreDictionaryList, getOreDictName(oreDictionaryList)); + } + + String name = mappingCache.get(oreDictionaryList); + + if(name == null) + { + return null; + } + else + { + List text = new ArrayList(1); + text.add("0 items for Ore Dictionary name '" + name + "'"); + return text; + } + } + + private String getOreDictName(List list) + { + try + { + Field oreStacks = OreDictionary.class.getDeclaredField("oreStacks"); + oreStacks.setAccessible(true); + HashMap> map = (HashMap>)oreStacks.get(null); + Integer integer = null; + + for(Entry> entry: map.entrySet()) + { + if(entry.getValue() == list) + { + integer = entry.getKey(); + break; + } + } + + if(integer != null) + { + return OreDictionary.getOreName(integer); + } + } + catch(NoSuchFieldException e) + { + e.printStackTrace(); + } + catch(SecurityException e) + { + e.printStackTrace(); + } + catch(IllegalArgumentException e) + { + e.printStackTrace(); + } + catch(IllegalAccessException e) + { + e.printStackTrace(); + } + + return null; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/GuiCraftGuide.java b/src/api/java/uristqwerty/CraftGuide/GuiCraftGuide.java new file mode 100644 index 000000000..df833896c --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/GuiCraftGuide.java @@ -0,0 +1,530 @@ +package uristqwerty.CraftGuide; + +import java.util.EnumMap; +import java.util.Map; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +import org.lwjgl.input.Keyboard; + +import uristqwerty.CraftGuide.api.SlotType; +import uristqwerty.CraftGuide.api.Util; +import uristqwerty.CraftGuide.client.FilterDisplay; +import uristqwerty.CraftGuide.client.ui.ButtonTemplate; +import uristqwerty.CraftGuide.client.ui.CraftTypeDisplay; +import uristqwerty.CraftGuide.client.ui.CraftingDisplay; +import uristqwerty.CraftGuide.client.ui.FilterSelectGrid; +import uristqwerty.CraftGuide.client.ui.GuiButton; +import uristqwerty.CraftGuide.client.ui.GuiButton.ButtonState; +import uristqwerty.CraftGuide.client.ui.GuiResizeHandle; +import uristqwerty.CraftGuide.client.ui.GuiScrollBar; +import uristqwerty.CraftGuide.client.ui.GuiSlider; +import uristqwerty.CraftGuide.client.ui.GuiTabbedDisplay; +import uristqwerty.CraftGuide.client.ui.GuiText; +import uristqwerty.CraftGuide.client.ui.GuiTextInput; +import uristqwerty.CraftGuide.client.ui.IButtonListener; +import uristqwerty.CraftGuide.client.ui.RowCount; +import uristqwerty.CraftGuide.client.ui.ToggleButton; +import uristqwerty.gui_craftguide.components.GuiElement; +import uristqwerty.gui_craftguide.components.GuiElement.AnchorPoint; +import uristqwerty.gui_craftguide.components.Image; +import uristqwerty.gui_craftguide.components.Window; +import uristqwerty.gui_craftguide.minecraft.Gui; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.Texture; +import uristqwerty.gui_craftguide.texture.TextureClip; + +public class GuiCraftGuide extends Gui +{ + private RecipeCache recipeCache = new RecipeCache(); + private FilterDisplay filter; + private CraftingDisplay craftingDisplay; + private Window guiOverlay; + + private static GuiCraftGuide instance; + + private Texture paneBackground = DynamicTexture.instance("pane"); + private Texture windowBackground = DynamicTexture.instance("window"); + + public static Map filterSlotTypes = new EnumMap(SlotType.class); + + static + { + filterSlotTypes.put(SlotType.INPUT_SLOT, true); + filterSlotTypes.put(SlotType.OUTPUT_SLOT, true); + filterSlotTypes.put(SlotType.MACHINE_SLOT, false); + } + + public static GuiCraftGuide getInstance() + { + if(instance == null) + { + instance = new GuiCraftGuide(); + } + + return instance; + } + + public void setFilterItem(ItemStack item) + { + try + { + recipeCache.filter(Util.instance.getCommonFilter(item.copy())); + } + catch(Exception e) + { + CraftGuideLog.log(e, "Error while trying to filter displayed recipes.", true); + } + } + + private static final int initialWindowWidth = 248; + private static final int initialWindowHeight = 198; + + public GuiCraftGuide() + { + super(initialWindowWidth, initialWindowHeight); + + Texture texture = DynamicTexture.instance("base_image"); + + ButtonTemplate buttonTemplate = new ButtonTemplate( + new Texture[]{ + DynamicTexture.instance("button_up"), + DynamicTexture.instance("button_over"), + DynamicTexture.instance("button_up"), + DynamicTexture.instance("button_down"), + }); + + guiWindow.background = windowBackground; + + guiWindow.addElement( + new GuiResizeHandle( + initialWindowWidth - 8, initialWindowHeight - 8, 8, 8, + guiWindow + )); + + guiWindow.addElement( + new GuiButton(initialWindowWidth - 8, initialWindowHeight - 8, 8, 8, texture, 0, 191) + .anchor(AnchorPoint.BOTTOM_RIGHT)); + + guiWindow.addElement( + new GuiElement(5, 5, 58, 86) + .setBackground(paneBackground)); + + guiWindow.addElement( + new GuiTabbedDisplay(0, 0, initialWindowWidth, initialWindowHeight) + .addTab( + generateRecipeTab(texture, buttonTemplate) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT), + (GuiButton)new GuiButton(6, 6, 28, 28, buttonTemplate) + .setToolTip("Recipe list") + .addElement(new GuiElement(0, 0, 28,28) + .setBackground(new TextureClip(texture, 1, 76, 28,28)) + .setClickable(false))) + .addTab( + generateTypeTab(texture, buttonTemplate) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT), + (GuiButton)new GuiButton(34, 6, 28, 28, buttonTemplate) + .setToolTip("Show/Hide recipes by crafting type") + .addElement(new GuiElement(0, 0, 28,28) + .setBackground(new TextureClip(texture, 29, 76, 28,28)) + .setClickable(false))) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT) + .setClickable(false)); + + + guiOverlay = new Window(0, 0, 0, 0, renderer); + + /*guiOverlay.addElement( + new GuiBorderedRect( + 0, 0, 0, 0, + texture, 78, 1, 2, 32 + ) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT) + );*/ + } + + private GuiElement generateRecipeTab(Texture texture, ButtonTemplate buttonTemplate) + { + GuiElement recipeTab = new GuiElement(0, 0, initialWindowWidth, initialWindowHeight) + .setClickable(false); + + ButtonTemplate toggleTemplate = new ButtonTemplate( + new Texture[]{ + DynamicTexture.instance("toggle_off"), + DynamicTexture.instance("toggle_off_over"), + DynamicTexture.instance("toggle_on"), + DynamicTexture.instance("toggle_on_over"), + }); + + recipeTab.addElement( + new GuiElement(initialWindowWidth - 19, 5, 14, initialWindowHeight - 10) + .setBackground(paneBackground) + .anchor(AnchorPoint.TOP_RIGHT, AnchorPoint.BOTTOM_RIGHT)); + + + recipeTab.addElement( + new ToggleButton(8, 100, 13, 13, toggleTemplate) + .setState(filterSlotTypes.get(SlotType.INPUT_SLOT)? ButtonState.DOWN : ButtonState.UP) + .addButtonListener(new FilterToggle(SlotType.INPUT_SLOT)) + .anchor(AnchorPoint.BOTTOM_LEFT) + .addElement( + new GuiText(15, 3, CraftGuide.getTranslation("filter_type.input"), 0xff000000))); + + + recipeTab.addElement( + new ToggleButton(8, 115, 13, 13, toggleTemplate) + .setState(filterSlotTypes.get(SlotType.OUTPUT_SLOT)? ButtonState.DOWN : ButtonState.UP) + .addButtonListener(new FilterToggle(SlotType.OUTPUT_SLOT)) + .anchor(AnchorPoint.BOTTOM_LEFT) + .addElement( + new GuiText(15, 3, CraftGuide.getTranslation("filter_type.output"), 0xff000000))); + + recipeTab.addElement( + new ToggleButton(8, 130, 13, 13, toggleTemplate) + .setState(filterSlotTypes.get(SlotType.MACHINE_SLOT)? ButtonState.DOWN : ButtonState.UP) + .addButtonListener(new FilterToggle(SlotType.MACHINE_SLOT)) + .anchor(AnchorPoint.BOTTOM_LEFT) + .addElement( + new GuiText(15, 3, CraftGuide.getTranslation("filter_type.machine"), 0xff000000))); + + GuiButton clearButton = + (GuiButton) new GuiButton(8, initialWindowHeight - 18, 50, 13, buttonTemplate, "Clear") + .anchor(AnchorPoint.BOTTOM_LEFT); + + recipeTab.addElement(clearButton); + + recipeTab.addElement( + new GuiText(9, 151, CraftGuide.getTranslation("filter"), 0xff000000) + .anchor(AnchorPoint.BOTTOM_LEFT)); + + recipeTab.addElement( + new Image(40, 146, 18, 18, texture, 238, 219) + .anchor(AnchorPoint.BOTTOM_LEFT)); + + filter = new FilterDisplay(41, 147); + filter.anchor(AnchorPoint.BOTTOM_LEFT); + recipeTab.addElement(filter); + + GuiElement recipeArea = new GuiElement(0, 0, initialWindowWidth, initialWindowHeight) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT) + .setClickable(false); + + GuiElement itemListArea = new GuiElement(0, 0, initialWindowWidth, initialWindowHeight) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT) + .setClickable(false); + + GuiButton backButton = + (GuiButton) new GuiButton(8, 166, 50, 13, buttonTemplate, "Back") + .anchor(AnchorPoint.BOTTOM_LEFT); + + GuiButton itemListButton = + (GuiButton) new GuiButton(8, 166, 50, 13, buttonTemplate, "Set item") + .anchor(AnchorPoint.BOTTOM_LEFT); + + itemListArea.addElement(backButton); + recipeArea.addElement(itemListButton); + + GuiTabbedDisplay recipeDisplay = + (GuiTabbedDisplay) new GuiTabbedDisplay(0, 0, initialWindowWidth, initialWindowHeight) + .addTab(recipeArea, backButton, false) + .addTab(itemListArea, itemListButton, false) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT) + .setClickable(false); + + recipeTab.addElement(recipeDisplay); + + GuiScrollBar filterSelectScrollBar = + (GuiScrollBar) new GuiScrollBar(initialWindowWidth - 18, 6, 12, 186, + (GuiSlider) new GuiSlider(0, 21, 12, 144, 12, 15, texture, 0, 199) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT)) + .addButton(new GuiButton(0, 0, 12, 11, texture, 0, 234), -10, true) + .addButton(new GuiButton(0, 11, 12, 10, texture, 0, 214), -1, true) + .addButton( + (GuiButton)new GuiButton(0, 165, 12, 10, texture, 0, 224) + .anchor(AnchorPoint.BOTTOM_RIGHT), + 1, true) + .addButton( + (GuiButton)new GuiButton(0, 175, 12, 11, texture, 0, 245) + .anchor(AnchorPoint.BOTTOM_RIGHT), + 10, true) + .anchor(AnchorPoint.TOP_RIGHT, AnchorPoint.BOTTOM_RIGHT); + + itemListArea.addElement(filterSelectScrollBar); + + FilterSelectGrid filterGrid = + (FilterSelectGrid) new FilterSelectGrid(68, 18, initialWindowWidth - 90, 158, + filterSelectScrollBar, texture, + recipeCache, backButton, recipeDisplay) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT) + .setBackground(paneBackground); + + itemListArea.addElement(new RowCount(initialWindowWidth - 23, 6, filterGrid).anchor(AnchorPoint.TOP_RIGHT)); + itemListArea.addElement(filterGrid); + + itemListArea.addElement( + new GuiText(68, 183, "Search", 0xff000000) + .anchor(AnchorPoint.BOTTOM_LEFT)); + + itemListArea.addElement( + new GuiElement(106, 179, initialWindowWidth - 163, 15) + .setBackground(paneBackground) + .anchor(AnchorPoint.BOTTOM_LEFT, AnchorPoint.BOTTOM_RIGHT) + ); + + GuiTextInput searchInput = + (GuiTextInput) new GuiTextInput(106, 179, 93, 15, 2, 2) + .addListener(filterGrid) + .anchor(AnchorPoint.BOTTOM_LEFT, AnchorPoint.BOTTOM_RIGHT); + + itemListButton.addButtonListener(searchInput); + + itemListArea.addElement(searchInput); + + class ClearButtonListener implements IButtonListener + { + private GuiTextInput textInput; + public ClearButtonListener(GuiTextInput textInput) + { + this.textInput = textInput; + } + @Override + public void onButtonEvent(GuiButton button, Event eventType) + { + textInput.setText(""); + } + } + + itemListArea.addElement( + new GuiButton(initialWindowWidth - 54, 180, 32, 13, buttonTemplate, "Clear") + .addButtonListener(new ClearButtonListener(searchInput)) + .anchor(AnchorPoint.BOTTOM_RIGHT)); + + GuiScrollBar scrollBar = + (GuiScrollBar) new GuiScrollBar(initialWindowWidth - 18, 6, 12, 186, + (GuiSlider) new GuiSlider(0, 21, 12, 144, 12, 15, texture, 0, 199) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT)) + .addButton(new GuiButton(0, 0, 12, 11, texture, 0, 234), -10, true) + .addButton(new GuiButton(0, 11, 12, 10, texture, 0, 214), -1, true) + .addButton( + (GuiButton)new GuiButton(0, 165, 12, 10, texture, 0, 224) + .anchor(AnchorPoint.BOTTOM_RIGHT), + 1, true) + .addButton( + (GuiButton)new GuiButton(0, 175, 12, 11, texture, 0, 245) + .anchor(AnchorPoint.BOTTOM_RIGHT), + 10, true) + .anchor(AnchorPoint.TOP_RIGHT, AnchorPoint.BOTTOM_RIGHT); + + recipeArea.addElement(scrollBar); + + craftingDisplay = new CraftingDisplay(68, 18, initialWindowWidth - 90, 174, scrollBar, recipeCache); + recipeArea.addElement(new RowCount(initialWindowWidth - 23, 6, craftingDisplay).anchor(AnchorPoint.TOP_RIGHT)); + FilterClearCallback clearCallback = new FilterClearCallback(); + clearButton.addButtonListener(clearCallback); + clearCallback.display = craftingDisplay; + + craftingDisplay.anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT); + craftingDisplay.setBackground(paneBackground); + recipeArea.addElement(craftingDisplay); + + return recipeTab; + } + + private GuiElement generateTypeTab(Texture texture, ButtonTemplate buttonTemplate) + { + GuiElement typeTab = new GuiElement(0, 0, initialWindowWidth, initialWindowHeight) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT) + .setClickable(false); + + typeTab.addElement( + new GuiElement(initialWindowWidth - 19, 5, 14, 188) + .setBackground(paneBackground) + .anchor(AnchorPoint.TOP_RIGHT, AnchorPoint.BOTTOM_RIGHT) + ); + + GuiScrollBar scrollBar = + new GuiScrollBar(initialWindowWidth - 18, 6, 12, 186, + (GuiSlider) new GuiSlider(0, 10, 12, 166, 12, 15, texture, 0, 199) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT)) + .addButton(new GuiButton(0, 0, 12, 10, texture, 0, 214), -1, true) + .addButton( + (GuiButton) new GuiButton(0, 176, 12, 10, texture, 0, 224) + .anchor(AnchorPoint.BOTTOM_RIGHT), + 1, true); + + scrollBar.anchor(AnchorPoint.TOP_RIGHT, AnchorPoint.BOTTOM_RIGHT); + typeTab.addElement(scrollBar); + + typeTab.addElement( + new CraftTypeDisplay( + 68, 6, initialWindowWidth - 90, 186, scrollBar, texture, recipeCache + ) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT) + .setBackground(paneBackground) + ); + + return typeTab; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) + { + try + { + uristqwerty.gui_craftguide.minecraft.Image.initJarTextures(); + ((UtilImplementationCommon)Util.instance).partialTicks = f; + guiWindow.centerOn(width / 2, height / 2); + filter.setFilter(recipeCache.getFilter()); + + super.drawScreen(mouseX, mouseY, f); + } + catch(Exception e) + { + CraftGuideLog.log(e); + } + catch(Error e) + { + CraftGuideLog.log(e); + throw e; + } + + + CraftGuide.side.stopTessellating(); + } + + private class FilterClearCallback implements IButtonListener + { + CraftingDisplay display; + + @Override + public void onButtonEvent(GuiButton button, Event eventType) + { + if(eventType == Event.PRESS) + { + display.setFilter(null); + } + } + } + + private class FilterToggle implements IButtonListener + { + private final SlotType type; + + public FilterToggle(SlotType type) + { + this.type = type; + } + + @Override public void onButtonEvent(GuiButton button, Event eventType) + { + if(eventType == Event.PRESS) + { + GuiCraftGuide.filterSlotTypes.put(type, true); + } + else if(eventType == Event.RELEASE) + { + GuiCraftGuide.filterSlotTypes.put(type, false); + } + + recipeCache.filter(recipeCache.getFilter()); + } + } + + @Override + public void handleKeyboardInput() + { + try + { + if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) + { + GuiScrollBar.setScrollMultiplier(10); + } + else + { + GuiScrollBar.setScrollMultiplier(1); + } + + super.handleKeyboardInput(); + } + catch(Exception e) + { + CraftGuideLog.log(e); + } + catch(Error e) + { + CraftGuideLog.log(e); + throw e; + } + } + + @Override + public void handleMouseInput() + { + try + { + super.handleMouseInput(); + + } + catch(Exception e) + { + CraftGuideLog.log(e); + } + catch(Error e) + { + CraftGuideLog.log(e); + throw e; + } + } + + @Override + public int mouseWheelRate() + { + return CraftGuide.mouseWheelScrollRate; + } + + @Override + public boolean doesGuiPauseGame() + { + return CraftGuide.pauseWhileOpen; + } + + public void reloadRecipes() + { + recipeCache.reset(); + } + + public static void onTickInGame(float f, Minecraft minecraft) + { + if(instance != null) + { + instance.drawOverlay(f, minecraft); + } + } + + public void drawOverlay(float f, Minecraft minecraft) + { + renderer.startFrame(this); + guiOverlay.draw(); + renderer.endFrame(); + } + + @Override + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + super.onGuiClosed(); + } + + @Override + public void initGui() + { + super.initGui(); + Keyboard.enableRepeatEvents(true); + + if(CraftGuide.needsRecipeRefresh) + { + reloadRecipes(); + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/ItemCraftGuide.java b/src/api/java/uristqwerty/CraftGuide/ItemCraftGuide.java new file mode 100644 index 000000000..431b1d593 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/ItemCraftGuide.java @@ -0,0 +1,52 @@ +package uristqwerty.CraftGuide; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemCraftGuide extends Item +{ + public ItemCraftGuide(String iconName) + { + setUnlocalizedName("craftguide_item"); + + setTextureName(iconName); + setCreativeTab(CreativeTabs.tabMisc); + + registerItemName(); + } + + private void registerItemName() + { + try + { + Class registry = Class.forName("cpw.mods.fml.common.registry.GameRegistry"); + Method registerItem = registry.getMethod("registerItem", Item.class, String.class, String.class); + registerItem.invoke(null, this, "craftguide_item", "craftguide"); + } + catch(ClassNotFoundException e){} + catch(SecurityException e){} + catch(NoSuchMethodException e){} + catch(IllegalArgumentException e){} + catch(IllegalAccessException e){} + catch(InvocationTargetException e){} + } + + @Override + public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player) + { + CraftGuide.side.openGUI(player); + return itemstack; + } + + @Override + public int getColorFromItemStack(ItemStack par1ItemStack, int par2) + { + return 0x9999ff; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/ItemSlotImplementationImplementation.java b/src/api/java/uristqwerty/CraftGuide/ItemSlotImplementationImplementation.java new file mode 100644 index 000000000..84dd3c3a3 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/ItemSlotImplementationImplementation.java @@ -0,0 +1,175 @@ +package uristqwerty.CraftGuide; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import uristqwerty.CraftGuide.api.ItemFilter; +import uristqwerty.CraftGuide.api.ItemSlot; +import uristqwerty.CraftGuide.api.ItemSlotImplementation; +import uristqwerty.CraftGuide.api.NamedTexture; +import uristqwerty.CraftGuide.api.Renderer; +import uristqwerty.CraftGuide.api.SlotType; +import uristqwerty.CraftGuide.api.Util; + +/** + * It's a rather silly name, but since it's only directly used in one other class... + */ +public class ItemSlotImplementationImplementation implements ItemSlotImplementation +{ + private NamedTexture overlayAny; + private NamedTexture overlayForge; + private NamedTexture overlayForgeSingle; + private NamedTexture background; + + public ItemSlotImplementationImplementation() + { + overlayAny = Util.instance.getTexture("ItemStack-Any"); + overlayForge = Util.instance.getTexture("ItemStack-OreDict"); + overlayForgeSingle = Util.instance.getTexture("ItemStack-OreDict-Single"); + background = Util.instance.getTexture("ItemStack-Background"); + } + + @Override + public List getTooltip(ItemSlot itemSlot, Object data) + { + ItemStack stack = item(data); + + if(stack == null) + { + if(data instanceof List && ((List)data).size() < 1) + { + return emptyOreDictEntryText((List)data); + } + else + { + return null; + } + } + else + { + return CommonUtilities.getExtendedItemStackText(data); + } + } + + @Override + public void draw(ItemSlot itemSlot, Renderer renderer, int recipeX, int recipeY, Object data, boolean isMouseOver) + { + int x = recipeX + itemSlot.x; + int y = recipeY + itemSlot.y; + ItemStack stack = item(data); + + if(itemSlot.drawBackground) + { + renderer.renderRect(x - 1, y - 1, 18, 18, background); + } + + if(stack != null) + { + renderer.renderItemStack(x, y, stack); + + if(isMouseOver) + { + renderer.renderRect(x, y, 16, 16, 0xff, 0xff, 0xff, 0x80); + } + + if(CommonUtilities.getItemDamage(stack) == CraftGuide.DAMAGE_WILDCARD) + { + renderer.renderRect(x - 1, y - 1, 18, 18, overlayAny); + } + + if(data instanceof List) + { + if(((List)data).size() > 1) + { + renderer.renderRect(x - 1, y - 1, 18, 18, overlayForge); + } + else + { + renderer.renderRect(x - 1, y - 1, 18, 18, overlayForgeSingle); + } + } + } + else if(data instanceof List && ((List)data).size() < 1) + { + renderer.renderRect(x - 1, y - 1, 18, 18, overlayForge); + } + } + + private static ItemStack item(Object data) + { + if(data == null) + { + return null; + } + else if(data instanceof ItemStack) + { + return (ItemStack)data; + } + else if(data instanceof List && ((List)data).size() > 0) + { + return item(((List)data).get(0)); + } + + return null; + } + + @Override + public boolean matches(ItemSlot itemSlot, ItemFilter search, Object data, SlotType type) + { + if(type != itemSlot.slotType && ( + type != SlotType.ANY_SLOT || + itemSlot.slotType == SlotType.DISPLAY_SLOT || + itemSlot.slotType == SlotType.HIDDEN_SLOT)) + { + return false; + } + + if(search == null) + { + return false; + } + else if(data == null || data instanceof ItemStack) + { + return search.matches(data); + } + else if(data instanceof List) + { + for(Object content: (List)data) + { + if(search.matches(content)) + { + return true; + } + } + } + + return false; + } + + @Override + public boolean isPointInBounds(ItemSlot itemSlot, int x, int y) + { + return x >= itemSlot.x + && x < itemSlot.x + itemSlot.width + && y >= itemSlot.y + && y < itemSlot.y + itemSlot.height; + } + + @Override + public ItemFilter getClickedFilter(int x, int y, Object object) + { + return Util.instance.getCommonFilter(object); + } + + private List emptyOreDictEntryText(List oreDictionaryList) + { + if(RecipeGeneratorImplementation.forgeExt != null) + { + return RecipeGeneratorImplementation.forgeExt.emptyOreDictEntryText(oreDictionaryList); + } + else + { + return null; + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/MultipleItemFilter.java b/src/api/java/uristqwerty/CraftGuide/MultipleItemFilter.java new file mode 100644 index 000000000..d087579c9 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/MultipleItemFilter.java @@ -0,0 +1,157 @@ +package uristqwerty.CraftGuide; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import uristqwerty.CraftGuide.api.ItemFilter; +import uristqwerty.CraftGuide.api.NamedTexture; +import uristqwerty.CraftGuide.api.Renderer; +import uristqwerty.CraftGuide.api.Util; + +public class MultipleItemFilter implements ItemFilter +{ + public final List comparison; + private static final NamedTexture overlayAny = Util.instance.getTexture("ItemStack-Any"); + private static final NamedTexture overlayForge = Util.instance.getTexture("ItemStack-OreDict"); + private static final NamedTexture overlayForgeSingle = Util.instance.getTexture("ItemStack-OreDict-Single"); + private List tooltip = null; + + public MultipleItemFilter(List stack) + { + comparison = stack; + } + + @Override + public boolean matches(Object stack) + { + if(comparison == null) + { + return stack == null; + } + + if(stack instanceof ItemStack) + { + return matches((ItemStack)stack); + } + else if(stack instanceof List) + { + for(Object item: (List)stack) + { + if(matches(item)) + { + return true; + } + } + + return false; + } + else + { + return false; + } + } + + private boolean matches(ItemStack stack) + { + for(ItemStack compare: comparison) + { + if(CommonUtilities.checkItemStackMatch(stack, compare)) + { + return true; + } + } + + return false; + } + + @Override + public void draw(Renderer renderer, int x, int y) + { + if(comparison.size() > 0) + { + ItemStack stack = comparison.get(0); + renderer.renderItemStack(x, y, stack); + + if(CommonUtilities.getItemDamage(stack) == CraftGuide.DAMAGE_WILDCARD) + { + renderer.renderRect(x - 1, y - 1, 18, 18, overlayAny); + } + + if(comparison.size() == 1) + { + renderer.renderRect(x - 1, y - 1, 18, 18, overlayForgeSingle); + } + else + { + renderer.renderRect(x - 1, y - 1, 18, 18, overlayForge); + } + } + } + + @Override + public List getTooltip() + { + if(tooltip == null) + { + if(comparison.size() > 0) + { + ItemStack primaryItem = comparison.get(0); + + List text; + + if(CommonUtilities.getItemDamage(primaryItem) == CraftGuide.DAMAGE_WILDCARD) + { + if(primaryItem.getHasSubtypes()) + { + ArrayList list = new ArrayList(); + primaryItem.getItem().getSubItems(primaryItem.getItem(), null, list); + text = Util.instance.getItemStackText(list.get(0)); + } + else + { + ItemStack alteredStack = primaryItem.copy(); + alteredStack.setItemDamage(0); + text = Util.instance.getItemStackText(alteredStack); + } + } + else + { + text = Util.instance.getItemStackText(primaryItem); + } + + if(comparison.size() > 1) + { + text.add("\u00a77Other items:"); + + if(CommonUtilities.getItemDamage(primaryItem) == CraftGuide.DAMAGE_WILDCARD && primaryItem.getHasSubtypes()) + { + ArrayList list = new ArrayList(); + primaryItem.getItem().getSubItems(primaryItem.getItem(), null, list); + + for(int i = 1; i < list.size(); i++) + { + text.add("\u00a77 " + CommonUtilities.itemName(list.get(i))); + } + } + + for(int i = 1; i < comparison.size(); i++) + { + for(String name: CommonUtilities.itemNames(comparison.get(i))) + { + text.add("\u00a77 " + name); + } + } + } + + tooltip = text; + } + else + { + return null; + } + } + + return tooltip; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/Recipe.java b/src/api/java/uristqwerty/CraftGuide/Recipe.java new file mode 100644 index 000000000..132d2a0fc --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/Recipe.java @@ -0,0 +1,211 @@ +package uristqwerty.CraftGuide; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import uristqwerty.CraftGuide.api.CraftGuideRecipe; +import uristqwerty.CraftGuide.api.CraftGuideRecipeExtra1; +import uristqwerty.CraftGuide.api.ItemFilter; +import uristqwerty.CraftGuide.api.ItemSlot; +import uristqwerty.CraftGuide.api.Renderer; +import uristqwerty.CraftGuide.api.Slot; +import uristqwerty.CraftGuide.api.SlotType; +import uristqwerty.CraftGuide.api.Util; +import uristqwerty.CraftGuide.client.ui.GuiRenderer; +import uristqwerty.gui_craftguide.rendering.Renderable; + +public class Recipe implements CraftGuideRecipe, CraftGuideRecipeExtra1 +{ + protected Slot[] slots; + protected Object[] recipe; + private Renderable background; + private Renderable backgroundSelected; + + private int width = 79, height = 58; + + public Recipe(Slot[] slots, Object[] items, Renderable background, Renderable backgroundSelected) + { + this.slots = slots; + this.recipe = new Object[items.length]; + for(int i = 0; i < items.length; i++) + { + this.recipe[i] = items[i]; + } + + this.background = background; + this.backgroundSelected = backgroundSelected; + + for(int i = 0; i < slots.length; i++) + { + ItemStack display = displayStack(recipe[i]); + if(this.recipe[i] != null && slots[i] instanceof ItemSlot && !((ItemSlot)slots[i]).drawQuantity && display != null && display.stackSize > 1) + { + ItemStack old = display; + + this.recipe[i] = new ItemStack(old.getItem(), 1, CommonUtilities.getItemDamage(old)); + } + } + } + + private ItemStack displayStack(Object item) + { + if(item == null) + { + return null; + } + else if(item instanceof ItemStack) + { + return (ItemStack)item; + } + else if(item instanceof ArrayList) + { + if(((ArrayList)item).size() < 1) + { + return null; + } + else + { + return displayStack(((ArrayList)item).get(0)); + } + } + else + { + return null; + } + } + + @Override + public void draw(Renderer renderer, int x, int y, boolean mouseOverRecipe, int mouseX, int mouseY) + { + if(mouseOverRecipe) + { + backgroundSelected.render((GuiRenderer)renderer, x, y); + } + else + { + background.render((GuiRenderer)renderer, x, y); + } + + for(int i = 0; i < slots.length; i++) + { + if(mouseOverRecipe) + { + boolean mouseOverSlot = slots[i].isPointInBounds(mouseX, mouseY, recipe, i); + slots[i].draw(renderer, x, y, recipe, i, mouseOverSlot); + } + else + { + slots[i].draw(renderer, x, y, recipe, i, false); + } + } + } + + public int getSlotIndexUnderMouse(int x, int y) + { + for(int i = 0; i < slots.length; i++) + { + if(slots[i].isPointInBounds(x, y, recipe, i)) + { + return i; + } + } + + return -1; + } + + @Override + public boolean containsItem(ItemStack stack) + { + ItemFilter filter = Util.instance.getCommonFilter(stack); + + return containsItem(filter); + } + + @Override + public boolean containsItem(ItemFilter filter) + { + return containsItem(filter, SlotType.ANY_SLOT); + } + + @Override + public boolean containsItem(ItemStack stack, SlotType type) + { + ItemFilter filter = Util.instance.getCommonFilter(stack); + + return containsItem(filter, type); + } + + @Override + public boolean containsItem(ItemFilter filter, SlotType type) + { + if(filter != null) + { + for(int i = 0; i < slots.length; i++) + { + if(slots[i].matches(filter, recipe, i, type)) + { + return true; + } + } + } + + return false; + } + + @Override + public Object[] getItems() + { + return recipe; + } + + @Override + public int width() + { + return width; + } + + @Override + public int height() + { + return height; + } + + public Recipe setSize(int width, int height) + { + this.width = width; + this.height = height; + + return this; + } + + @Override + public List getItemText(int x, int y) + { + int slot = getSlotIndexUnderMouse(x, y); + + if(slot == -1 || slots[slot] == null) + { + return null; + } + else + { + return slots[slot].getTooltip(x, y, recipe, slot); + } + } + + @Override + public ItemFilter getRecipeClickedResult(int x, int y) + { + int slot = getSlotIndexUnderMouse(x, y); + + if(slot == -1 || slots[slot] == null) + { + return null; + } + else + { + return slots[slot].getClickedFilter(x, y, recipe, slot); + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/RecipeCache.java b/src/api/java/uristqwerty/CraftGuide/RecipeCache.java new file mode 100644 index 000000000..9bcec22d1 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/RecipeCache.java @@ -0,0 +1,393 @@ +package uristqwerty.CraftGuide; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + +import net.minecraft.item.ItemStack; +import uristqwerty.CraftGuide.api.BasicRecipeFilter; +import uristqwerty.CraftGuide.api.CraftGuideRecipe; +import uristqwerty.CraftGuide.api.CraftGuideRecipeExtra1; +import uristqwerty.CraftGuide.api.ItemFilter; +import uristqwerty.CraftGuide.api.RecipeFilter; +import uristqwerty.CraftGuide.api.RecipeProvider; +import uristqwerty.CraftGuide.api.SlotType; +import uristqwerty.CraftGuide.client.ui.IRecipeCacheListener; + +public class RecipeCache +{ + private SortedSet craftingTypes = new TreeSet(); + private Map> craftResults = new HashMap>(); + private List typeResults; + private List filteredResults; + private RecipeGeneratorImplementation generator = new RecipeGeneratorImplementation(); + private ItemFilter filterItem = null; + private List listeners = new LinkedList(); + private Set currentTypes = null; + private SortedSet allItems = new TreeSet(); + private boolean firstReset = true; + + public RecipeCache() + { + reset(); + } + + public void reset() + { + CraftGuide.needsRecipeRefresh = false; + + CraftGuideLog.log("(re)loading recipe list..."); + Map> rawRecipes = generateRecipes(); + + filterRawRecipes(rawRecipes); + craftResults.clear(); + + for(ItemStack key: rawRecipes.keySet()) + { + CraftType type = CraftType.getInstance(key); + + if(type == null) + { + CraftGuideLog.log(" Error: null type, " + rawRecipes.get(key).size() + " recipes skipped"); + continue; + } + + if(!craftResults.containsKey(type)) + { + craftResults.put(type, new ArrayList()); + } + + craftResults.get(type).addAll(rawRecipes.get(key)); + } + + generator.clearRecipes(); + + generateAllItemList(); + + craftingTypes.addAll(craftResults.keySet()); + + if(firstReset) + { + currentTypes = new HashSet(); + currentTypes.addAll(craftingTypes); + + for(ItemStack stack: generator.disabledTypes) + { + currentTypes.remove(CraftType.getInstance(stack)); + } + + firstReset = false; + } + + setTypes(currentTypes); + + for(IRecipeCacheListener listener: listeners) + { + listener.onReset(this); + } + } + + private void generateAllItemList() + { + allItems.clear(); + + for(List type: craftResults.values()) + { + for(CraftGuideRecipe recipe: type) + { + for(Object item: recipe.getItems()) + { + if(item != null) + { + if(item instanceof ItemStack) + { + allItems.add(CraftType.getInstance(item)); + } + else if(item instanceof ArrayList) + { + for(ItemStack stack: (ArrayList)item) + { + CraftType craftType = CraftType.getInstance(stack); + + if(craftType != null) + { + allItems.add(craftType); + } + } + + CraftType craftType = CraftType.getInstance(item); + + if(craftType != null) + { + allItems.add(craftType); + } + } + } + } + } + } + + removeUselessDuplicates(); + } + + private void removeUselessDuplicates() + { + Map wild = new HashMap(); + for(CraftType item: allItems) + { + if(!(item.getStack() instanceof ItemStack)) + { + continue; + } + + if(CommonUtilities.getItemDamage(((ItemStack)item.getStack())) == CraftGuide.DAMAGE_WILDCARD) + { + wild.put(item, 1); + } + else + { + for(CraftType type: wild.keySet()) + { + if(((ItemStack)item.getStack()).getItem() == ((ItemStack)type.getStack()).getItem()) + { + wild.put(type, wild.get(type) + 1); + } + } + } + } + + for(CraftType type: wild.keySet()) + { + if(wild.get(type) == 2) + { + allItems.remove(type); + } + else if(wild.get(type) == 1) + { + allItems.remove(type); + allItems.add(CraftType.getInstance(new ItemStack(type.getDisplayStack().getItem(), 1, 0))); + } + } + + wild.clear(); + for(CraftType item: allItems) + { + if(item.getStack() instanceof ArrayList && + ((ArrayList)item.getStack()).size() == 1 && + ((ArrayList)item.getStack()).get(0) != null) + { + wild.put(item, 1); + ItemStack stack = (ItemStack)((ArrayList)item.getStack()).get(0); + + for(CraftType item2: allItems) + { + if(item2.getStack() instanceof ItemStack) + { + if(CommonUtilities.checkItemStackMatch(stack, (ItemStack)item2.getStack())) + { + wild.put(item, 2); + break; + } + } + } + } + } + + for(CraftType type: wild.keySet()) + { + if(wild.get(type) == 2) + { + allItems.remove(type); + } + } + } + + private Map> generateRecipes() + { + generator.clearRecipes(); + CraftGuideLog.log(" Getting recipes..."); + for(Object object: ReflectionAPI.APIObjects) + { + if(object instanceof RecipeProvider) + { + CraftGuideLog.log(" Generating recipes from " + object.getClass().getName()); + try + { + ((RecipeProvider)object).generateRecipes(generator); + } + catch(Exception e) + { + CraftGuideLog.log(e); + } + catch(LinkageError e) + { + CraftGuideLog.log(e); + } + } + } + + return generator.getRecipes(); + } + + private void filterRawRecipes(Map> rawRecipes) + { + CraftGuideLog.log(" Filtering recipes..."); + for(Object object: ReflectionAPI.APIObjects) + { + if(object instanceof RecipeFilter) + { + CraftGuideLog.log(" Filtering recipes from " + object.getClass().getName()); + + try + { + for(ItemStack type: rawRecipes.keySet()) + { + rawRecipes.put(type, ((RecipeFilter)object).filterRecipes(rawRecipes.get(type), type)); + } + } + catch(Exception e) + { + CraftGuideLog.log(e); + } + catch(LinkageError e) + { + CraftGuideLog.log(e); + } + } + else if(object instanceof BasicRecipeFilter) + { + + CraftGuideLog.log(" Filtering recipes from " + object.getClass().getName()); + + try + { + for(ItemStack type: rawRecipes.keySet()) + { + Iterator iterator = rawRecipes.get(type).iterator(); + + while(iterator.hasNext()) + { + if(!((BasicRecipeFilter)object).shouldKeepRecipe(iterator.next(), type)) + { + iterator.remove(); + } + } + } + } + catch(Exception e) + { + CraftGuideLog.log(e); + } + catch(LinkageError e) + { + CraftGuideLog.log(e); + } + } + } + } + + public void setTypes(Set types) + { + typeResults = new ArrayList(); + currentTypes = types; + + if(types == null) + { + for(CraftType type: craftingTypes) + { + typeResults.addAll(craftResults.get(type)); + } + } + else + { + for(CraftType type: craftingTypes) + { + if(types.contains(type)) + { + typeResults.addAll(craftResults.get(type)); + } + } + } + + filter(filterItem); + } + + public List getRecipes() + { + return filteredResults; + } + + public void filter(ItemFilter filter) + { + filterItem = filter; + + boolean input = GuiCraftGuide.filterSlotTypes.get(SlotType.INPUT_SLOT); + boolean output = GuiCraftGuide.filterSlotTypes.get(SlotType.OUTPUT_SLOT); + boolean machine = GuiCraftGuide.filterSlotTypes.get(SlotType.MACHINE_SLOT); + + if(filter == null) + { + filteredResults = typeResults; + } + else + { + filteredResults = new ArrayList(); + + for(CraftGuideRecipe recipe: typeResults) + { + if(recipe instanceof CraftGuideRecipeExtra1) + { + CraftGuideRecipeExtra1 e = (CraftGuideRecipeExtra1)recipe; + + if((input && e.containsItem(filter, SlotType.INPUT_SLOT)) + || (output && e.containsItem(filter, SlotType.OUTPUT_SLOT)) + || (machine && e.containsItem(filter, SlotType.MACHINE_SLOT))) + { + filteredResults.add(recipe); + } + } + else if(recipe.containsItem(filter)) + { + filteredResults.add(recipe); + } + } + } + + for(IRecipeCacheListener listener: listeners) + { + listener.onChange(this); + } + } + + public ItemFilter getFilter() + { + return filterItem; + } + + public Set getCraftTypes() + { + return craftingTypes; + } + + public void addListener(IRecipeCacheListener listener) + { + listeners.add(listener); + } + + public SortedSet getAllItems() + { + return allItems; + } + + public Set getFilterTypes() + { + return currentTypes; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/RecipeGeneratorImplementation.java b/src/api/java/uristqwerty/CraftGuide/RecipeGeneratorImplementation.java new file mode 100644 index 000000000..ca7ec1829 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/RecipeGeneratorImplementation.java @@ -0,0 +1,271 @@ +package uristqwerty.CraftGuide; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import uristqwerty.CraftGuide.api.CraftGuideRecipe; +import uristqwerty.CraftGuide.api.RecipeGenerator; +import uristqwerty.CraftGuide.api.RecipeTemplate; +import uristqwerty.CraftGuide.api.Slot; +import uristqwerty.gui_craftguide.minecraft.Image; +import uristqwerty.gui_craftguide.texture.BlankTexture; +import uristqwerty.gui_craftguide.texture.BorderedTexture; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.SubTexture; +import uristqwerty.gui_craftguide.texture.Texture; +import uristqwerty.gui_craftguide.texture.TextureClip; + +public class RecipeGeneratorImplementation implements RecipeGenerator +{ + public static interface RecipeGeneratorForgeExtension + { + boolean matchesType(IRecipe recipe); + boolean isShapelessRecipe(IRecipe recipe); + Object[] getCraftingRecipe(RecipeGeneratorImplementation recipeGeneratorImplementation, IRecipe recipe, boolean allowSmallGrid); + List emptyOreDictEntryText(List oreDictionaryList); + } + + private Map> recipes = new HashMap>(); + public List disabledTypes = new LinkedList(); + private Texture defaultBackground = new BlankTexture(); + private Texture defaultBackgroundSelected; + public static ItemStack workbench = new ItemStack(Blocks.crafting_table); + + public static RecipeGeneratorForgeExtension forgeExt; + + public RecipeGeneratorImplementation() + { + Texture source = DynamicTexture.instance("base_image"); + defaultBackgroundSelected = new BorderedTexture( + new Texture[]{ + new TextureClip(source, 117, 1, 2, 2), + new SubTexture (source, 120, 1, 32, 2), + new TextureClip(source, 153, 1, 2, 2), + new SubTexture (source, 117, 4, 2, 32), + new SubTexture (source, 120, 4, 32, 32), + new SubTexture (source, 153, 4, 2, 32), + new TextureClip(source, 117, 37, 2, 2), + new SubTexture (source, 120, 37, 32, 2), + new TextureClip(source, 153, 37, 2, 2), + }, 2); + } + + @Override + public RecipeTemplate createRecipeTemplate(Slot[] slots, + ItemStack craftingType, String backgroundTexture, int backgroundX, + int backgroundY, int backgroundSelectedX, int backgroundSelectedY) + { + return createRecipeTemplate(slots, craftingType, + backgroundTexture, backgroundX, backgroundY, + backgroundTexture, backgroundSelectedX, backgroundSelectedY); + } + + @Override + public RecipeTemplate createRecipeTemplate(Slot[] slots, ItemStack craftingType, + String backgroundTexture, int backgroundX, int backgroundY, + String backgroundSelectedTexture, int backgroundSelectedX, int backgroundSelectedY) + { + if(craftingType == null) + { + craftingType = workbench; + } + + if(backgroundTexture.equals("/gui/BrewGuide.png")) + { + backgroundTexture = "craftguide:textures/gui/BrewGuide.png"; + } + else if(backgroundTexture.equals("/gui/CraftGuide.png")) + { + backgroundTexture = "craftguide:textures/gui/CraftGuide.png"; + } + else if(backgroundTexture.equals("/gui/CraftGuideRecipe.png")) + { + backgroundTexture = "craftguide:textures/gui/CraftGuideRecipe.png"; + } + + if(backgroundSelectedTexture.equals("/gui/BrewGuide.png")) + { + backgroundSelectedTexture = "craftguide:textures/gui/BrewGuide.png"; + } + else if(backgroundSelectedTexture.equals("/gui/CraftGuide.png")) + { + backgroundSelectedTexture = "craftguide:textures/gui/CraftGuide.png"; + } + else if(backgroundSelectedTexture.equals("/gui/CraftGuideRecipe.png")) + { + backgroundSelectedTexture = "craftguide:textures/gui/CraftGuideRecipe.png"; + } + + for(ItemStack stack: recipes.keySet()) + { + if(ItemStack.areItemStacksEqual(stack, craftingType)) + { + craftingType = stack; + break; + } + } + + return new DefaultRecipeTemplate( + slots, + craftingType, + new TextureClip( + Image.fromJar(backgroundTexture), + backgroundX, backgroundY, 79, 58), + new TextureClip( + Image.fromJar(backgroundSelectedTexture), + backgroundSelectedX, backgroundSelectedY, 79, 58)); + } + + @Override + public RecipeTemplate createRecipeTemplate(Slot[] slots, ItemStack craftingType) + { + if(craftingType == null) + { + craftingType = workbench; + } + + return new DefaultRecipeTemplate(slots, craftingType, defaultBackground, defaultBackgroundSelected); + } + + @Override + public void addRecipe(RecipeTemplate template, Object[] items) + { + addRecipe(template.generate(items), template.getCraftingType()); + } + + @Override + public void addRecipe(CraftGuideRecipe recipe, ItemStack craftingType) + { + List recipeList = recipes.get(craftingType); + + if(recipeList == null) + { + recipeList = new ArrayList(); + recipes.put(craftingType, recipeList); + } + + recipeList.add(recipe); + } + + public Map> getRecipes() + { + return recipes; + } + + public void clearRecipes() + { + recipes.clear(); + } + + @Override + public void setDefaultTypeVisibility(ItemStack type, boolean visible) + { + if(visible) + { + disabledTypes.remove(type); + } + else if(!disabledTypes.contains(type)) + { + disabledTypes.add(type); + } + } + + @Override + public Object[] getCraftingRecipe(IRecipe recipe) + { + return getCraftingRecipe(recipe, false); + } + + @Override + public Object[] getCraftingRecipe(IRecipe recipe, boolean allowSmallGrid) + { + try + { + if(recipe instanceof ShapedRecipes) + { + int width = (Integer)CommonUtilities.getPrivateValue(ShapedRecipes.class, (ShapedRecipes)recipe, "b", "recipeWidth", "field_77576_b"); + int height = (Integer)CommonUtilities.getPrivateValue(ShapedRecipes.class, (ShapedRecipes)recipe, "c", "recipeHeight", "field_77577_c"); + Object[] items = (Object[])CommonUtilities.getPrivateValue(ShapedRecipes.class, (ShapedRecipes)recipe, "d", "recipeItems", "field_77574_d"); + + if(allowSmallGrid && width < 3 && height < 3) + { + return getSmallShapedRecipe(width, height, items, ((ShapedRecipes)recipe).getRecipeOutput()); + } + else + { + return getCraftingShapedRecipe(width, height, items, ((ShapedRecipes)recipe).getRecipeOutput()); + } + } + else if(recipe instanceof ShapelessRecipes) + { + List items = (List)CommonUtilities.getPrivateValue(ShapelessRecipes.class, (ShapelessRecipes)recipe, "b", "recipeItems", "field_77579_b"); + return getCraftingShapelessRecipe(items, ((ShapelessRecipes)recipe).getRecipeOutput()); + } + else if(forgeExt != null && forgeExt.matchesType(recipe)) + { + return forgeExt.getCraftingRecipe(this, recipe, allowSmallGrid); + } + } + catch(Exception e) + { + e.printStackTrace(); + CraftGuideLog.log("Exception while trying to parse an ItemStack[10] from an IRecipe:"); + CraftGuideLog.log(e); + } + + return null; + } + + Object[] getSmallShapedRecipe(int width, int height, Object[] items, ItemStack recipeOutput) + { + Object[] output = new Object[5]; + + for(int y = 0; y < height; y++) + { + for(int x = 0; x < width; x++) + { + output[y * 2 + x] = items[y * width + x]; + } + } + + output[4] = recipeOutput; + return output; + } + + Object[] getCraftingShapelessRecipe(List items, ItemStack recipeOutput) + { + Object[] output = new Object[10]; + + for(int i = 0; i < items.size(); i++) + { + output[i] = items.get(i); + } + + output[9] = recipeOutput; + return output; + } + + Object[] getCraftingShapedRecipe(int width, int height, Object[] items, ItemStack recipeOutput) + { + Object[] output = new Object[10]; + + for(int y = 0; y < height; y++) + { + for(int x = 0; x < width; x++) + { + output[y * 3 + x] = items[y * width + x]; + } + } + + output[9] = recipeOutput; + return output; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/ReflectionAPI.java b/src/api/java/uristqwerty/CraftGuide/ReflectionAPI.java new file mode 100644 index 000000000..39b028af6 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/ReflectionAPI.java @@ -0,0 +1,19 @@ +package uristqwerty.CraftGuide; + +import java.util.ArrayList; +import java.util.List; + +public class ReflectionAPI +{ + public static List APIObjects = new ArrayList(); + + public static void registerAPIObject(Object object) + { + APIObjects.add(object); + } + + public static void reloadRecipes() + { + CraftGuide.side.reloadRecipes(); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/SingleItemFilter.java b/src/api/java/uristqwerty/CraftGuide/SingleItemFilter.java new file mode 100644 index 000000000..703341bb9 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/SingleItemFilter.java @@ -0,0 +1,62 @@ +package uristqwerty.CraftGuide; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import uristqwerty.CraftGuide.api.ItemFilter; +import uristqwerty.CraftGuide.api.NamedTexture; +import uristqwerty.CraftGuide.api.Renderer; +import uristqwerty.CraftGuide.api.Util; + +public class SingleItemFilter implements ItemFilter +{ + public ItemStack comparison; + private NamedTexture overlayAny = Util.instance.getTexture("ItemStack-Any"); + + public SingleItemFilter(ItemStack stack) + { + comparison = stack; + } + + @Override + public boolean matches(Object stack) + { + if(stack instanceof ItemStack) + { + return CommonUtilities.checkItemStackMatch((ItemStack)stack, comparison); + } + else if(stack instanceof List) + { + for(Object item: (List)stack) + { + if(matches(item)) + { + return true; + } + } + + return false; + } + else + { + return false; + } + } + + @Override + public void draw(Renderer renderer, int x, int y) + { + renderer.renderItemStack(x, y, comparison); + + if(CommonUtilities.getItemDamage(comparison) == CraftGuide.DAMAGE_WILDCARD) + { + renderer.renderRect(x - 1, y - 1, 18, 18, overlayAny); + } + } + + @Override + public List getTooltip() + { + return Util.instance.getItemStackText(comparison); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/StringItemFilter.java b/src/api/java/uristqwerty/CraftGuide/StringItemFilter.java new file mode 100644 index 000000000..dfced02a9 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/StringItemFilter.java @@ -0,0 +1,64 @@ +package uristqwerty.CraftGuide; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import uristqwerty.CraftGuide.api.ItemFilter; +import uristqwerty.CraftGuide.api.NamedTexture; +import uristqwerty.CraftGuide.api.Renderer; +import uristqwerty.CraftGuide.api.Util; + +public class StringItemFilter implements ItemFilter +{ + private String comparison; + private NamedTexture textImage = Util.instance.getTexture("TextFilter"); + + public StringItemFilter(String string) + { + comparison = string.toLowerCase(); + } + + @Override + public boolean matches(Object item) + { + if(item instanceof ItemStack) + { + return CommonUtilities.searchExtendedItemStackText(item, comparison); + } + else if(item instanceof String) + { + return ((String)item).toLowerCase().contains(comparison); + } + else if(item instanceof List) + { + for(Object o: (List)item) + { + if(matches(o)) + { + return true; + } + } + + return false; + } + else + { + return false; + } + } + + @Override + public void draw(Renderer renderer, int x, int y) + { + renderer.renderRect(x, y, 16, 16, textImage); + } + + @Override + public List getTooltip() + { + List text = new ArrayList(1); + text.add("\u00a77Text search: '" + comparison + "'"); + return text; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/UtilImplementationCommon.java b/src/api/java/uristqwerty/CraftGuide/UtilImplementationCommon.java new file mode 100644 index 000000000..738d705ac --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/UtilImplementationCommon.java @@ -0,0 +1,118 @@ +package uristqwerty.CraftGuide; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import uristqwerty.CraftGuide.api.ItemFilter; +import uristqwerty.CraftGuide.api.Util; +import uristqwerty.CraftGuide.client.ui.GuiRenderer; + +public abstract class UtilImplementationCommon extends Util +{ + public float partialTicks; + + @Override + public ItemFilter getCommonFilter(Object stack) + { + if(stack == null) + { + return null; + } + else if(stack instanceof ItemStack) + { + return new SingleItemFilter((ItemStack)stack); + } + else if(stack instanceof List && ((List)stack).size() > 0) + { + return new MultipleItemFilter((List)stack); + } + else if(stack instanceof String) + { + return new StringItemFilter((String)stack); + } + else + { + return null; + } + } + + @Override + public List getItemStackText(ItemStack stack) + { + try + { + List list = ((GuiRenderer)GuiRenderer.instance).getItemNameandInformation(stack); + + if(CommonUtilities.getItemDamage(stack) == CraftGuide.DAMAGE_WILDCARD && (list.size() < 1 || (list.size() == 1 && (list.get(0) == null || (list.get(0) instanceof String && ((String)list.get(0)).isEmpty()))))) + { + list = ((GuiRenderer)GuiRenderer.instance).getItemNameandInformation(GuiRenderer.fixedItemStack(stack)); + } + + List text = new ArrayList(list.size()); + boolean first = true; + + for(Object o: list) + { + if(o instanceof String) + { + if(first) + { + EnumRarity rarity = null; + + try + { + rarity = stack.getRarity(); + } + catch(NullPointerException e) + { + } + + if(rarity == null) + { + rarity = EnumRarity.common; + } + + text.add(rarity.rarityColor + (String)o); + + if(CraftGuide.alwaysShowID) + { + text.add(EnumChatFormatting.DARK_GRAY + "ID: " + Item.itemRegistry.getNameForObject(stack.getItem()) + "; data: " + CommonUtilities.getItemDamage(stack)); + } + + first = false; + } + else + { + text.add(EnumChatFormatting.DARK_GRAY + (String)o); + } + } + } + + return text; + } + catch(Exception e) + { + CraftGuideLog.log(e); + + List text = new ArrayList(1); + text.add(EnumChatFormatting.YELLOW + "Item " + Item.itemRegistry.getNameForObject(stack.getItem()) + " data " + Integer.toString(CommonUtilities.getItemDamage(stack))); + return text; + } + } + + @Override + public void reloadRecipes() + { + CraftGuide.side.reloadRecipes(); + } + + @Override + public float getPartialTicks() + { + return partialTicks; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/BasicRecipeFilter.java b/src/api/java/uristqwerty/CraftGuide/api/BasicRecipeFilter.java new file mode 100644 index 000000000..f69fe627b --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/BasicRecipeFilter.java @@ -0,0 +1,21 @@ +package uristqwerty.CraftGuide.api; + +import net.minecraft.item.ItemStack; + +/** + * Supports a simple filter, allowing recipes to be removed + * if they match certain conditions. + */ +public interface BasicRecipeFilter +{ + /** + * When CraftGuide loads or reloads its recipe list, this + * method will be called for every recipe. If this method + * returns false for a recipe, that recipe will be removed. + * + * @param recipe + * @param recipeType + * @return + */ + public boolean shouldKeepRecipe(CraftGuideRecipe recipe, ItemStack recipeType); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/ChanceSlot.java b/src/api/java/uristqwerty/CraftGuide/api/ChanceSlot.java new file mode 100644 index 000000000..19bf803d6 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/ChanceSlot.java @@ -0,0 +1,82 @@ +package uristqwerty.CraftGuide.api; + +import java.util.List; + +/** + * An ItemSlot that appends probability information to the name of + * the item it contains. To use it, instead of putting an ItemStack + * or List in the data array, put an Object[] containing the item + * at index 0, and an Integer representing the probability at index + * 1. + * + * Also worth noting, this class does not require any additional support + * within the rest of CraftGuide. If you copy it into a different package, + * and use that copy, it will function just fine with older versions of + * CraftGuide, as well as newer ones. It also shows how the API is set up + * to make that sort of extension possible. + */ +public class ChanceSlot extends ItemSlot +{ + private int ratio = 100; + private String formatString = " (%1$.0f%% chance)"; + + public ChanceSlot(int x, int y, int width, int height) + { + super(x, y, width, height); + } + + public ChanceSlot(int x, int y, int width, int height, boolean drawQuantity) + { + super(x, y, width, height, drawQuantity); + } + + @Override + public void draw(Renderer renderer, int x, int y, Object[] data, int dataIndex, boolean isMouseOver) + { + implementation.draw(this, renderer, x, y, stack(data, dataIndex), isMouseOver); + } + + @Override + public List getTooltip(int x, int y, Object[] data, int dataIndex) + { + if(data[dataIndex] == null || stack(data, dataIndex) == null) + { + return implementation.getTooltip(this, null); + } + + List tooltip = implementation.getTooltip(this, stack(data, dataIndex)); + double probability = ((Integer)((Object[])data[dataIndex])[1]) * 100 / (double)ratio; + + tooltip.set(0, tooltip.get(0) + String.format(formatString, probability)); + return tooltip; + } + + @Override + public boolean matches(ItemFilter search, Object[] data, int dataIndex, SlotType type) + { + return implementation.matches(this, search, stack(data, dataIndex), type); + } + + @Override + public ItemFilter getClickedFilter(int x, int y, Object[] data, int dataIndex) + { + return implementation.getClickedFilter(x, y, stack(data, dataIndex)); + } + + private Object stack(Object[] data, int dataIndex) + { + return data[dataIndex] != null? ((Object[])data[dataIndex])[0] : null; + } + + public ChanceSlot setRatio(int ratio) + { + this.ratio = ratio; + return this; + } + + public ChanceSlot setFormatString(String format) + { + formatString = format; + return this; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/CraftGuideAPIObject.java b/src/api/java/uristqwerty/CraftGuide/api/CraftGuideAPIObject.java new file mode 100644 index 000000000..b21b29ae0 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/CraftGuideAPIObject.java @@ -0,0 +1,52 @@ +package uristqwerty.CraftGuide.api; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * Uses reflection to register itself with CraftGuide when created. + *

+ * You do not need to use this class, it is provided only for convenience, + * as the static method it calls will accept any Object that implements + * zero or more of the following interfaces: + *
  • {@link RecipeProvider} + */ + +public class CraftGuideAPIObject +{ + /** + * When an instance of this class is created, it immediately registers itself + * with CraftGuide (through a static method, invoked through reflection). + *

    + * If you don't want to extend this class, you need to use the code similar to + * this in order for CraftGuide to know that your object exists. + */ + public CraftGuideAPIObject() + { + try + { + Class c = Class.forName("uristqwerty.CraftGuide.ReflectionAPI"); + + Method m = c.getMethod("registerAPIObject", Object.class); + m.invoke(null, this); + } + catch(ClassNotFoundException e) + { + } + catch(NoSuchMethodException e) + { + } + catch(SecurityException e) + { + } + catch(InvocationTargetException e) + { + } + catch(IllegalAccessException e) + { + } + catch(IllegalArgumentException e) + { + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/CraftGuideRecipe.java b/src/api/java/uristqwerty/CraftGuide/api/CraftGuideRecipe.java new file mode 100644 index 000000000..cb8da8d23 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/CraftGuideRecipe.java @@ -0,0 +1,103 @@ +package uristqwerty.CraftGuide.api; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +/** + * An instance of a single recipe to be displayed by CraftGuide. + *

    + * Contains a number of methods related to searching, drawing, + * and interaction with the user. + *

    + * It is possible to implement your own recipe, if the default + * functionality is not adequate, although you won't have access + * to any of the default implementation, so it may require a bit + * of work. + */ +public interface CraftGuideRecipe +{ + /** + * Checks whether a certain item is contained in this recipe. + *

    + * This method is provided as a convenience for anyone writing a + * RecipeFilter; {@link #containsItem(ItemFilter)} will generally + * be used elsewhere. + * @param filter + * @return + */ + public boolean containsItem(ItemStack filter); + + /** + * Checks whether this recipe contains an item that matches the + * supplied ItemFilter. Implementations of RecipeFilter may either + * use this or {@link #containsItem(ItemFilter)}; CraftGuide itself + * always uses this. + * @param filter + * @return + */ + public boolean containsItem(ItemFilter filter); + + /** + * When a mouse click occurs within the rectangle occupied by this recipe, + * this method is used to determine if the current ItemFilter should be + * changed as a result. Generally involves iterating over each Slot within + * the recipe, and, if any of them is at the coordinates, returning + * {@link Slot#getClickedFilter}. + * @param x coordinate, relative to the top left of this recipe + * @param y coordinate, relative to the top left of this recipe + * @return a new ItemFilter, or null to keep the current one + */ + public ItemFilter getRecipeClickedResult(int x, int y); + + /** + * Draws this recipe at the specified screen coordinates. If isMouseOver + * is true, mouseX and moyseY are the coordinates of the user's curosr, + * relative to the top left of this recipe; otherwise they are undefined, + * and may be anything, depending on the implementation of CraftGuide, + * and may change between CraftGuide versions. + * @param renderer + * @param x + * @param y + * @param isMouseOver + * @param mouseX + * @param mouseY + */ + public void draw(Renderer renderer, int x, int y, boolean isMouseOver, int mouseX, int mouseY); + + /** + * Called to get the text to display when the user moves their cursor + * over this recipe. Generally, and in the default recipe implementation, + * this means checking if the cursor is over a Slot, and if so, + * returning whatever the slot returns for {@link Slot#getTooltip} + * @param mouseX + * @param mouseY + * @return a List of Strings, or null + */ + public List getItemText(int mouseX, int mouseY); + + /** + * Gets an array of Objects, representing the contents of this recipe. + *

    + * Currently used by craftGuide to create a list of every type of item + * that is used (CraftGuide does not have any logic for finding items + * on its own). Some recipe filters may use this, although + * {@link containsItem} is preferred wherever possible. + * @return + */ + public Object[] getItems(); + + /** + * Gets the width of this recipe; used to determine grid spacing and + * if the cursor is currently positioned over this recipe + * @return + */ + public int width(); + + /** + * Gets the height of this recipe; used to determine grid spacing and + * if the cursor is currently positioned over this recipe + * @return + */ + public int height(); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/CraftGuideRecipeExtra1.java b/src/api/java/uristqwerty/CraftGuide/api/CraftGuideRecipeExtra1.java new file mode 100644 index 000000000..fac578916 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/CraftGuideRecipeExtra1.java @@ -0,0 +1,15 @@ +package uristqwerty.CraftGuide.api; + +import net.minecraft.item.ItemStack; + + +/** + * Contains two forgotten methods from CraftGuideRecipe. Allows + * searching for items, limiting the search to a specific + * SlotType. + */ +public interface CraftGuideRecipeExtra1 +{ + public boolean containsItem(ItemStack filter, SlotType type); + public boolean containsItem(ItemFilter filter, SlotType type); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/EUSlot.java b/src/api/java/uristqwerty/CraftGuide/api/EUSlot.java new file mode 100644 index 000000000..90a1a9c26 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/EUSlot.java @@ -0,0 +1,126 @@ +package uristqwerty.CraftGuide.api; + +import java.util.ArrayList; +import java.util.List; + + +public class EUSlot implements Slot +{ + public static final int VALUE_UNSPECIFIED = Integer.MIN_VALUE; + private int constantValue = VALUE_UNSPECIFIED; + private int constantSize = VALUE_UNSPECIFIED; + private final int x, y; + private final static int width = 16; + private final static int height = 16; + + private static NamedTexture image; + + public EUSlot(int x, int y) + { + this.x = x; + this.y = y; + + if(image == null) + { + image = Util.instance.getTexture("EU-icon"); + } + } + + @Override + public void draw(Renderer renderer, int recipeX, int recipeY, Object[] data, int dataIndex, boolean isMouseOver) + { + renderer.renderRect(recipeX + x, recipeY + y, width, height, image); + } + + @Override + public ItemFilter getClickedFilter(int x, int y, Object[] data, int dataIndex) + { + return null; + } + + @Override + public boolean isPointInBounds(int x, int y, Object[] data, int dataIndex) + { + return x >= this.x && x < this.x + width + && y >= this.y && y < this.y + height; + } + + @Override + public List getTooltip(int x, int y, Object[] data, int dataIndex) + { + int value = EUVaue(data[dataIndex]); + int size = PacketSize(data[dataIndex]); + + ArrayList tooltip = new ArrayList(); + tooltip.add("\u00a7fIC2 energy"); + + if(value != -1) + { + tooltip.add("\u00a77 " + Math.abs(value) + " EU " + (value > 0? "produced" : "used")); + } + + if(size != -1) + { + tooltip.add("\u00a77 " + size + " EU/t"); + } + + return tooltip; + } + + @Override + public boolean matches(ItemFilter filter, Object[] data, int dataIndex, SlotType type) + { + return false; + } + + public int EUVaue(Object data) + { + if(data instanceof Object[] && ((Object[])data)[0] instanceof Integer) + { + return (Integer)((Object[])data)[0]; + } + else if(constantValue != VALUE_UNSPECIFIED) + { + return constantValue; + } + else if(data instanceof Integer) + { + return (Integer)data; + } + else + { + return VALUE_UNSPECIFIED; + } + } + + public int PacketSize(Object data) + { + if(data instanceof Object[] && ((Object[])data)[1] instanceof Integer) + { + return (Integer)((Object[])data)[1]; + } + else if(constantSize != VALUE_UNSPECIFIED) + { + return constantSize; + } + else if(data instanceof Integer) + { + return (Integer)data; + } + else + { + return VALUE_UNSPECIFIED; + } + } + + public EUSlot setConstantEUValue(int value) + { + constantValue = value; + return this; + } + public EUSlot setConstantPacketSize(int size) + { + constantSize = size; + return this; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/ExtraSlot.java b/src/api/java/uristqwerty/CraftGuide/api/ExtraSlot.java new file mode 100644 index 000000000..b372e7a08 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/ExtraSlot.java @@ -0,0 +1,106 @@ +package uristqwerty.CraftGuide.api; + +import java.util.List; + + +/** + * An extension of ItemSlot that allows certain interactions + * to be disabled, and uses fixed Object provided during + * initialisation rather than the object matching this slot + * in the recipe. + *

    + * Unlike in the old API, there is no "can filter" option, + * as that can be accomplished through {@link #setSlotType} + * which is already present in ItemSlot. + */ +public class ExtraSlot extends ItemSlot +{ + public Object displayed; + public boolean showName = false; + public boolean canClick = false; + + public ExtraSlot(int x, int y, int width, int height, Object displayedItem) + { + super(x, y, width, height); + displayed = displayedItem; + } + + @Override + public void draw(Renderer renderer, int x, int y, Object[] data, int dataIndex, boolean isMouseOver) + { + implementation.draw(this, renderer, x, y, displayed, canClick && isMouseOver); + } + + @Override + public List getTooltip(int x, int y, Object[] data, int dataIndex) + { + if(showName) + { + return implementation.getTooltip(this, displayed); + } + else + { + return null; + } + } + + @Override + public ItemFilter getClickedFilter(int x, int y, Object[] data, int dataIndex) + { + if(canClick) + { + return implementation.getClickedFilter(x, y, displayed); + } + else + { + return null; + } + } + + /** + * Sets whether this slot, if clicked, sets the current + * filter to the displayed Object, or doesn't do anything + * + * @param clickable + * @return this ExtraSlot, to permit method chaining + */ + public ExtraSlot clickable(boolean clickable) + { + canClick = clickable; + return this; + } + + /** + * Sets whether this slot shows a tooltip on mouseover + * + * @param showName + * @return this ExtraSlot, to permit method chaining + */ + public ExtraSlot showName(boolean showName) + { + this.showName = showName; + return this; + } + + /** + * A shortened version of {@link #clickable(boolean)} + * that passes true + * + * @return this ExtraSlot, to permit method chaining + */ + public ExtraSlot clickable() + { + return clickable(true); + } + + /** + * A shortened version of {@link #showName(boolean)} + * that passes true + * + * @return this ExtraSlot, to permit method chaining + */ + public ExtraSlot showName() + { + return showName(true); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/InfoSlot.java b/src/api/java/uristqwerty/CraftGuide/api/InfoSlot.java new file mode 100644 index 000000000..a67d54e35 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/InfoSlot.java @@ -0,0 +1,74 @@ +package uristqwerty.CraftGuide.api; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; + +public class InfoSlot extends ItemSlot +{ + private final ItemStack displayed; + private final String[] format; + private boolean clickable; + private boolean searchable; + + public InfoSlot(int x, int y, ItemStack displayedStack, String[] lines) + { + super(x, y, 16, 16, true); + displayed = displayedStack; + format = lines; + } + + @Override + public void draw(Renderer renderer, int x, int y, Object[] data, int dataIndex, boolean isMouseOver) + { + ItemSlot.implementation.draw(this, renderer, x, y, displayed, isMouseOver && clickable); + } + + @Override + public ItemFilter getClickedFilter(int x, int y, Object[] data, int dataIndex) + { + return clickable? null : ItemSlot.implementation.getClickedFilter(x, y, displayed); + } + + @Override + public List getTooltip(int x, int y, Object[] data, int dataIndex) + { + List tooltip = new ArrayList(); + + if(data[dataIndex] instanceof Object[]) + { + for(int i = 0; i < format.length; i++) + { + tooltip.add(String.format(format[i], (Object[])data[dataIndex])); + } + } + else + { + for(int i = 0; i < format.length; i++) + { + tooltip.add(String.format(format[i], data[dataIndex])); + } + } + + return tooltip; + } + + @Override + public boolean matches(ItemFilter filter, Object[] data, int dataIndex, SlotType type) + { + return searchable && ItemSlot.implementation.matches(this, filter, displayed, type); + } + + public InfoSlot setSeachable(boolean searchable) + { + this.searchable = searchable; + return this; + } + + public InfoSlot setClickable(boolean clickable) + { + this.clickable = clickable; + return this; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/ItemFilter.java b/src/api/java/uristqwerty/CraftGuide/api/ItemFilter.java new file mode 100644 index 000000000..745329900 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/ItemFilter.java @@ -0,0 +1,37 @@ +package uristqwerty.CraftGuide.api; + +import java.util.List; + + +/** + * + */ +public interface ItemFilter +{ + /** + * Compares this filter with an Object. Common types include an + * ItemStack, a List of ItemStacks, or a String. + *

    + * If the object type is unknown, return false. + * @param item + * @return + */ + public boolean matches(Object item); + + /** + * Draw a visual representation of this filter at (x, y), within a + * 16 by 16 rectangle. May extend out of that rectangle, although it + * might not look very good. + * @param renderer + * @param x + * @param y + */ + public void draw(Renderer renderer, int x, int y); + + /** + * Gets a description of the filter, displayed when the user moves + * their cursor over the filter display. + * @return a List of lines of text + */ + public List getTooltip(); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/ItemSlot.java b/src/api/java/uristqwerty/CraftGuide/api/ItemSlot.java new file mode 100644 index 000000000..4c2bebef7 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/ItemSlot.java @@ -0,0 +1,154 @@ +package uristqwerty.CraftGuide.api; + +import java.util.List; + + +/** + * When a recipe is rendered, the ItemSlots provided to the template are + * used to determine the layout of the recipe's items. + */ +public class ItemSlot implements Slot +{ + /** + * This slot's size and location relative to the containing + * recipe's top left corner + */ + public int x, y, width, height; + + /** + * Used by {@link ItemSlotImplementation#draw} to decide + * whether to draw a background before drawing the actual + * slot contents. + */ + public boolean drawBackground; + + /** + * A sneaky field that is read by the default recipe implementation + * when an instance is created. If an ItemStack with a quantity + * greater than one would match up to an ItemSlot where + * drawQuantity equals false, it replaces the stack with one + * with a size of 1. This is only provided for convenience, it + * is entirely possibly to implement the same logic if it + * is needed but unavailable, such as with a custom recipe, + * or an implementation of Slot that is not an ItemSlot. + *

    + * The actual effect of this field may change in the future + * (for example, copying only part of the method that Minecraft + * uses to draw the item overlay, making the part that draws the + * stack size conditional), but for the moment, I'm assuming that + * doing it this way will be more compatible if Minecraft changes + * its implementation in the future, or if another mod edits + * {@link net.minecraft.src.RenderItem#renderItemOverlayIntoGUI}. + */ + public boolean drawQuantity; + + /** + * Used by {@link ItemSlotImplementation#matches} to + * restrict what sort of searches can match this slot + */ + public SlotType slotType = SlotType.INPUT_SLOT; + + /** + * Implementation of ItemSlot functionality, allowing it + * to change if needed, without altering the API. This + * field is set during CraftGuide's {@literal @PreInit}. + */ + public static ItemSlotImplementation implementation; + + /** + * Creates a new ItemSlot. Same as + * {@link #ItemSlot(int, int, int, int, boolean)}, with + * false as the last parameter. + * @param x + * @param y + * @param width + * @param height + */ + public ItemSlot(int x, int y, int width, int height) + { + this(x, y, width, height, false); + } + + /** + * Creates a new ItemSlot + * @param x + * @param y + * @param width + * @param height + * @param drawQuantity + */ + public ItemSlot(int x, int y, int width, int height, boolean drawQuantity) + { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.drawQuantity = drawQuantity; + } + + @Override + public void draw(Renderer renderer, int x, int y, Object[] data, int dataIndex, boolean isMouseOver) + { + implementation.draw(this, renderer, x, y, data[dataIndex], isMouseOver); + } + + @Override + public List getTooltip(int x, int y, Object[] data, int dataIndex) + { + return implementation.getTooltip(this, data[dataIndex]); + } + + @Override + public boolean matches(ItemFilter search, Object[] data, int dataIndex, SlotType type) + { + return implementation.matches(this, search, data[dataIndex], type); + } + + @Override + public boolean isPointInBounds(int x, int y, Object[] data, int dataIndex) + { + return implementation.isPointInBounds(this, x, y); + } + + @Override + public ItemFilter getClickedFilter(int x, int y, Object[] data, int dataIndex) + { + return implementation.getClickedFilter(x, y, data[dataIndex]); + } + + /** + * Sets whether or not this ItemSlot draws a background square + * during its draw method. + * @param draw + * @return this, to permit method chaining + */ + public ItemSlot drawOwnBackground(boolean draw) + { + drawBackground = draw; + return this; + } + + /** + * Sets whether or not this ItemSlot draws a background square + * during its draw method. Same as {@link #drawOwnBackground()}, + * but uses the default value of true. + * @return this, to permit method chaining + */ + public ItemSlot drawOwnBackground() + { + return drawOwnBackground(true); + } + + /** + * Sets the {@link SlotType} associated with this ItemSlot. + * The SlotType is used for searches, both from in-game, and + * from the use of the API + * @param type + * @return this ItemSlot, to permit method chaining + */ + public ItemSlot setSlotType(SlotType type) + { + slotType = type; + return this; + } +} \ No newline at end of file diff --git a/src/api/java/uristqwerty/CraftGuide/api/ItemSlotImplementation.java b/src/api/java/uristqwerty/CraftGuide/api/ItemSlotImplementation.java new file mode 100644 index 000000000..618f0d276 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/ItemSlotImplementation.java @@ -0,0 +1,61 @@ +package uristqwerty.CraftGuide.api; + +import java.util.List; + + +/** + * A collections of methods implementing the functionality required + * by ItemStack, without needing the code to be included as part of + * the API. + */ +public interface ItemSlotImplementation +{ + /** + * Gets the tooltip for an ItemSlot + * @param itemSlot + * @param data + * @return + */ + public List getTooltip(ItemSlot itemSlot, Object data); + + /** + * Draws an ItemSlot. + * @param itemSlot + * @param renderer + * @param x + * @param y + * @param data + * @param isMouseOver + */ + public void draw(ItemSlot itemSlot, Renderer renderer, int x, int y, Object data, boolean isMouseOver); + + /** + * Return an ItemFilter representing the ItemSlot contents. + * @param x + * @param y + * @param object + * @return + */ + public ItemFilter getClickedFilter(int x, int y, Object object); + + /** + * Compare the contents of an ItemSlot with an ItemFilter. + * @param itemSlot + * @param search + * @param object + * @param type + * @return + */ + public boolean matches(ItemSlot itemSlot, ItemFilter search, Object object, SlotType type); + + /** + * Does some simple math to test if a point, relative to the containing + * recipe's top left corner, is within the boundary rectangle of an + * ItemSlot. + * @param itemSlot + * @param x + * @param y + * @return + */ + public boolean isPointInBounds(ItemSlot itemSlot, int x, int y); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/LiquidFilter.java b/src/api/java/uristqwerty/CraftGuide/api/LiquidFilter.java new file mode 100644 index 000000000..578b9d4ee --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/LiquidFilter.java @@ -0,0 +1,117 @@ +package uristqwerty.CraftGuide.api; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.lwjgl.opengl.GL11; + +public class LiquidFilter implements ItemFilter +{ + private static NamedTexture containerTexture = null; + private FluidStack liquid; + private String liquidName; + private List tooltip = new ArrayList(); + + public LiquidFilter(FluidStack liquid) + { + if(containerTexture == null) + { + containerTexture = Util.instance.getTexture("liquidFilterContainer"); + } + + setLiquid(liquid); + } + + public void setLiquid(FluidStack liquid) + { + String name = liquid.getFluid().getLocalizedName(); + this.liquid = liquid; + liquidName = name.toLowerCase(); + tooltip.clear(); + tooltip.add(name); + } + + @Override + public boolean matches(Object item) + { + if(item instanceof ItemStack) + { + return liquid.isFluidEqual((ItemStack)item); + } + else if(item instanceof FluidStack) + { + return liquid.isFluidEqual((FluidStack)item); + } + else if(item instanceof String) + { + return liquidName.contains(((String)item).toLowerCase()); + } + else if(item instanceof List) + { + for(Object object: ((List)item)) + { + if(matches(object)) + { + return true; + } + } + } + + return false; + } + + @Override + public void draw(Renderer renderer, int x, int y) + { + if(liquid != null) + { + TextureManager textureManager = Minecraft.getMinecraft().getTextureManager(); + + Fluid fluid = liquid.getFluid(); + IIcon icon = fluid.getStillIcon(); + + if(icon != null) + { + textureManager.bindTexture(TextureMap.locationBlocksTexture); + + double u = icon.getInterpolatedU(3.0); + double u2 = icon.getInterpolatedU(13.0); + double v = icon.getInterpolatedV(1.0); + double v2 = icon.getInterpolatedV(15.0); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glColor4d(1.0, 1.0, 1.0, 1.0); + + GL11.glBegin(GL11.GL_QUADS); + GL11.glTexCoord2d(u, v); + GL11.glVertex2i(x + 3, y + 1); + + GL11.glTexCoord2d(u, v2); + GL11.glVertex2i(x + 3, y + 15); + + GL11.glTexCoord2d(u2, v2); + GL11.glVertex2i(x + 13, y + 15); + + GL11.glTexCoord2d(u2, v); + GL11.glVertex2i(x + 13, y + 1); + GL11.glEnd(); + } + } + + renderer.renderRect(x - 1, y - 1, 18, 18, containerTexture); + } + + @Override + public List getTooltip() + { + return tooltip; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/LiquidSlot.java b/src/api/java/uristqwerty/CraftGuide/api/LiquidSlot.java new file mode 100644 index 000000000..26c153724 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/LiquidSlot.java @@ -0,0 +1,158 @@ +package uristqwerty.CraftGuide.api; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; +import net.minecraftforge.fluids.FluidStack; + +import org.lwjgl.opengl.GL11; + +public class LiquidSlot implements Slot +{ + private int x; + private int y; + private int width = 16; + private int height = 16; + private SlotType slotType = SlotType.INPUT_SLOT; + + private static NamedTexture containerTexture = null; + + public LiquidSlot(int x, int y) + { + this.x = x; + this.y = y; + + if(containerTexture == null) + { + containerTexture = Util.instance.getTexture("liquidFilterContainer"); + } + } + + @Override + public void draw(Renderer renderer, int recipeX, int recipeY, Object[] data, int dataIndex, boolean isMouseOver) + { + int x = recipeX + this.x; + int y = recipeY + this.y; + + if(data[dataIndex] instanceof FluidStack) + { + FluidStack liquid = (FluidStack)data[dataIndex]; + + TextureManager textureManager = Minecraft.getMinecraft().getTextureManager(); + + Fluid fluid = liquid.getFluid(); + IIcon icon = fluid.getStillIcon(); + + if(icon != null) + { + textureManager.bindTexture(TextureMap.locationBlocksTexture); + + double u = icon.getInterpolatedU(3.0); + double u2 = icon.getInterpolatedU(13.0); + double v = icon.getInterpolatedV(1.0); + double v2 = icon.getInterpolatedV(15.0); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glColor4d(1.0, 1.0, 1.0, 1.0); + + GL11.glBegin(GL11.GL_QUADS); + GL11.glTexCoord2d(u, v); + GL11.glVertex2i(x + 3, y + 1); + + GL11.glTexCoord2d(u, v2); + GL11.glVertex2i(x + 3, y + 15); + + GL11.glTexCoord2d(u2, v2); + GL11.glVertex2i(x + 13, y + 15); + + GL11.glTexCoord2d(u2, v); + GL11.glVertex2i(x + 13, y + 1); + GL11.glEnd(); + } + } + + renderer.renderRect(x - 1, y - 1, 18, 18, containerTexture); + } + + @Override + public ItemFilter getClickedFilter(int x, int y, Object[] data, int dataIndex) + { + if(data[dataIndex] instanceof FluidStack) + { + return new LiquidFilter((FluidStack)data[dataIndex]); + } + else + { + return null; + } + } + + @Override + public boolean isPointInBounds(int x, int y, Object[] data, int dataIndex) + { + return x >= this.x && x < this.x + width + && y >= this.y && y < this.y + height; + } + + @Override + public List getTooltip(int x, int y, Object[] data, int dataIndex) + { + List tooltip = null; + + if(data[dataIndex] instanceof FluidStack) + { + tooltip = new ArrayList(1); + FluidStack stack = (FluidStack)data[dataIndex]; + tooltip.add(stack.getFluid().getLocalizedName() + " (" + stack.amount + " milliBuckets)"); + } + + return tooltip; + } + + //Check if the filter directly matches the contained LiquidStack, or + // matches any liquid container containing the liquid. + @Override + public boolean matches(ItemFilter filter, Object[] data, int dataIndex, SlotType type) + { + if(!(data[dataIndex] instanceof FluidStack) || + (type != slotType && ( + type != SlotType.ANY_SLOT || + slotType == SlotType.DISPLAY_SLOT || + slotType == SlotType.HIDDEN_SLOT))) + { + return false; + } + + FluidStack stack = (FluidStack)data[dataIndex]; + + if(filter.matches(stack)) + { + return true; + } + else + { + for(FluidContainerData liquidData: FluidContainerRegistry.getRegisteredFluidContainerData()) + { + if(stack.isFluidEqual(liquidData.fluid) && filter.matches(liquidData.filledContainer)) + { + return true; + } + } + + return false; + } + } + + public Slot setSlotType(SlotType type) + { + slotType = type; + return this; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/NamedTexture.java b/src/api/java/uristqwerty/CraftGuide/api/NamedTexture.java new file mode 100644 index 000000000..690f1678b --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/NamedTexture.java @@ -0,0 +1,11 @@ +package uristqwerty.CraftGuide.api; + +/** + * This interface represents an internal object to be used with + * {@link Renderer#renderRect(int, int, int, int, NamedTexture)}. + * It exists only to provide a type-safe way of storing the objects + * returned by {@link Util#getTexture}. + */ +public interface NamedTexture +{ +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/RecipeFilter.java b/src/api/java/uristqwerty/CraftGuide/api/RecipeFilter.java new file mode 100644 index 000000000..9d6203be7 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/RecipeFilter.java @@ -0,0 +1,24 @@ +package uristqwerty.CraftGuide.api; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +/** + * More advanced than {@link BasicRecipeFilter}, this + * interface also allows re-ordering and insertion of + * entirely new recipes for each recipe type. + */ +public interface RecipeFilter +{ + /** + * Given a List of {@link CraftGuideRecipe}s, returns a + * modified list. May either return the provided list, or + * create a new List object. If a new List is created, it + * must allow element removal from its iterator. + * @param source + * @param recipeType + * @return + */ + public List filterRecipes(List source, ItemStack recipeType); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/RecipeGenerator.java b/src/api/java/uristqwerty/CraftGuide/api/RecipeGenerator.java new file mode 100644 index 000000000..ab4c1395b --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/RecipeGenerator.java @@ -0,0 +1,120 @@ +package uristqwerty.CraftGuide.api; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +/** + * This interface contains methods that can be used to provide CraftGuide with + * crafting recipes. + *

    + * To do so, use one of the methods returning an {@link RecipeTemplate} + * to create a template from a list of {@link ItemSlot}s and optionally an + * ItemStack representing the recipe type (generally the block/item used to + * craft the recipe, if not provided, defaults to the workbench). + *

    + * With the template, call addRecipe for each recipe, passing an ItemStack[] + * corresponding to the ItemSlot[] provided when creating the template. + */ + +public interface RecipeGenerator +{ + /** + * Creates a {@link RecipeTemplate} for the provided ISlot[], + * associated with the provided crafting type. Create a default + * background based on the size of the template. + * @param slots + * @param craftingType + * @return + */ + public RecipeTemplate createRecipeTemplate(Slot[] slots, ItemStack craftingType); + + /** + * Creates a {@link RecipeTemplate} for the provided ISlot[], + * associated with the provided crafting type. The background is + * a rectangle taken out of the supplied texture file, at the + * coordinate pairs given. + * @param slots + * @param craftingType + * @param backgroundTexture + * @param backgroundX + * @param backgroundY + * @param backgroundSelectedX + * @param backgroundSelectedY + * @return + */ + + public RecipeTemplate createRecipeTemplate(Slot[] slots, ItemStack craftingType, String backgroundTexture, int backgroundX, int backgroundY, int backgroundSelectedX, int backgroundSelectedY); + /** + * Creates a {@link RecipeTemplate} for the provided ISlot[], + * associated with the provided crafting type. The background is + * a rectangle taken out of the supplied texture file, at the + * coordinate pairs given. + * @param slots + * @param craftingType + * @param backgroundTexture + * @param backgroundX + * @param backgroundY + * @param backgroundSelectedTexture + * @param backgroundSelectedX + * @param backgroundSelectedY + * @return + */ + public RecipeTemplate createRecipeTemplate(Slot[] slots, ItemStack craftingType, String backgroundTexture, int backgroundX, int backgroundY, String backgroundSelectedTexture, int backgroundSelectedX, int backgroundSelectedY); + + /** + * Generates a recipe from the template and Object[] passed to + * this method, and then adds it to CraftGuide to display in + * game. + * @param template + * @param crafting + */ + public void addRecipe(RecipeTemplate template, Object[] crafting); + + /** + * If you have your own recipe implementation, you can use this + * method to add recipes without needing a RecipeTemplate. + * @param recipe + * @param craftingType + */ + public void addRecipe(CraftGuideRecipe recipe, ItemStack craftingType); + + /** + * Sets whether a certain type of recipe is initially visible. + *

    + * Useful for hiding recipe types that have a lot of recipes, but + * few people need, so they would normally just add excessive + * clutter to the recipe list. + * @param type an ItemStack associated with the recipe type + * @param visible whether it is initially visible or not + */ + public void setDefaultTypeVisibility(ItemStack type, boolean visible); + + /** + * Takes an IRecipe, and returns an array representing a + * 3x3 crafting grid, plus a single output, for that recipe's + * contents. Each element is either null, an ItemStack, or a + * List containing zero or more ItemStacks (for Forge ore + * dictionary recipes). + *

    + * May return null if given an IRecipe implementation that it + * cannot interpret. + * @see #getCraftingRecipe(IRecipe, boolean) + * @param recipe the IRecipe to be read + * @return an Object[10], where the first nine elements form + * the 3x3 input grid, and the last element is the recipe output. + */ + public Object[] getCraftingRecipe(IRecipe recipe); + + /** + * Takes an IRecipe, and returns an array representing a + * 3x3 or 2x2 crafting grid, plus a single output. + *

    + * See {@link #getCraftingRecipe(IRecipe)} for details. + * @see #getCraftingRecipe(IRecipe) + * @param recipe + * @param allowSmallGrid if true, may return an Object[5] if + * the recipe fits in a 2x2 grid. + * @return an Object[10] or an Object[5] + */ + public Object[] getCraftingRecipe(IRecipe recipe, boolean allowSmallGrid); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/RecipeProvider.java b/src/api/java/uristqwerty/CraftGuide/api/RecipeProvider.java new file mode 100644 index 000000000..4a31bdfb9 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/RecipeProvider.java @@ -0,0 +1,18 @@ +package uristqwerty.CraftGuide.api; + +/** + * When CraftGuide (re)loads its recipe list, every Object that implements this + * interface, and has been registered with CraftGuide, will have its generateRecipes + * method called. + */ +public interface RecipeProvider +{ + /** + * Called by CraftGuide when it is (re)populating its recipe list, as a request + * for the implementing Object to provide recipes through the IRecipeGenerator + * instance passed to it. + * @param generator + * @see RecipeGenerator + */ + void generateRecipes(RecipeGenerator generator); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/RecipeTemplate.java b/src/api/java/uristqwerty/CraftGuide/api/RecipeTemplate.java new file mode 100644 index 000000000..c03051d02 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/RecipeTemplate.java @@ -0,0 +1,36 @@ +package uristqwerty.CraftGuide.api; + +import net.minecraft.item.ItemStack; + +/** + */ +public interface RecipeTemplate +{ + /** + * Sets the width and height that will be used for recipes + * produced by this template + * @param width + * @param height + * @return this template, to allow method chaining + */ + public RecipeTemplate setSize(int width, int height); + + /** + * Gets an ItemStack that represents the type of the recipe. + * Generally, this should be the block or item that players + * would most closely associate with it, such as the machine + * that the recipe is crafted in, or an item that opens the + * crafting GUI used by the recipe. + * + * @return the ItemStack, or null to default to a workbench + */ + public ItemStack getCraftingType(); + + /** + * Generate a recipe from an Object[] representing the contents + * of the recipe. + * @param items + * @return + */ + public CraftGuideRecipe generate(Object[] items); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/Renderer.java b/src/api/java/uristqwerty/CraftGuide/api/Renderer.java new file mode 100644 index 000000000..16ac69dae --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/Renderer.java @@ -0,0 +1,108 @@ +package uristqwerty.CraftGuide.api; + +import net.minecraft.item.ItemStack; + +/** + * Provides useful methods to render common things, in + * {@link Slot#draw} and {@link CraftGuideRecipe#draw}. + */ +public interface Renderer +{ + /** + * Draws an ItemStack at the specified screen coordinates. + * @param x + * @param y + * @param stack + */ + public void renderItemStack(int x, int y, ItemStack stack); + + + /** + * Draws a solid color rectangle + * @param x + * @param y + * @param width + * @param height + * @param color_argb Red, Green, Blue, and Alpha, packed into a single int, + * in the form 0xaarrggbb + */ + public void renderRect(int x, int y, int width, int height, int color_argb); + + + /** + * Draws a solid color rectangle + * @param x + * @param y + * @param width + * @param height + * @param color_rgb Red, Green, and Blue, packed into a single int, in the + * form 0x00rrggbb + * @param alpha + */ + public void renderRect(int x, int y, int width, int height, int color_rgb, int alpha); + + /** + * Draws a solid color rectangle + * @param x + * @param y + * @param width + * @param height + * @param red + * @param green + * @param blue + * @param alpha + */ + public void renderRect(int x, int y, int width, int height, int red, int green, int blue, int alpha); + + /** + * Draws a rectangle, textured with a NamedTexture obtained from + * {@link Util#getTexture}. + * @param x + * @param y + * @param width + * @param height + * @param texture + */ + public void renderRect(int x, int y, int width, int height, NamedTexture texture); + + /** + * Draws a rectangle, containing a vertical gradient + *
    + * Colors are packed into ints, in the form 0xaarrggbb + * @param x + * @param y + * @param width + * @param height + * @param topColor_argb + * @param bottomColor_argb + */ + public void renderVerticalGradient(int x, int y, int width, int height, int topColor_argb, int bottomColor_argb); + + /** + * Draws a rectangle, containing a horizontal gradient. + *
    + * Colors are packed into ints, in the form 0xaarrggbb + * @param x + * @param y + * @param width + * @param height + * @param leftColor_argb + * @param rightColor_argb + */ + public void renderHorizontalGradient(int x, int y, int width, int height, int leftColor_argb, int rightColor_argb); + + /** + * Draws a rectangle, containing an arbitrary gradient. + *
    + * Colors are packed into ints, in the form 0xaarrggbb + * @param x + * @param y + * @param width + * @param height + * @param topLeftColor_argb + * @param topRightColor_argb + * @param bottomLeftColor_argb + * @param bottomRightColor_argb + */ + public void renderGradient(int x, int y, int width, int height, int topLeftColor_argb, int topRightColor_argb, int bottomLeftColor_argb, int bottomRightColor_argb); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/Slot.java b/src/api/java/uristqwerty/CraftGuide/api/Slot.java new file mode 100644 index 000000000..6aa3a3d3e --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/Slot.java @@ -0,0 +1,92 @@ +package uristqwerty.CraftGuide.api; + +import java.util.List; + +/** + * A Slot represents a single component of a recipe being displayed by + * CraftGuide. Similar to how Minecraft handles items and blocks, one + * instance of a slot is used to handle the logic of multiple recipes. + *

    + * Each method's parameters include an Object[] representing the specific + * recipe, and the index of the Object related to this slot, allowing + * implementations that react differently based on more than one component + * of the recipe. + *

    + * Slot is only used by the default implementation of CraftGuideRecipe, a + * custom implementation may opt to ignore any part of this, or not use it + * entirely, but if it does, then it should provide some sort of logic to + * perform the same functionality. For example, one mod may opt to extend + * this interface with a number of more specific methods, and implement a + * recipe that mainly uses the alternate methods in certain situations. + * For most mods, however, the existing recipe mechanics should be + * sufficient (most shouldn't even need more than the provided ItemSlot). + */ +public interface Slot +{ + /** + * This method is called in order to draw this slot. (x, y) is the + * absolute coordinate of the top left corner of the containing + * recipe. + * @param renderer + * @param x + * @param y + * @param data + * @param dataIndex + * @param isMouseOver + */ + public void draw(Renderer renderer, int x, int y, Object[] data, int dataIndex, boolean isMouseOver); + + /** + * When this slot is clicked on in a recipe, this method is called in + * order to get the filter Object that is used to search the recipe list + * for related recipes. If null is returned, then the filter will not + * change. + *

    + * For common types, {@link Util#getCommonFilter(Object)} can provide + * a filter if given a known type of Object. + * @param x clicked coordinate, relative to the recipe's top left corner + * @param y clicked coordinate, relative to the recipe's top left corner + * @param data the Object[] representing the recipe + * @param dataIndex this slot's index in data + * @return null, or an IItemFilter + */ + public ItemFilter getClickedFilter(int x, int y, Object[] data, int dataIndex); + + /** + * This method is used by CraftGuide to determine whether a specific point + * is considered within the bounds of this particular slot. It is typically + * used to determine what slot, if any, the user's cursor is currently over. + * + * @param x coordinate, relative to the recipe's top left corner + * @param y coordinate, relative to the recipe's top left corner + * @param data the Object[] representing the recipe + * @param dataIndex this slot's index in data + * @return true if (x, y) is within this slot's bounds, otherwise false + */ + public boolean isPointInBounds(int x, int y, Object[] data, int dataIndex); + + /** + * When the user moves their cursor over a recipe containing this slot, and + * the cursor's position is within the bounds of this slot (relative to the + * containing recipe), this method is called to determine whether to display + * a tooltip, and, if so, what text should be displayed. + * + * @param x cursor coordinate, relative to the recipe's top left corner + * @param y cursor coordinate, relative to the recipe's top left corner + * @param data the Object[] representing the recipe + * @param dataIndex this slot's index in data + * @return a List of Strings, representing one or more lines of text, or + * null if the tooltip should not be displayed + */ + public List getTooltip(int x, int y, Object[] data, int dataIndex); + + /** + * Used to test if a specific slot matches the searched {@link ItemFilter} + * + * @param filter the Object being compared the the contents of this slot + * @param data the recipe's raw data array + * @param dataIndex this slot's index + * @param type the type of slot that is being searched for + */ + public boolean matches(ItemFilter filter, Object[] data, int dataIndex, SlotType type); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/SlotType.java b/src/api/java/uristqwerty/CraftGuide/api/SlotType.java new file mode 100644 index 000000000..3310e352f --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/SlotType.java @@ -0,0 +1,38 @@ +package uristqwerty.CraftGuide.api; + +/** + * SlotType is used to declare the purpose of a {@link Slot}, used + * by searches (both in-game and through the API). + */ +public enum SlotType +{ + /** + * For searches; matches anything except + * {@link HIDDEN_SLOT} and {@link DISPLAY_SLOT} + */ + ANY_SLOT, + + /** Resources required for the recipe */ + INPUT_SLOT, + /** Products produced by the recipe */ + OUTPUT_SLOT, + /** Machine(s) that processes the recipe */ + MACHINE_SLOT, + + /** + * Just in case {@link INPUT_SLOT}, {@link OUTPUT_SLOT}, + * and {@link MACHINE_SLOT} aren't adequate descriptions + * of this slot's purpose. + */ + OTHER_SLOT, + + /** + * Does not show up in searches for {@link ANY_SLOT}. + * Use for visual effects and such. + */ + DISPLAY_SLOT, + /** + * Does not show up in searches for {@link ANY_SLOT}. + */ + HIDDEN_SLOT, +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/StackInfo.java b/src/api/java/uristqwerty/CraftGuide/api/StackInfo.java new file mode 100644 index 000000000..bb088d11e --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/StackInfo.java @@ -0,0 +1,14 @@ +package uristqwerty.CraftGuide.api; + +import java.util.ArrayList; +import java.util.List; + +public class StackInfo +{ + public static List sources = new ArrayList(); + + public static void addSource(StackInfoSource source) + { + sources.add(source); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/StackInfoSource.java b/src/api/java/uristqwerty/CraftGuide/api/StackInfoSource.java new file mode 100644 index 000000000..85e89f772 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/StackInfoSource.java @@ -0,0 +1,8 @@ +package uristqwerty.CraftGuide.api; + +import net.minecraft.item.ItemStack; + +public interface StackInfoSource +{ + public String getInfo(ItemStack itemStack); +} diff --git a/src/api/java/uristqwerty/CraftGuide/api/Util.java b/src/api/java/uristqwerty/CraftGuide/api/Util.java new file mode 100644 index 000000000..85202e517 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/api/Util.java @@ -0,0 +1,78 @@ +package uristqwerty.CraftGuide.api; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +/** + * Contains a number of methods that implement common functionality + * that would otherwise need to be implemented by everyone who uses + * the API, or that relies on parts of CraftGuide not included in + * the API. + */ +public abstract class Util +{ + /** + * An instance of Util, containing the method implementations. + *

    + * It is set during CraftGuide's {@literal @PreInit}. + */ + public static Util instance; + + /** + * Causes CraftGuide to clear its list of recipes, and reload them with + * exactly the same process that was originally used to build the list. + */ + public abstract void reloadRecipes(); + + /** + * Converts the passed ItemStack's name and information into a List + * of Strings for display, similar to how GuiContainer does it. + * Additionally, contains logic to try an alternative if given a stack + * with a damage of -1 which produces an unusable name and information, + * if CraftGuide is set to always show item IDs it will insert the item's + * ID and damage value as the second line. If an exception is thrown + * at any time during the process, it will log it to CraftGuide.log and + * generate an error text to display that at least shows the item ID and + * damage. + * @param stack + * @return + */ + public abstract List getItemStackText(ItemStack stack); + + /** + * Gets a standard {@link ItemFilter} for any of the common types: + *
  • ItemStack + *
  • List of ItemStacks + *
  • String + * + * @param item + * @return + */ + public abstract ItemFilter getCommonFilter(Object item); + + /** + * Gets a texture usable with {@link Renderer#renderRect} + * from a String identifier. At the moment, it only accepts the + * hardcoded values "ItemStack-Any", "ItemStack-Background", and + * "ItemStack-OreDict", but the eventual intention is to load the + * definitions from external text files, to allow for a far more + * advanced ability to re-skin the entire GUI than is normally + * possible from just swapping a texture file. + * + * @param identifier + * @return + */ + public abstract NamedTexture getTexture(String identifier); + + /** + * Returns the number of partial ticks for this frame. I don't know + * quite what they do, but it's the third parameter to + * {@link net.minecraft.src.GuiScreen#drawScreen}, so I'm assuming + * that at least something needs it. Rather than pass it as an + * extra argument to every drawing method, it is stored at the + * start of rendering the GUI, and can be retrieved with this method. + * @return + */ + public abstract float getPartialTicks(); +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/CraftGuideClient.java b/src/api/java/uristqwerty/CraftGuide/client/CraftGuideClient.java new file mode 100644 index 000000000..28ba3ab69 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/CraftGuideClient.java @@ -0,0 +1,192 @@ +package uristqwerty.CraftGuide.client; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import uristqwerty.CraftGuide.CraftGuide; +import uristqwerty.CraftGuide.CraftGuideLog; +import uristqwerty.CraftGuide.CraftGuideSide; +import uristqwerty.CraftGuide.GuiCraftGuide; +import uristqwerty.CraftGuide.api.Util; +import uristqwerty.CraftGuide.client.ui.GuiRenderer; +import uristqwerty.gui_craftguide.rendering.RendererBase; +import uristqwerty.gui_craftguide.texture.BlankTexture; +import uristqwerty.gui_craftguide.texture.BorderedTexture; +import uristqwerty.gui_craftguide.texture.MultipleTextures; +import uristqwerty.gui_craftguide.texture.SolidColorTexture; +import uristqwerty.gui_craftguide.texture.SubTexture; +import uristqwerty.gui_craftguide.texture.TextureClip; +import uristqwerty.gui_craftguide.texture.TintedTexture; +import uristqwerty.gui_craftguide.theme.ThemeManager; + +public abstract class CraftGuideClient implements CraftGuideSide +{ + @Override + public void preInit() + { + RendererBase.instance = new GuiRenderer(); + Util.instance = new UtilImplementationClient(); + extractResources(); + + ThemeManager.addTextureType(SolidColorTexture.class); + ThemeManager.addTextureType(MultipleTextures.class); + ThemeManager.addTextureType(BorderedTexture.class); + ThemeManager.addTextureType(TintedTexture.class); + ThemeManager.addTextureType(BlankTexture.class); + ThemeManager.addTextureType(TextureClip.class); + ThemeManager.addTextureType(SubTexture.class); + + + ThemeManager.instance.reload(); + + ThemeManager.currentTheme = ThemeManager.instance.buildTheme(readThemeChoice()); + + if(ThemeManager.currentTheme == null) + { + ThemeManager.currentTheme = ThemeManager.instance.buildTheme("theme_base"); + } + } + + private String readThemeChoice() + { + File dir = themeDirectory(); + + if(dir == null) + { + return "base_texpack"; + } + + File file = new File(dir, "currentTheme.txt"); + + if(!file.exists()) + { + try + { + file.createNewFile(); + } + catch(IOException e) + { + e.printStackTrace(); + } + + if(file.canWrite()) + { + try + { + FileWriter writer = new FileWriter(file); + writer.write("base_texpack"); + writer.close(); + } + catch(IOException e) + { + e.printStackTrace(); + } + } + } + else if(file.canRead()) + { + try + { + BufferedReader reader = new BufferedReader(new FileReader(file)); + String line = reader.readLine(); + reader.close(); + return line; + } + catch(IOException e) + { + e.printStackTrace(); + } + } + + return "base_texpack"; + } + + @Override + public void reloadRecipes() + { + GuiCraftGuide.getInstance().reloadRecipes(); + } + + public static File themeDirectory() + { + File configDir = CraftGuide.configDirectory(); + + if(configDir == null) + { + return null; + } + + File dir = new File(configDir, "themes"); + + if(!dir.exists() && !dir.mkdirs()) + { + return null; + } + + return dir; + } + + private void extractResources() + { + File outputBase = themeDirectory(); + + if(outputBase == null) + { + return; + } + + try + { + InputStream stream = CraftGuide.class.getResourceAsStream("CraftGuideResources.zip"); + + if(stream != null) + { + ZipInputStream resources = new ZipInputStream(stream); + byte[] buffer = new byte[1024 * 16]; + ZipEntry entry; + while((entry = resources.getNextEntry()) != null) + { + File destination = new File(outputBase, entry.getName()); + + if(entry.isDirectory()) + { + destination.mkdirs(); + } + else + { + CraftGuideLog.log("CraftGuide: Extracting '" + entry.getName() + "' to '" + destination.getCanonicalPath() + "'", false); + destination.getParentFile().mkdirs(); + destination.createNewFile(); + FileOutputStream output = new FileOutputStream(destination); + int len; + + while((len = resources.read(buffer, 0, buffer.length)) != -1) + { + output.write(buffer, 0, len); + } + + output.flush(); + output.close(); + } + } + } + } + catch(IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void initNetworkChannels() + { + CraftGuide.loaderSide.initClientNetworkChannels(); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/FilterDisplay.java b/src/api/java/uristqwerty/CraftGuide/client/FilterDisplay.java new file mode 100644 index 000000000..3ea12ef79 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/FilterDisplay.java @@ -0,0 +1,72 @@ +package uristqwerty.CraftGuide.client; + +import java.util.List; + +import uristqwerty.CraftGuide.api.ItemFilter; +import uristqwerty.CraftGuide.client.ui.GuiRenderer; +import uristqwerty.CraftGuide.client.ui.Rendering.FloatingItemText; +import uristqwerty.CraftGuide.client.ui.Rendering.Overlay; +import uristqwerty.gui_craftguide.components.GuiElement; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class FilterDisplay extends GuiElement implements Renderable +{ + public ItemFilter filter; + private FloatingItemText itemName = new FloatingItemText("-No Item-"); + private Renderable itemNameOverlay = new Overlay(itemName); + private List text; + + public FilterDisplay(int x, int y) + { + super(x, y, 16, 16); + } + + public void setFilter(ItemFilter filter) + { + this.filter = filter; + } + + @Override + public void mouseMoved(int x, int y) + { + if(containsPoint(x, y) && filter != null) + { + text = filter.getTooltip(); + } + else + { + text = null; + } + + super.mouseMoved(x, y); + } + + @Override + public void draw() + { + super.draw(); + render(this); + + if(text != null) + { + itemName.setText(text); + render(itemNameOverlay); + } + } + + //@Override + private void render(GuiRenderer renderer, int xOffset, int yOffset) + { + if(filter != null) + { + filter.draw(renderer, xOffset, yOffset); + } + } + + @Override + public void render(RendererBase renderer, int x, int y) + { + render((GuiRenderer)renderer, x, y); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/UtilImplementationClient.java b/src/api/java/uristqwerty/CraftGuide/client/UtilImplementationClient.java new file mode 100644 index 000000000..871c51991 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/UtilImplementationClient.java @@ -0,0 +1,52 @@ +package uristqwerty.CraftGuide.client; + +import java.util.HashMap; +import java.util.Map; + +import uristqwerty.CraftGuide.UtilImplementationCommon; +import uristqwerty.CraftGuide.api.NamedTexture; +import uristqwerty.CraftGuide.client.ui.NamedTextureObject; +import uristqwerty.gui_craftguide.texture.DynamicTexture; + +public class UtilImplementationClient extends UtilImplementationCommon +{ + private NamedTextureObject textFilter = new NamedTextureObject(DynamicTexture.instance("text-filter")); + private NamedTextureObject itemStackAny = new NamedTextureObject(DynamicTexture.instance("stack-any")); + private NamedTextureObject itemStackOreDict = new NamedTextureObject(DynamicTexture.instance("stack-oredict")); + private NamedTextureObject itemStackOreDictSingle = new NamedTextureObject(DynamicTexture.instance("stack-oredict-single")); + private NamedTextureObject itemStackBackground = new NamedTextureObject(DynamicTexture.instance("stack-background")); + + private Map textureLookup = new HashMap(); + + @Override + public NamedTexture getTexture(String identifier) + { + if("ItemStack-Any".equalsIgnoreCase(identifier)) + { + return itemStackAny; + } + else if("ItemStack-OreDict".equalsIgnoreCase(identifier)) + { + return itemStackOreDict; + } + else if("ItemStack-OreDict-Single".equalsIgnoreCase(identifier)) + { + return itemStackOreDictSingle; + } + else if("ItemStack-Background".equalsIgnoreCase(identifier)) + { + return itemStackBackground; + } + else if("TextFilter".equalsIgnoreCase(identifier)) + { + return textFilter; + } + + if(!textureLookup.containsKey(identifier)) + { + textureLookup.put(identifier, new NamedTextureObject(DynamicTexture.instance(identifier))); + } + + return textureLookup.get(identifier); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/fml/CraftGuideClient_FML.java b/src/api/java/uristqwerty/CraftGuide/client/fml/CraftGuideClient_FML.java new file mode 100644 index 000000000..1bc337673 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/fml/CraftGuideClient_FML.java @@ -0,0 +1,143 @@ +package uristqwerty.CraftGuide.client.fml; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +import uristqwerty.CraftGuide.CommonUtilities; +import uristqwerty.CraftGuide.CraftGuide; +import uristqwerty.CraftGuide.CraftGuideLog; +import uristqwerty.CraftGuide.GuiCraftGuide; +import uristqwerty.CraftGuide.client.CraftGuideClient; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.registry.ClientRegistry; + +public class CraftGuideClient_FML extends CraftGuideClient +{ + + private KeyBinding key; + + @Override + public void initKeybind() + { + key = new KeyBinding( "Open CraftGuide", CraftGuide.defaultKeybind, "key.categories.misc" ); + ClientRegistry.registerKeyBinding( key ); + } + + @Override + public void checkKeybind() + { + if ( Keyboard.isKeyDown( key.getKeyCode() ) && CraftGuide.enableKeybind ) + { + Minecraft mc = Minecraft.getMinecraft(); + GuiScreen screen = mc.currentScreen; + + if ( screen == null ) + { + CraftGuide.side.openGUI( mc.thePlayer ); + } + else if ( screen instanceof GuiContainer ) + { + try + { + int x = Mouse.getX() * screen.width / mc.displayWidth; + int y = screen.height - (Mouse.getY() * screen.height / mc.displayHeight) - 1; + int left = (Integer) CommonUtilities.getPrivateValue( GuiContainer.class, (GuiContainer) screen, "field_147003_i", "i", "guiLeft" ); + int top = (Integer) CommonUtilities.getPrivateValue( GuiContainer.class, (GuiContainer) screen, "field_147009_r", "r", "guiTop" ); + openRecipe( (GuiContainer) screen, x - left, y - top ); + } + catch (IllegalArgumentException e) + { + CraftGuideLog.log( e, "Exception while trying to identify if there is an item at the current cursor position.", true ); + } + catch (SecurityException e) + { + CraftGuideLog.log( e, "Exception while trying to identify if there is an item at the current cursor position.", true ); + } + catch (NoSuchFieldException e) + { + CraftGuideLog.log( e, "Exception while trying to identify if there is an item at the current cursor position.", true ); + } + catch (IllegalAccessException e) + { + CraftGuideLog.log( e, "Exception while trying to identify if there is an item at the current cursor position.", true ); + } + } + } + } + + private void openRecipe(GuiContainer screen, int x, int y) + { + Container container = screen.inventorySlots; + + for (int i = 0; i < container.inventorySlots.size(); i++) + { + Slot slot = (Slot) container.inventorySlots.get( i ); + if ( x > slot.xDisplayPosition - 2 && x < slot.xDisplayPosition + 17 && y > slot.yDisplayPosition - 2 && y < slot.yDisplayPosition + 17 ) + { + ItemStack item = slot.getStack(); + + if ( item != null ) + { + Minecraft mc = Minecraft.getMinecraft(); + GuiCraftGuide.getInstance().setFilterItem( item ); + CraftGuide.side.openGUI( mc.thePlayer ); + } + + break; + } + } + } + + @Override + public void openGUI(EntityPlayer player) + { + FMLClientHandler.instance().displayGuiScreen( player, GuiCraftGuide.getInstance() ); + } + + boolean failed = false; + + @Override + public void stopTessellating() + { + if ( failed ) + return; + + try + { + if ( (Boolean) CommonUtilities.getPrivateValue( Tessellator.class, Tessellator.instance, "field_78415_z", "isDrawing", "x" ) ) + { + Tessellator.instance.draw(); + } + } + catch (SecurityException e) + { + CraftGuideLog.log( e, "", true ); + failed = true; + } + catch (IllegalArgumentException e) + { + CraftGuideLog.log( e, "", true ); + failed = true; + } + catch (NoSuchFieldException e) + { + CraftGuideLog.log( e, "", true ); + failed = true; + } + catch (IllegalAccessException e) + { + CraftGuideLog.log( e, "", true ); + failed = true; + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/ButtonTemplate.java b/src/api/java/uristqwerty/CraftGuide/client/ui/ButtonTemplate.java new file mode 100644 index 000000000..532ece30e --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/ButtonTemplate.java @@ -0,0 +1,37 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.HashMap; +import java.util.Map; + +import uristqwerty.CraftGuide.client.ui.GuiButton.ButtonState; +import uristqwerty.gui_craftguide.texture.Texture; + +public class ButtonTemplate +{ + private Map stateImages = new HashMap(); + + public ButtonTemplate(Texture[] images) + { + int i = 0; + for(ButtonState state: ButtonState.values()) + { + setStateImage(state, images[i]); + i = Math.min(i + 1, images.length); + } + } + + public ButtonTemplate() + { + } + + public Texture getStateImage(ButtonState state) + { + return stateImages.get(state); + } + + public ButtonTemplate setStateImage(ButtonState state, Texture image) + { + stateImages.put(state, image); + return this; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/CraftTypeDisplay.java b/src/api/java/uristqwerty/CraftGuide/client/ui/CraftTypeDisplay.java new file mode 100644 index 000000000..8ad7673bc --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/CraftTypeDisplay.java @@ -0,0 +1,271 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import uristqwerty.CraftGuide.CraftType; +import uristqwerty.CraftGuide.RecipeCache; +import uristqwerty.CraftGuide.client.ui.Rendering.FloatingItemText; +import uristqwerty.CraftGuide.client.ui.Rendering.Overlay; +import uristqwerty.CraftGuide.client.ui.Rendering.ShadedRect; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.TexturedRect; +import uristqwerty.gui_craftguide.texture.BorderedTexture; +import uristqwerty.gui_craftguide.texture.Texture; + +public class CraftTypeDisplay extends GuiScrollableGrid implements IRecipeCacheListener +{ + private Texture displayBackground; + private Renderable hiddenOverlay = new ShadedRect(-2, -2, 20, 20, 0xc6c6c6, 0x80); + private RecipeCache recipeCache; + private Map settings = new HashMap(); + private FloatingItemText toolTip = new FloatingItemText(""); + private Overlay toolTipOverlay = new Overlay(toolTip); + private String toolTipText = ""; + + private TexturedRect buttons[] = new TexturedRect[6]; + + public CraftTypeDisplay(int x, int y, int width, int height, GuiScrollBar scrollBar, Texture texture, RecipeCache recipeCache) + { + super(x, y, width, height, scrollBar, 32, 1); + + displayBackground = new BorderedTexture(texture, 117, 1, 1, 32, 2); + + this.recipeCache = recipeCache; + recipeCache.addListener(this); + initTypes(recipeCache); + + buttons[0] = new TexturedRect(0, 0, 28, 28, texture, 113, 76); + buttons[1] = new TexturedRect(0, 0, 28, 28, texture, 113, 104); + buttons[2] = new TexturedRect(0, 0, 28, 28, texture, 113, 132); + buttons[3] = new TexturedRect(0, 0, 28, 28, texture, 141, 76); + buttons[4] = new TexturedRect(0, 0, 28, 28, texture, 141, 104); + buttons[5] = new TexturedRect(0, 0, 28, 28, texture, 141, 132); + + setRows(recipeCache.getCraftTypes().size()); + setCells(recipeCache.getCraftTypes().size()); + } + + private void initTypes(RecipeCache recipeCache) + { + Set types = recipeCache.getCraftTypes(); + Set filteredTypes = recipeCache.getFilterTypes(); + + if(filteredTypes != null) + { + for(CraftType type: types) + { + settings.put(type, 1); + } + + for(CraftType type: filteredTypes) + { + settings.put(type, 0); + } + } + } + + @Override + public void renderGridRow(GuiRenderer renderer, int xOffset, int yOffset, int row) + { + Set types = recipeCache.getCraftTypes(); + + if(row < types.size()) + { + CraftType type = (CraftType)types.toArray()[row]; + displayBackground.renderRect(renderer, xOffset, yOffset, width(), rowHeight, 0, 0); + renderer.drawItemStack(type.getDisplayStack(), xOffset + 8, yOffset + 8, false); + + if(hidden(type)) + { + hiddenOverlay.render(renderer, xOffset + 8, yOffset + 8); + } + + for(int i = 0; i < 3; i++) + { + TexturedRect rect = buttons[i == setting(type)? i + 3 : i]; + + rect.render(renderer, xOffset + i * 29 + (bounds.width() - (3 * 29 + 24)) / 2 + 24, yOffset + 2); + } + } + } + + private boolean hidden(CraftType type) + { + switch(setting(type)) + { + case 2: + return false; + + case 1: + return true; + + default: + for(CraftType otherType: settings.keySet()) + { + if(setting(otherType) == 2) + { + return true; + } + } + + return false; + } + } + + @Override + public void rowClicked(int row, int x, int y, boolean inBounds) + { + if(y > 1 && y < 30 && inBounds) + { + if(x >= (bounds.width() - (3 * 29 + 24)) / 2 + 24 && x < (bounds.width() - (3 * 29 + 24)) / 2 + 24 + 3 * 29) + { + int relX = (x - ((bounds.width() - (3 * 29 + 24)) / 2 + 24)); + + if(relX % 29 != 28) + { + set(row, relX / 29); + } + } + } + } + + @Override + public void onChange(RecipeCache cache) + { + setRows(recipeCache.getCraftTypes().size()); + } + + @Override + public void setColumns(int columns) + { + super.setColumns(1); + } + + private int setting(CraftType type) + { + if(!settings.containsKey(type)) + { + settings.put(type, 0); + } + + return settings.get(type); + } + + private void set(int row, int setting) + { + Set types = recipeCache.getCraftTypes(); + + if(row < types.size()) + { + CraftType type = (CraftType)types.toArray()[row]; + + settings.put(type, setting); + + settingChanged(type, setting); + } + } + + private void settingChanged(CraftType type, int setting) + { + if(setting == 2) + { + for(CraftType settingType: settings.keySet()) + { + if(settingType != type && settings.get(settingType) == 2) + { + settings.put(settingType, 0); + } + } + } + + updateFilter(); + } + + private void updateFilter() + { + Set set = new HashSet(); + + for(CraftType type: settings.keySet()) + { + if(setting(type) == 2) + { + set.add(type); + recipeCache.setTypes(set); + return; + } + } + + for(CraftType type: recipeCache.getCraftTypes()) + { + if(setting(type) != 1) + { + set.add(type); + } + } + + recipeCache.setTypes(set); + } + + @Override + public void onReset(RecipeCache cache) + { + } + + @Override + public void draw() + { + super.draw(); + if(toolTipText != "") + { + toolTip.setText(toolTipText); + render(toolTipOverlay); + } + } + + @Override + public void mouseMovedRow(int row, int x, int y, boolean inBounds) + { + super.mouseMovedRow(row, x, y, inBounds); + + if(row < recipeCache.getCraftTypes().size() && y > 1 && y < 30 && inBounds) + { + if(x >= (bounds.width() - (3 * 29 + 24)) / 2 + 24 && x < (bounds.width() - (3 * 29 + 24)) / 2 + 24 + 3 * 29) + { + int relX = (x - ((bounds.width() - (3 * 29 + 24)) / 2 + 24)); + + if(relX % 29 != 28) + { + switch(relX / 29) + { + case 0: + toolTipText = "Show recipes of this type"; + break; + + case 1: + toolTipText = "Hide recipes of this type"; + break; + + case 2: + toolTipText = "Show only recipes of this type"; + } + } + } + } + } + + @Override + public void mouseMoved(int x, int y) + { + toolTipText = ""; + super.mouseMoved(x, y); + } + + @Override + protected int getMinCellHeight(int i) + { + return 32; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/CraftingDisplay.java b/src/api/java/uristqwerty/CraftGuide/client/ui/CraftingDisplay.java new file mode 100644 index 000000000..e29eb2167 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/CraftingDisplay.java @@ -0,0 +1,187 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.List; + +import uristqwerty.CraftGuide.RecipeCache; +import uristqwerty.CraftGuide.api.CraftGuideRecipe; +import uristqwerty.CraftGuide.api.ItemFilter; +import uristqwerty.CraftGuide.api.Renderer; +import uristqwerty.CraftGuide.client.ui.Rendering.FloatingItemText; +import uristqwerty.CraftGuide.client.ui.Rendering.Overlay; +import uristqwerty.gui_craftguide.rendering.Renderable; + +public class CraftingDisplay extends GuiVariableRowHeightGrid implements IRecipeCacheListener +{ + int mouseX; + int mouseY; + int mouseRow, mouseRowX, mouseRowY; + private FloatingItemText itemName = new FloatingItemText("-No Item-"); + private Renderable itemNameOverlay = new Overlay(itemName); + private RecipeCache recipeCache; + private CraftGuideRecipe recipeUnderMouse; + + public CraftingDisplay(int x, int y, int width, int height, GuiScrollBar scrollBar, RecipeCache recipeCache) + { + super(x, y, width, height, scrollBar, 58, 79); + flexibleSize = true; + + this.recipeCache = recipeCache; + recipeCache.addListener(this); + updateScrollbarSize(); + updateGridSize(); + } + + @Override + public void draw() + { + super.draw(); + drawSelectionName(); + } + + @Override + public void mouseMoved(int x, int y) + { + recipeUnderMouse = null; + super.mouseMoved(x, y); + } + + @Override + public void renderGridCell(GuiRenderer renderer, int xOffset, int yOffset, int cell) + { + List recipes = recipeCache.getRecipes(); + + if(cell < recipes.size()) + { + renderRecipe(renderer, xOffset, yOffset, recipes.get(cell)); + } + } + + private void renderRecipe(Renderer renderer, int xOffset, int yOffset, CraftGuideRecipe recipe) + { + if(recipe == recipeUnderMouse) + { + recipe.draw(renderer, xOffset, yOffset, true, mouseX, mouseY); + } + else + { + recipe.draw(renderer, xOffset, yOffset, false, -1, -1); + } + } + + public void setFilter(ItemFilter filter) + { + recipeCache.filter(filter); + } + + @Override + public void onChange(RecipeCache cache) + { + updateScrollbarSize(); + updateGridSize(); + } + + private void updateGridSize() + { + List recipes = recipeCache.getRecipes(); + int maxWidth = 16; + + for(CraftGuideRecipe recipe: recipes) + { + maxWidth = Math.max(maxWidth, recipe.width()); + } + + setColumnWidth(maxWidth); + recalculateRowHeight(); + } + + private void updateScrollbarSize() + { + setCells(recipeCache.getRecipes().size()); + } + + @Override + public void mouseMovedCell(int cell, int x, int y, boolean inBounds) + { + List recipes = recipeCache.getRecipes(); + + if(inBounds && cell < recipes.size()) + { + CraftGuideRecipe recipe = recipes.get(cell); + + if(x < recipe.width() && y < recipe.height()) + { + mouseX = x; + mouseY = y; + recipeUnderMouse = recipe; + } + } + } + + private void drawSelectionName() + { + if(recipeUnderMouse != null) + { + List text = recipeUnderMouse.getItemText(mouseX, mouseY); + + if(text != null) + { + itemName.setText(text); + render(itemNameOverlay); + } + } + } + + @Override + public void cellClicked(int cell, int x, int y) + { + List recipes = recipeCache.getRecipes(); + + if(cell < recipes.size()) + { + recipeClicked(recipes.get(cell), x, y); + } + } + + private void recipeClicked(CraftGuideRecipe recipe, int x, int y) + { + ItemFilter stack = recipe.getRecipeClickedResult(x, y); + + if(stack != null) + { + setFilter(stack); + } + } + + @Override + public void onReset(RecipeCache cache) + { + } + + public ItemFilter getItemFilterForPoint(int x, int y) + { + int cell = cellAtCoords(x, y); + List recipes = recipeCache.getRecipes(); + + if(cell < recipes.size()) + { + return recipes.get(cell).getRecipeClickedResult(x - columnOffset(columnAtX(x)), ((int)scrollBar.getValue() + y) % rowHeight); + } + + return null; + } + + @Override + protected int getMinCellHeight(int cell) + { + List recipes = recipeCache.getRecipes(); + + if(cell < recipes.size()) + { + return recipes.get(cell).height(); + } + else + { + return 0; + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/FilterSelectGrid.java b/src/api/java/uristqwerty/CraftGuide/client/ui/FilterSelectGrid.java new file mode 100644 index 000000000..11c1a3db3 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/FilterSelectGrid.java @@ -0,0 +1,244 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; + +import org.lwjgl.input.Keyboard; + +import uristqwerty.CraftGuide.CommonUtilities; +import uristqwerty.CraftGuide.CraftGuide; +import uristqwerty.CraftGuide.CraftType; +import uristqwerty.CraftGuide.RecipeCache; +import uristqwerty.CraftGuide.api.NamedTexture; +import uristqwerty.CraftGuide.api.Util; +import uristqwerty.CraftGuide.client.ui.Rendering.FloatingItemText; +import uristqwerty.CraftGuide.client.ui.Rendering.Overlay; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.TexturedRect; +import uristqwerty.gui_craftguide.texture.Texture; + +public class FilterSelectGrid extends GuiScrollableGrid implements IRecipeCacheListener, ITextInputListener +{ + private GuiButton backButton; + private GuiTabbedDisplay display; + private RecipeCache recipeCache; + private Renderable gridBackground; + private Object[] items; + private List itemResults = new ArrayList(); + private FloatingItemText itemName = new FloatingItemText("-No Item-"); + private Renderable itemNameOverlay = new Overlay(itemName); + private boolean overItem = false; + private String searchText = ""; + + private int lastMouseX, lastMouseY; + + private NamedTexture textImage = Util.instance.getTexture("TextFilter"); + private NamedTexture overlayAny = Util.instance.getTexture("ItemStack-Any"); + private NamedTexture overlayForge = Util.instance.getTexture("ItemStack-OreDict"); + + public FilterSelectGrid(int x, int y, int width, int height, GuiScrollBar scrollBar, Texture texture, + RecipeCache recipeCache, GuiButton backButton, GuiTabbedDisplay display) + { + super(x, y, width, height, scrollBar, 18, 18); + flexibleSize = true; + + this.backButton = backButton; + this.display = display; + this.recipeCache = recipeCache; + recipeCache.addListener(this); + setColumns(); + onReset(recipeCache); + + gridBackground = new TexturedRect(0, 0, 18, 18, texture, 238, 219); + } + + @Override + public void cellClicked(int cell, int x, int y) + { + if(cell < itemResults.size()) + { + recipeCache.filter(Util.instance.getCommonFilter(itemResults.get(cell))); + display.openTab(backButton); + } + else if(cell == itemResults.size() && searchText != null && !searchText.isEmpty()) + { + recipeCache.filter(Util.instance.getCommonFilter(searchText)); + display.openTab(backButton); + } + } + + @Override + public void mouseMoved(int x, int y) + { + overItem = false; + lastMouseX = x; + lastMouseY = y; + super.mouseMoved(x, y); + } + + @Override + public void mouseMovedCell(int cell, int x, int y, boolean inBounds) + { + if(inBounds) + { + if(cell < itemResults.size()) + { + overItem = true; + itemName.setText(CommonUtilities.getExtendedItemStackText(itemResults.get(cell))); + } + else if(cell == itemResults.size() && searchText != null && !searchText.isEmpty()) + { + overItem = true; + itemName.setText("\u00a77Text search: '" + searchText + "'"); + } + } + } + + @Override + public void renderGridCell(GuiRenderer renderer, int xOffset, int yOffset, int cell) + { + if(cell < itemResults.size()) + { + gridBackground.render(renderer, xOffset, yOffset); + ItemStack stack = displayItem(cell); + + renderer.drawItemStack(stack, xOffset + 1, yOffset + 1); + + if(CommonUtilities.getItemDamage(stack) == CraftGuide.DAMAGE_WILDCARD) + { + renderer.renderRect(xOffset, yOffset, 18, 18, overlayAny); + } + + if(itemResults.get(cell) instanceof ArrayList) + { + renderer.renderRect(xOffset, yOffset, 18, 18, overlayForge); + } + } + else if(cell == itemResults.size() && searchText != null && !searchText.isEmpty()) + { + gridBackground.render(renderer, xOffset, yOffset); + renderer.renderRect(xOffset + 1, yOffset + 1, 16, 16, textImage); + } + } + + private ItemStack displayItem(int cell) + { + Object item = itemResults.get(cell); + + if(item instanceof ItemStack) + { + return (ItemStack)item; + } + else if(item instanceof ArrayList && ((ArrayList)item).size() > 0) + { + return (ItemStack)((ArrayList)item).get(0); + } + else + { + return null; + } + } + + @Override + public void draw() + { + super.draw(); + + if(overItem) + { + render(itemNameOverlay); + } + } + + @Override + public void onReset(RecipeCache cache) + { + items = cache.getAllItems().toArray(); + search(searchText); + } + + public void search(String text) + { + searchText = text; + itemResults.clear(); + + if(text == null || text.isEmpty()) + { + for(Object item: items) + { + itemResults.add(((CraftType)item).getStack()); + } + + setCells(itemResults.size()); + } + else + { + String search = text.toLowerCase(); + + for(Object item: items) + { + Object stack = ((CraftType)item).getStack(); + + if(CommonUtilities.searchExtendedItemStackText(stack, search)) + { + itemResults.add(stack); + } + } + + setCells(itemResults.size() + 1); + } + + mouseMoved(lastMouseX, lastMouseY); + } + + + @Override + public void onChange(RecipeCache cache) + { + } + + @Override + public void onSubmit(GuiTextInput input) + { + if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || CraftGuide.textSearchRequiresShift == false) + { + recipeCache.filter(Util.instance.getCommonFilter(input.getText())); + display.openTab(backButton); + } + } + + @Override + public void onTextChanged(GuiTextInput input) + { + search(input.getText()); + } + + public ItemStack stackAtCoords(int x, int y) + { + int cell = cellAtCoords(x, y); + + if(cell < itemResults.size()) + { + Object content = itemResults.get(cell); + + if(content instanceof ItemStack) + { + return (ItemStack)content; + } + else if(content instanceof List && ((List)content).size() > 0 && ((List)content).get(0) instanceof ItemStack) + { + return (ItemStack)((List)content).get(0); + } + } + + return null; + } + + @Override + protected int getMinCellHeight(int i) + { + return 18; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiButton.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiButton.java new file mode 100644 index 000000000..7c5fd4db3 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiButton.java @@ -0,0 +1,164 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.LinkedList; +import java.util.List; + +import uristqwerty.CraftGuide.client.ui.Rendering.FloatingItemText; +import uristqwerty.CraftGuide.client.ui.Rendering.Overlay; +import uristqwerty.gui_craftguide.components.GuiElement; +import uristqwerty.gui_craftguide.texture.Texture; +import uristqwerty.gui_craftguide.texture.TextureClip; + + +public class GuiButton extends GuiElement +{ + public enum ButtonState + { + UP, + UP_OVER, + DOWN, + DOWN_OVER, + } + + private List buttonListeners = new LinkedList(); + private ButtonTemplate template; + + protected ButtonState currentState = ButtonState.UP; + + private static FloatingItemText toolTip = new FloatingItemText(""); + private static Overlay toolTipRender = new Overlay(toolTip); + private String toolTipText = ""; + + public GuiButton(int x, int y, int width, int height, Texture texture, int u, int v) + { + this(x, y, width, height, texture, u, v, width, 0); + } + + public GuiButton(int x, int y, int width, int height, Texture texture, int u, int v, int dx, int dy) + { + super(x, y, width, height); + + template = new ButtonTemplate(); + + int yOffset = 0; + int xOffset = 0; + for(ButtonState state: ButtonState.values()) + { + template.setStateImage(state, new TextureClip(texture, u + xOffset, v + yOffset, width, height)); + xOffset += dx; + yOffset += dy; + } + } + + protected GuiButton(int x, int y, int width, int height) + { + super(x, y, width, height); + } + + public GuiButton(int x, int y, int width, int height, ButtonTemplate template) + { + super(x, y, width, height); + + this.template = template; + } + + public GuiButton(int x, int y, int width, int height, ButtonTemplate template, String text) + { + this(x, y, width, height, template); + + addElement( + new GuiCentredText(0, 0, width, height, text) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT)); + } + + @Override + public void draw() + { + if(isOver() && !toolTipText.isEmpty()) + { + toolTip.setText(toolTipText); + render(toolTipRender); + } + + setBackground(template.getStateImage(currentState)); + super.draw(); + } + + @Override + public void mouseMoved(int x, int y) + { + updateState(containsPoint(x, y), isHeld()); + } + + @Override + public void mousePressed(int x, int y) + { + if(containsPoint(x, y)) + { + if(!isHeld()) + { + sendButtonEvent(IButtonListener.Event.PRESS); + } + + updateState(true, true); + } + } + + @Override + public void mouseReleased(int x, int y) + { + if(isHeld()) + { + sendButtonEvent(IButtonListener.Event.RELEASE); + } + + updateState(containsPoint(x, y), false); + } + + protected void updateState(boolean over, boolean held) + { + currentState = + held? + over? + ButtonState.DOWN_OVER + : + ButtonState.DOWN + : + over? + ButtonState.UP_OVER + : + ButtonState.UP; + } + + protected boolean isHeld() + { + return currentState == ButtonState.DOWN || currentState == ButtonState.DOWN_OVER; + } + + protected boolean isOver() + { + return currentState == ButtonState.UP_OVER || currentState == ButtonState.DOWN_OVER; + } + + public GuiButton addButtonListener(IButtonListener listener) + { + buttonListeners.add(listener); + + return this; + } + + protected void sendButtonEvent(IButtonListener.Event eventType) + { + for(IButtonListener listener: buttonListeners) + { + listener.onButtonEvent(this, eventType); + } + } + + public GuiButton setToolTip(String text) + { + toolTipText = text; + + return this; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiCentredText.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiCentredText.java new file mode 100644 index 000000000..54d986fdb --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiCentredText.java @@ -0,0 +1,32 @@ +package uristqwerty.CraftGuide.client.ui; + +import uristqwerty.CraftGuide.client.ui.Rendering.CentredText; +import uristqwerty.gui_craftguide.components.GuiElement; + +public class GuiCentredText extends GuiElement +{ + private CentredText text; + + public GuiCentredText(int x, int y, int width, int height, String text) + { + super(x, y, width, height); + + this.text = new CentredText(0, 0, width, height, text); + } + + @Override + public void onResize(int oldWidth, int oldHeight) + { + text.setSize(bounds.width(), bounds.height()); + + super.onResize(oldWidth, oldHeight); + } + + @Override + public void draw() + { + render(text); + + super.draw(); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiRenderer.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiRenderer.java new file mode 100644 index 000000000..de952e8cb --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiRenderer.java @@ -0,0 +1,455 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import org.lwjgl.opengl.GL11; + +import uristqwerty.CraftGuide.CommonUtilities; +import uristqwerty.CraftGuide.CraftGuide; +import uristqwerty.CraftGuide.CraftGuideLog; +import uristqwerty.CraftGuide.api.NamedTexture; +import uristqwerty.CraftGuide.client.ui.Rendering.Overlay; +import uristqwerty.gui_craftguide.minecraft.Gui; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.RendererBase; +import uristqwerty.gui_craftguide.rendering.TexturedRect; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.Texture; + +public class GuiRenderer extends RendererBase implements uristqwerty.CraftGuide.api.Renderer +{ + private RenderItem itemRenderer = new RenderItem(); + private List overlays = new LinkedList(); + private Gui gui; + + private static Map itemStackFixes = new HashMap(); + + private Renderable itemError = new TexturedRect(-1, -1, 18, 18, DynamicTexture.instance("item_error"), 238, 200); + + public void startFrame(Gui gui) + { + this.gui = gui; + resetValues(); + } + + public void endFrame() + { + for(Overlay overlay: overlays) + { + overlay.renderOverlay(this); + } + + overlays.clear(); + + GL11.glColor4d(1.0, 1.0, 1.0, 1.0); + } + + public void setColor(int colour, int alpha) + { + setColorRgb(colour); + setAlpha(alpha); + } + + @Override + public void setTextureID(int textureID) + { + if(textureID != -1) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID); + } + } + + public void drawGradient(int x, int y, int width, int height, int topColor, int bottomColor) + { + renderVerticalGradient(x, y, width, height, topColor, bottomColor); + } + + public void render(Renderable renderable, int xOffset, int yOffset) + { + renderable.render(this, xOffset, yOffset); + } + + public void overlay(Overlay overlay) + { + overlays.add(overlay); + } + + @Override + public void drawText(String text, int x, int y) + { + Minecraft.getMinecraft().fontRenderer.drawString(text, x, y, currentColor()); + } + + @Override + public void drawTextWithShadow(String text, int x, int y) + { + Minecraft.getMinecraft().fontRenderer.drawStringWithShadow(text, x, y, currentColor()); + } + + private int currentColor() + { + return ((((int)(alpha * 255)) & 0xff) << 24) | ((((int)(red * 255)) & 0xff) << 16) | ((((int)(green * 255)) & 0xff) << 8) | (((int)(blue * 255)) & 0xff); + } + + public void drawFloatingText(int x, int y, String text) + { + List list = new ArrayList(1); + list.add(text); + drawFloatingText(x, y, list); + } + + public void drawFloatingText(int x, int y, List text) + { + int textWidth = 0; + int textHeight = (text.size() > 1)? text.size() * 10: 8; + + for(String s: text) + { + int w; + + if(s.charAt(0) == '\u00a7') + { + w = Minecraft.getMinecraft().fontRenderer.getStringWidth(s.substring(2)); + } + else + { + w = Minecraft.getMinecraft().fontRenderer.getStringWidth(s); + } + + if(w > textWidth) + { + textWidth = w; + } + } + + int xMax = gui.width - textWidth - 4; + int yMax = gui.height - textHeight - 4; + + if(x > xMax) + { + x = xMax; + } + + if(x < 3) + { + x = 3; + } + + if(y > yMax) + { + y = yMax; + } + + if(y < 4) + { + y = 4; + } + + setColor(0xf0100010); + drawRect(x - 3, y - 4, textWidth + 6, 1); + drawRect(x - 3, y + textHeight + 3, textWidth + 6, 1); + drawRect(x - 3, y - 3, textWidth + 6, textHeight + 6); + drawRect(x - 4, y - 3, 1, textHeight + 6); + drawRect(x + textWidth + 3, y - 3, 1, textHeight + 6); + + setColor(0x505000ff); + drawRect(x - 3, y - 3, textWidth + 6, 1); + + setColor(0x5028007f); + drawRect(x - 3, y + textHeight + 2, textWidth + 6, 1); + + drawGradient(x - 3, y - 2, 1, textHeight + 4, 0x505000ff, 0x5028007f); + drawGradient(x + textWidth + 2, y - 2, 1, textHeight + 4, 0x505000ff, 0x5028007f); + + setColor(0xffffffff); + + int textY = y; + boolean first = true; + for(String s: text) + { + drawTextWithShadow(s, x, textY); + + if(first) + { + textY += 2; + first = false; + } + + textY += 10; + } + } + + public void drawItemStack(ItemStack itemStack, int x, int y) + { + drawItemStack(itemStack, x, y, true); + } + + public void drawItemStack(ItemStack itemStack, int x, int y, boolean renderOverlay) + { + if(itemStack == null) + { + return; + } + + boolean error = true; + + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glPushMatrix(); + GL11.glRotatef(120F, 1.0F, 0.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glTranslatef(x, y, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(32826 /*GL_RESCALE_NORMAL_EXT*/); + itemRenderer.zLevel = 100.0F; + + int initialMatrixStackDepth = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH); + + try + { + if(CommonUtilities.getItemDamage(itemStack) == CraftGuide.DAMAGE_WILDCARD) + { + itemStack = fixedItemStack(itemStack); + } + + itemRenderer.renderItemAndEffectIntoGUI(Minecraft.getMinecraft().fontRenderer, Minecraft.getMinecraft().getTextureManager(), itemStack, 0, 0); + + if(renderOverlay) + { + itemRenderer.renderItemOverlayIntoGUI(Minecraft.getMinecraft().fontRenderer, Minecraft.getMinecraft().getTextureManager(), itemStack, 0, 0); + } + + error = false; + } + catch(Exception e) + { + if(!hasLogged(itemStack)) + { + CraftGuideLog.log("Failed to render ItemStack {" + ( + itemStack == null? "null" : ( + "itemID = " + Item.itemRegistry.getNameForObject(itemStack.getItem()) + + ", itemDamage = " + CommonUtilities.getItemDamage(itemStack) + + ", stackSize = " + itemStack.stackSize)) + + "} (Further stack traces from this particular ItemStack instance will not be logged)"); + CraftGuideLog.log(e); + } + } + catch(Error e) + { + CraftGuideLog.log(e); + throw e; + } + finally + { + int finalMatrixStackDepth = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH); + + // If something went wrong, and an exception was thrown after at least one matrix push, + // fix it here, so that rendering errors do not affect later parts of the UI. + while(finalMatrixStackDepth > initialMatrixStackDepth) + { + GL11.glPopMatrix(); + finalMatrixStackDepth--; + } + + CraftGuide.side.stopTessellating(); + + itemRenderer.zLevel = 0.0F; + GL11.glDisable(32826 /*GL_RESCALE_NORMAL_EXT*/); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + } + + if(error) + { + drawItemStackError(x, y); + } + } + + private HashSet loggedStacks = new HashSet(); + + private boolean hasLogged(ItemStack stack) + { + return !loggedStacks.add(stack); + } + + public static ItemStack fixedItemStack(ItemStack itemStack) + { + ItemStack stack = itemStackFixes.get(itemStack); + + if(stack == null) + { + stack = itemStack.copy(); + stack.setItemDamage(0); + itemStackFixes.put(itemStack, stack); + } + + return stack; + } + + private void drawItemStackError(int x, int y) + { + itemError.render(this, x, y); + } + + public void setClippingRegion(int x, int y, int width, int height) + { + GL11.glEnable(GL11.GL_SCISSOR_TEST); + + x *= Minecraft.getMinecraft().displayHeight / (float)gui.height; + y *= Minecraft.getMinecraft().displayWidth / (float)gui.width; + height *= Minecraft.getMinecraft().displayHeight / (float)gui.height; + width *= Minecraft.getMinecraft().displayWidth / (float)gui.width; + + GL11.glScissor(x, Minecraft.getMinecraft().displayHeight - y - height, width, height); + } + + public void clearClippingRegion() + { + GL11.glDisable(GL11.GL_SCISSOR_TEST); + } + + public int guiXFromMouseX(int x) + { + return (x * gui.width) / Minecraft.getMinecraft().displayWidth; + } + + public int guiYFromMouseY(int y) + { + return gui.height - (y * gui.height) / Minecraft.getMinecraft().displayHeight - 1; + } + + @Override + public void renderItemStack(int x, int y, ItemStack stack) + { + drawItemStack(stack, x, y); + } + + @Override + public void renderRect(int x, int y, int width, int height, NamedTexture texture) + { + if(texture != null) + { + setColor(255, 255, 255, 255); + drawTexturedRect((Texture)texture, x, y, width, height, 0, 0); + } + } + + @Override + public void renderRect(int x, int y, int width, int height, int red, int green, int blue, int alpha) + { + setColor(red, green, blue, alpha); + drawRect(x, y, width, height); + setColor(0xff, 0xff, 0xff, 0xff); + } + + @Override + public void renderRect(int x, int y, int width, int height, int color_rgb, int alpha) + { + renderRect(x, y, width, height, + (color_rgb >> 16) & 0xff, + (color_rgb >> 8) & 0xff, + (color_rgb >> 0) & 0xff, + alpha); + } + + @Override + public void renderRect(int x, int y, int width, int height, int color_argb) + { + renderRect(x, y, width, height, color_argb & 0x00ffffff, (color_argb >> 24) & 0xff); + } + + @Override + public void renderVerticalGradient(int x, int y, int width, int height, int topColor_argb, int bottomColor_argb) + { + renderGradient(x, y, width, height, topColor_argb, topColor_argb, bottomColor_argb, bottomColor_argb); + } + + @Override + public void renderHorizontalGradient(int x, int y, int width, int height, int leftColor_argb, int rightColor_argb) + { + renderGradient(x, y, width, height, leftColor_argb, rightColor_argb, leftColor_argb, rightColor_argb); + } + + @Override + public void renderGradient(int x, int y, int width, int height, int topLeftColor_argb, int topRightColor_argb, + int bottomLeftColor_argb, int bottomRightColor_argb) + { + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glBlendFunc(770, 771); + + GL11.glBegin(GL11.GL_QUADS); + glColor1i(topLeftColor_argb); + GL11.glVertex2i(x, y); + + glColor1i(bottomLeftColor_argb); + GL11.glVertex2i(x, y + height); + + glColor1i(bottomRightColor_argb); + GL11.glVertex2i(x + width, y + height); + + glColor1i(topRightColor_argb); + GL11.glVertex2i(x + width, y); + GL11.glEnd(); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_BLEND); + } + + private void glColor1i(int color) + { + setGlColor( + ((color >> 16) & 0xff) / 255.0, + ((color >> 8) & 0xff) / 255.0, + ((color >> 0) & 0xff) / 255.0, + ((color >> 24) & 0xff) / 255.0); + } + + public List getItemNameandInformation(ItemStack stack) + { + if(stack.getItem() != null) + { + try + { + return getTooltip(stack); + } + catch(Exception e) + { + try + { + stack = fixedItemStack(stack); + return getTooltip(stack); + } + catch(Exception e2) + { + CraftGuideLog.log(e2); + } + } + } + + List list = new ArrayList(); + list.add("Err: Item " + Item.itemRegistry.getNameForObject(stack.getItem()) + ", damage " + CommonUtilities.getItemDamage(stack)); + return list; + } + + private List getTooltip(ItemStack stack) + { + return stack.getTooltip(Minecraft.getMinecraft().thePlayer, Minecraft.getMinecraft().gameSettings.advancedItemTooltips); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiResizeHandle.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiResizeHandle.java new file mode 100644 index 000000000..aaf4d49eb --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiResizeHandle.java @@ -0,0 +1,130 @@ +package uristqwerty.CraftGuide.client.ui; + +import uristqwerty.CraftGuide.CraftGuide; +import uristqwerty.gui_craftguide.components.GuiElement; +import uristqwerty.gui_craftguide.components.Window; + + +public class GuiResizeHandle extends GuiElement +{ + private AnchorPoint corner; + private boolean dragging = false; + private int targetX, targetY, targetOffsetX, targetOffsetY; + + private int minWidth, minHeight; + private GuiElement target; + + public GuiResizeHandle(int x, int y, int width, int height, GuiElement element) + { + this(x, y, width, height, element, AnchorPoint.BOTTOM_RIGHT); + } + + public GuiResizeHandle(int x, int y, int width, int height, GuiElement element, AnchorPoint corner) + { + this(x, y, width, height, element, corner, element.width(), element.height()); + } + + public GuiResizeHandle(int x, int y, int width, int height, + GuiElement element, int minimumWidth, int minimumHeight) + { + this(x, y, width, height, element, AnchorPoint.BOTTOM_RIGHT, minimumWidth, minimumHeight); + } + + public GuiResizeHandle(int x, int y, int width, int height, + GuiElement element, AnchorPoint corner, int minimumWidth, int minimumHeight) + { + super(x, y, width, height); + + this.corner = corner; + target = element; + minWidth = minimumWidth; + minHeight = minimumHeight; + + anchor(corner, corner); + } + + @Override + public void mouseMoved(int x, int y) + { + super.mouseMoved(x, y); + + if(dragging) + { + targetX = absoluteX() + x - bounds.x() - targetOffsetX; + targetY = absoluteY() + y - bounds.y() - targetOffsetY; + } + } + + @Override + public void mousePressed(int x, int y) + { + if(containsPoint(x, y)) + { + dragging = true; + targetX = absoluteX(); + targetY = absoluteY(); + targetOffsetX = x - bounds.x(); + targetOffsetY = y - bounds.y(); + } + + super.mousePressed(x, y); + } + + @Override + public void elementClicked(int x, int y) + { + super.elementClicked(x, y); + } + + @Override + public void mouseReleased(int x, int y) + { + super.mouseReleased(x, y); + + dragging = false; + } + + @Override + public void update() + { + if(dragging) + { + int xDif = targetX - absoluteX(); + int yDif = targetY - absoluteY(); + + if(CraftGuide.resizeRate > 0) + { + int xDir = (int)Math.signum(xDif); + int yDir = (int)Math.signum(yDif); + + xDif = Math.min(Math.abs(xDif), CraftGuide.resizeRate) * xDir; + yDif = Math.min(Math.abs(yDif), CraftGuide.resizeRate) * yDir; + } + + if(xDif != 0 || yDif != 0) + { + if(corner == AnchorPoint.TOP_LEFT || corner == AnchorPoint.TOP_RIGHT) + { + yDif = -yDif; + } + + if(corner == AnchorPoint.TOP_LEFT || corner == AnchorPoint.BOTTOM_LEFT) + { + xDif = -xDif; + } + + if(target instanceof Window && ((Window)target).isCentred()) + { + xDif *= 2; + yDif *= 2; + } + + target.setSize( + Math.max(target.width() + xDif, minWidth), + Math.max(target.height() + yDif, minHeight)); + } + } + + super.update(); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiRightAlignedText.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiRightAlignedText.java new file mode 100644 index 000000000..c112342f1 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiRightAlignedText.java @@ -0,0 +1,35 @@ +package uristqwerty.CraftGuide.client.ui; + +import uristqwerty.CraftGuide.client.ui.Rendering.RightAlignedText; +import uristqwerty.gui_craftguide.components.GuiElement; +import uristqwerty.gui_craftguide.minecraft.Text; + +public class GuiRightAlignedText extends GuiElement +{ + private Text text; + + public GuiRightAlignedText(int x, int y, String text, int color) + { + super(x, y, 0, 0); + + this.text = new RightAlignedText(0, 0, text, color); + } + + public GuiRightAlignedText(int x, int y, String text) + { + this(x, y, text, 0xffffffff); + } + + public void setText(String text) + { + this.text.setText(text); + } + + @Override + public void draw() + { + render(text); + + super.draw(); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiScrollBar.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiScrollBar.java new file mode 100644 index 000000000..b905f9807 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiScrollBar.java @@ -0,0 +1,217 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.HashMap; +import java.util.Map; + +import org.lwjgl.input.Keyboard; + +import uristqwerty.gui_craftguide.components.GuiElement; + + +public class GuiScrollBar extends GuiElement implements IButtonListener, ISliderListener +{ + private GuiSlider handle; + private float min = 0, max = 1, value = 0; + private static float scrollMultiplier = 1; + private int pageSize; + private Map buttons = new HashMap(); + private int rowSize; + + public static interface ScrollBarAlignmentCallback + { + float alignScrollBar(GuiScrollBar guiScrollBar, float oldValue, float newValue); + } + + private ScrollBarAlignmentCallback alignmentCallback; + + public GuiScrollBar(int x, int y, int width, int height, GuiSlider handle) + { + super(x, y, width, height); + + this.handle = handle; + addElement(handle); + handle.addSliderListener(this); + } + + public GuiScrollBar addButton(GuiButton button, int scrollValue, boolean scrollPages) + { + addElement(button); + button.addButtonListener(this); + buttons.put(button, new Object[]{scrollValue, scrollPages}); + + return this; + } + + public GuiElement setPageSize(int pageSize) + { + this.pageSize = pageSize; + + return this; + } + + public GuiElement setRowSize(int rowSize) + { + this.rowSize = rowSize; + + return this; + } + + public GuiScrollBar setScale(float min, float max) + { + float value = this.max > 0? (this.value - this.min) / (this.max - this.min) : 0; + handle.setValue(0, value); + + this.min = min; + this.max = max; + this.value = (value * (max - min)) + min; + + return this; + } + + public float getValue() + { + return value; + } + + @Override + public void onButtonEvent(GuiButton button, Event eventType) + { + if(eventType == Event.PRESS) + { + if(buttons.containsKey(button)) + { + Object[] data = buttons.get(button); + + if((Boolean)data[1]) + { + scrollPages((Integer)data[0]); + } + else + { + scrollLines((Integer)data[0]); + } + } + } + } + + @Override + public void onKeyTyped(char eventChar, int eventKey) + { + super.onKeyTyped(eventChar, eventKey); + + switch(eventKey) + { + case Keyboard.KEY_UP: + scrollLines(-1, true); + break; + + case Keyboard.KEY_DOWN: + scrollLines(1, true); + break; + + case Keyboard.KEY_LEFT: + case Keyboard.KEY_PRIOR: + scrollPages(-1); + break; + + case Keyboard.KEY_RIGHT: + case Keyboard.KEY_NEXT: + scrollPages(1); + break; + + case Keyboard.KEY_HOME: + scrollToStart(); + break; + + case Keyboard.KEY_END: + scrollToEnd(); + break; + } + } + + @Override + public void scrollWheelTurned(int change) + { + scrollLines(change, true); + + super.scrollWheelTurned(change); + } + + public void scrollPages(int pages) + { + scrollPixels(pages * pageSize); + } + + public void scrollLines(int lines) + { + scrollLines(lines, false); + } + + public void scrollLines(int lines, boolean align) + { + if(align && alignmentCallback != null) + { + float newValue = value + lines * rowSize * scrollMultiplier; + + newValue = alignmentCallback.alignScrollBar(this, value, newValue); + + setValue(newValue); + } + else + { + scrollPixels(lines * rowSize); + } + } + + public void scrollPixels(int pixels) + { + setValue(value + pixels * scrollMultiplier); + } + + public void scrollToStart() + { + setValue(min); + } + + public void scrollToEnd() + { + setValue(max); + } + + @Override + public void onSliderMoved(GuiSlider slider) + { + setValue(slider.getPosY() * max + min); + } + + private void setValue(float value) + { + if(value < min) + { + value = min; + } + + if(value > max) + { + value = max; + } + + this.value = value; + handle.setValue(0, (value - min) / (max - min)); + } + + public float getMax() + { + return max; + } + + public static void setScrollMultiplier(int i) + { + scrollMultiplier = i; + } + + public void setAlignmentCallback(ScrollBarAlignmentCallback alignmentCallback) + { + this.alignmentCallback = alignmentCallback; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiScrollableGrid.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiScrollableGrid.java new file mode 100644 index 000000000..c6d2f43da --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiScrollableGrid.java @@ -0,0 +1,391 @@ +package uristqwerty.CraftGuide.client.ui; + +import uristqwerty.CraftGuide.CraftGuide; +import uristqwerty.CraftGuide.client.ui.GuiScrollBar.ScrollBarAlignmentCallback; +import uristqwerty.CraftGuide.client.ui.Rendering.GridRect; +import uristqwerty.gui_craftguide.components.GuiElement; + +public abstract class GuiScrollableGrid extends GuiElement implements ScrollBarAlignmentCallback +{ + protected GuiScrollBar scrollBar; + protected int rowHeight; + + private GridRect display; + private int rows = 0, columns = 1, cells = 0; + private int columnWidth = 1; + private int reducedWidth = 0; + + public int borderSize = 1; + public boolean flexibleSize = false; + + private int lastMouseX, lastMouseY; + private float lastScroll; + + public GuiScrollableGrid(int x, int y, int width, int height, GuiScrollBar scrollBar, int rowHeight, int columnWidth) + { + super(x, y, width, height); + this.display = new GridRect(0, 0, width, height, this); + this.rowHeight = rowHeight; + this.scrollBar = scrollBar; + this.columnWidth = columnWidth; + + scrollBar.setAlignmentCallback(this); + scrollBar.setPageSize((height / rowHeight) * rowHeight); + + recalculateColumns(); + } + + @Override + public void draw() + { + if(lastScroll != scrollBar.getValue()) + { + lastScroll = scrollBar.getValue(); + mouseMoved(lastMouseX, lastMouseY); + } + + if(flexibleSize) + { + int width = columnWidth * ((bounds.width() + reducedWidth) / columnWidth); + + if(width != bounds.width()) + { + int xOff = (reducedWidth / 2) &~1; + reducedWidth = bounds.width() + reducedWidth - width; + + setPosition(bounds.x() - xOff + ((reducedWidth / 2) &~1), bounds.y()); + setSize(width, bounds.height()); + } + } + + drawBackground(); + render(display); + drawChildren(); + } + + @Override + public void drawBackground() + { + if(background != null) + { + render(background, -borderSize, -borderSize, bounds.width() + borderSize * 2, bounds.height() + borderSize * 2); + } + } + + @Override + public void mouseMoved(int x, int y) + { + int gridY = y - bounds.y(); + int scrollY = pixelsScrolledForY(gridY); + int row = rowAtY(gridY); + + lastMouseX = x; + lastMouseY = y; + lastScroll = scrollBar.getValue(); + + mouseMovedRow(row, x - bounds.x(), scrollY - rowStartPixels(row), containsPoint(x, y)); + + super.mouseMoved(x, y); + } + + @Override + public void mousePressed(int x, int y) + { + int gridY = y - bounds.y(); + int row = rowAtY(gridY); + int rowPos = pixelsScrolledForY(gridY) - rowStartPixels(row); + + rowClicked(row, x - bounds.x(), rowPos, containsPoint(x, y)); + super.mousePressed(x, y); + } + + /** + * @return Number of UI pixels between the top of the first + * row, and the start of the requested row. + */ + protected int rowStartPixels(int row) + { + return row * rowHeight; + } + + /** + * @return Number of UI pixels between the top of the first + * row, and . + */ + protected int pixelsScrolledForScreenY(int y) + { + return ((int)scrollBar.getValue()) + y - absoluteY(); + } + + protected int pixelsScrolledForY(int y) + { + return ((int)scrollBar.getValue()) + y; + } + + protected int rowAtScreenY(int y) + { + return pixelsScrolledForScreenY(y) / rowHeight; + } + + protected int rowAtGridY(int y) + { + return y / rowHeight; + } + + protected int rowAtY(int y) + { + return pixelsScrolledForY(y) / rowHeight; + } + + protected int getHeightForRow(int row) + { + return rowHeight; + } + + @Override + public void onResize(int oldWidth, int oldHeight) + { + scrollBar.setPageSize((bounds.height() / rowHeight) * rowHeight); + display.setSize(bounds.width(), bounds.height()); + + + if(flexibleSize) + { + int width = columnWidth * ((bounds.width() + reducedWidth) / columnWidth); + + if(width != bounds.width()) + { + int xOff = reducedWidth / 2; + reducedWidth = bounds.width() + reducedWidth - width; + + setPosition(bounds.x() - xOff + reducedWidth / 2, bounds.y()); + setSize(width, bounds.height()); + } + } + + recalculateColumns(); + scrollBar.setPageSize(bounds.height()); + } + + public void recalculateColumns() + { + setColumns(Math.max(bounds.width() / columnWidth, 1)); + } + + public void setRows(int rowCount) + { + rows = rowCount; + + recalculateRowHeight(); + updateScrollbarScale(); + } + + public void updateScrollbarScale() + { + float end = rowStartPixels(rows - 1) + getHeightForRow(rows - 1) - bounds.height(); + + if(end < 0) + { + end = 0; + } + + scrollBar.setRowSize(rowHeight); + scrollBar.setScale(0, end); + } + + protected void recalculateRowHeight() + { + int maxHeight = 1; + for(int i = 0; i < getCells(); i++) + { + maxHeight = Math.max(maxHeight, getMinCellHeight(i)); + } + + setRowHeight(maxHeight); + } + + public void setColumns() + { + setColumns(bounds.width() / columnWidth); + } + + public void setColumnWidth(int newWidth) + { + columnWidth = newWidth; + recalculateColumns(); + } + + public void setRowHeight(int newHeight) + { + rowHeight = newHeight; + updateScrollbarScale(); + } + + public void setColumns(int columns) + { + this.columns = columns; + setRows((getCells() + columns - 1) / columns); + } + + protected int getColumns() + { + return columns; + } + + public void setCells(int cells) + { + this.cells = cells; + setRows((cells + getColumns() - 1) / getColumns()); + } + + protected int getCells() + { + return cells; + } + + public void renderGridRows(GuiRenderer renderer, int xOffset, int yOffset) + { + int yMin = pixelsScrolledForScreenY(yOffset); + int row = rowAtScreenY(yOffset + 1); + + while(row < rowCount()) + { + int y = rowStartPixels(row) - yMin; + + if(y >= bounds.height()) + { + break; + } + + renderGridRow(renderer, xOffset, y + yOffset, row); + row++; + } + } + + public void renderGridRow(GuiRenderer renderer, int xOffset, int yOffset, int row) + { + for(int i = 0; i < getColumns(); i++) + { + int columnX = columnOffset(i); + + renderGridCell(renderer, xOffset + columnX, yOffset, row * getColumns() + i); + } + } + + public int columnOffset(int column) + { + if(CraftGuide.gridPacking) + { + return column * columnWidth; + } + else + { + return getColumns() < 2? 0 : (int)((bounds.width() - columnWidth) * column / (float)(getColumns() - 1)); + } + } + + protected int columnAtX(int x) + { + if(CraftGuide.gridPacking) + { + return Math.min(x / columnWidth, getColumns() - 1); + } + else + { + return (x * getColumns()) / bounds.width(); + } + } + + public void rowClicked(int row, int x, int y, boolean inBounds) + { + int column = columnAtX(x); + int columnX = columnOffset(column); + + if(inBounds && x - columnX < columnWidth && row * getColumns() + column < getCells()) + { + cellClicked(row * getColumns() + column, x - columnX, y); + } + } + + public void mouseMovedRow(int row, int x, int y, boolean inBounds) + { + int column = columnAtX(x); + + if(column >= 0 && row * getColumns() + column < getCells()) + { + int columnX = columnOffset(column); + + if(x >= columnX && x - columnX < columnWidth) + { + mouseMovedCell(row * getColumns() + column, x - columnX, y, inBounds); + } + } + } + + public int cellAtCoords(int x, int y) + { + int row = rowAtY(y); + return columnAtX(x) + row * getColumns(); + } + + public int rowCount() + { + return rows; + } + + public int firstVisibleRow() + { + return rowAtScreenY(absoluteY()); + } + + public int lastVisibleRow() + { + return rowAtScreenY(absoluteY() + bounds.height()); + } + + @Override + public float alignScrollBar(GuiScrollBar guiScrollBar, float oldValue, float newValue) + { + float alignedNewValue = rowStartPixels(rowAtGridY((int)newValue)); + + if(newValue > oldValue && alignedNewValue <= oldValue) + { + alignedNewValue = rowStartPixels(rowAtGridY((int)newValue) + 1); + } + else if(newValue < oldValue && alignedNewValue >= oldValue) + { + alignedNewValue = rowStartPixels(rowAtGridY((int)newValue) - 1); + } + + return alignedNewValue; + } + + public void mouseMovedCell(int cell, int x, int y, boolean inBounds) + { + /** Default implementation: Do nothing */ + } + + public void cellClicked(int cell, int x, int y) + { + /** Default implementation: Do nothing */ + } + + /** + * Called by the default implementation of {@link renderGridRow} one + * time for each column in the row. Override this in order to render + * each cell individually. + *

    + * (x, y) is the absolute screen position of this cell's top left corner. + * @param renderer + * @param x + * @param y + * @param cell [previous cells in this row] + ([number of previous rows] + * * [cells per row]) + */ + public void renderGridCell(GuiRenderer renderer, int x, int y, int cell) + { + /** Default implementation: Do nothing */ + } + + abstract protected int getMinCellHeight(int i); +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiSlider.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiSlider.java new file mode 100644 index 000000000..a929068e0 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiSlider.java @@ -0,0 +1,111 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.LinkedList; +import java.util.List; + +import uristqwerty.gui_craftguide.components.GuiElement; +import uristqwerty.gui_craftguide.texture.Texture; + + +public class GuiSlider extends GuiButton +{ + private int minX, minY, maxX, maxY; + private int dx, dy; + + private List sliderListeners = new LinkedList(); + + @Override + public void mousePressed(int x, int y) + { + super.mousePressed(x, y); + dx = x - bounds.x(); + dy = y - bounds.y(); + } + + @Override + public void mouseMoved(int x, int y) + { + super.mouseMoved(x, y); + + if(isHeld()) + { + updatePosition(x - dx, y - dy); + sendSliderEvent(); + } + } + + @Override + public GuiElement setSize(int width, int height) + { + float x = getPosX(); + float y = getPosY(); + + maxX += width - bounds.width(); + maxY += height - bounds.height(); + + setValue(x, y); + + return super.setSize(bounds.width(), bounds.height()); + } + + private void sendSliderEvent() + { + for(ISliderListener listener: sliderListeners) + { + listener.onSliderMoved(this); + } + } + + public void addSliderListener(ISliderListener listener) + { + sliderListeners.add(listener); + } + + private void updatePosition(int x, int y) + { + x = clampValue(x, minX, maxX); + y = clampValue(y, minY, maxY); + setPosition(x, y); + } + + public void setValue(float x, float y) + { + updatePosition((int)(x * (maxX - minX)) + minX, (int)(y * (maxY - minY)) + minY); + } + + private int clampValue(int value, int min, int max) + { + if(value < min) + { + value = min; + } + + if(value > max) + { + value = max; + } + + return value; + } + + public GuiSlider(int x, int y, int width, int height, int buttonWidth, int buttonHeight, + Texture texture, int u, int v) + { + super(x, y, buttonWidth, buttonHeight, texture, u, v); + + minX = x; + minY = y; + maxX = minX + width - buttonWidth; + maxY = minY + height - buttonHeight; + } + + public float getPosX() + { + return (bounds.x() - minX)/(float)(maxX - minX); + } + + public float getPosY() + { + return (bounds.y() - minY)/(float)(maxY - minY); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiTabbedDisplay.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiTabbedDisplay.java new file mode 100644 index 000000000..73e0cb8da --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiTabbedDisplay.java @@ -0,0 +1,138 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.HashMap; +import java.util.Map; + +import uristqwerty.gui_craftguide.components.GuiElement; + +public class GuiTabbedDisplay extends GuiElement implements IButtonListener +{ + private GuiElement currentTab = null; + private GuiElement changeTab = null; + private Map tabMap = new HashMap(); + + public GuiTabbedDisplay(int x, int y, int width, int height) + { + super(x, y, width, height); + } + + public GuiTabbedDisplay(int x, int y, int width, int height, Object[][] tabs) + { + this(x, y, width, height); + + for(Object[] tab: tabs) + { + if(tab[0] instanceof GuiElement && tab[1] instanceof GuiButton) + { + addTab((GuiElement)tab[0], (GuiButton)tab[1]); + } + } + } + + public GuiTabbedDisplay(int x, int y, int width, int height, Object[] tabs) + { + this(x, y, width, height); + + for(int i = 0; i < (tabs.length & ~1); i += 2) + { + if(tabs[i] instanceof GuiElement && tabs[i + 1] instanceof GuiButton) + { + addTab((GuiElement)tabs[i], (GuiButton)tabs[i + 1]); + } + } + } + + public GuiTabbedDisplay addTab(GuiElement tab, GuiButton button) + { + return addTab(tab, button, true); + } + + public GuiTabbedDisplay addTab(GuiElement tab, GuiButton button, boolean addAsChild) + { + button.addButtonListener(this); + return addTab(tab, (GuiElement)button, addAsChild); + } + + public GuiTabbedDisplay addTab(GuiElement tab, GuiElement key) + { + return addTab(tab, key, true); + } + + public GuiTabbedDisplay addTab(GuiElement tab, GuiElement key, boolean addAsChild) + { + if(addAsChild) + { + addElement(key); + } + + return addTab(tab, (Object)key); + } + + public GuiTabbedDisplay addTab(GuiElement tab, Object key) + { + tabMap.put(key, tab); + + if(currentTab == null) + { + setTab(tab); + } + + return this; + } + + @Override + public void mousePressed(int x, int y) + { + super.mousePressed(x, y); + + if(changeTab != null) + { + setTab(changeTab); + } + } + + @Override + public void onButtonEvent(GuiButton button, Event eventType) + { + if(eventType == Event.PRESS) + { + changeTab = tabMap.get(button); + } + } + + public void openTab(Object key) + { + setTab(tabMap.get(key)); + } + + private void setTab(GuiElement tab) + { + if(currentTab != null) + { + currentTab.mouseReleased(0, 0); + removeElement(currentTab); + } + + if(tab != null) + { + addElement(tab); + } + + currentTab = tab; + changeTab = null; + } + + @Override + public void onResize(int oldWidth, int oldHeight) + { + for(GuiElement element: tabMap.values()) + { + if(element != currentTab) + { + element.onParentResize(oldWidth, oldHeight, bounds.width(), bounds.height()); + } + } + + super.onResize(oldWidth, oldHeight); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiText.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiText.java new file mode 100644 index 000000000..082b88a12 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiText.java @@ -0,0 +1,34 @@ +package uristqwerty.CraftGuide.client.ui; + +import uristqwerty.gui_craftguide.components.GuiElement; +import uristqwerty.gui_craftguide.minecraft.Text; + +public class GuiText extends GuiElement +{ + private Text text; + + public GuiText(int x, int y, String text, int color) + { + super(x, y, 0, 0); + + this.text = new Text(0, 0, text, color); + } + + public GuiText(int x, int y, String text) + { + this(x, y, text, 0xffffffff); + } + + public void setText(String text) + { + this.text.setText(text); + } + + @Override + public void draw() + { + render(text); + + super.draw(); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiTextInput.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiTextInput.java new file mode 100644 index 000000000..5ed7ada01 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiTextInput.java @@ -0,0 +1,262 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; + +import org.lwjgl.input.Keyboard; + +import uristqwerty.gui_craftguide.components.GuiElement; +import uristqwerty.gui_craftguide.minecraft.Text; + +public class GuiTextInput extends GuiElement implements IButtonListener +{ + private List listeners = new LinkedList(); + private String before = ""; + private String after = ""; + public static GuiTextInput inFocus = null; + private Text textDisplayBefore = new Text(1, 2, "", 0xff000000); + private Text textDisplayAfter = new Text(1, 2, "", 0xff000000); + private int yText; + private int xText; + + public GuiTextInput(int x, int y, int width, int height) + { + this(x, y, width, height, 0, 0); + } + + public GuiTextInput(int x, int y, int width, int height, int xTextOffset, int yTextOffset) + { + super(x, y, width, height); + + xText = xTextOffset; + yText = yTextOffset; + } + + public GuiTextInput addListener(ITextInputListener listener) + { + listeners.add(listener); + return this; + } + + public String getText() + { + return before + after; + } + + @Override + public void mousePressed(int x, int y) + { + if(!containsPoint(x, y)) + { + setFocus(false); + } + + super.mousePressed(x, y); + } + + @Override + public void elementClicked(int x, int y) + { + setFocus(true); + moveCursor(xToCharIndex(x - xText)); + + super.elementClicked(x, y); + } + + private int xToCharIndex(int x) + { + if(x < Text.textWidth(before)) + { + return xToCharIndex(before, x); + } + else if(inFocus()) + { + if(x < Text.textWidth(before) + Text.textWidth("_")) + { + return before.length(); + } + else + { + return xToCharIndex(after, x - Text.textWidth(before) - Text.textWidth("_")) + before.length() + 1; + } + } + else + { + return xToCharIndex(after, x - Text.textWidth(before)) + before.length() + 1; + } + } + + private boolean inFocus() + { + return inFocus == this; + } + + private int xToCharIndex(String text, int x) + { + FontRenderer fr = Minecraft.getMinecraft().fontRenderer; + int i = 0; + + while(i < text.length() && fr.getStringWidth(text.substring(0, i + 1)) < x) + { + i++; + } + + return i; + } + + private void moveCursor(int index) + { + String text = before + after; + + if(index <= 0) + { + before = ""; + after = text; + } + else if(index >= text.length()) + { + before = text; + after = ""; + } + else + { + before = text.substring(0, index); + after = text.substring(index); + } + } + + @Override + public void onKeyTyped(char eventChar, int eventKey) + { + if(inFocus == this) + { + if(eventKey == Keyboard.KEY_BACK) + { + if(before.length() > 0) + { + before = before.substring(0, before.length() - 1); + } + } + else if(eventKey == Keyboard.KEY_DELETE) + { + if(after.length() > 0) + { + after = after.substring(1); + } + } + else if(eventKey == Keyboard.KEY_LEFT) + { + if(before.length() > 0) + { + after = before.substring(before.length() - 1) + after; + before = before.substring(0, before.length() - 1); + } + } + else if(eventKey == Keyboard.KEY_RIGHT) + { + if(after.length() > 0) + { + before = before + after.substring(0, 1); + after = after.substring(1); + } + + } + else if(eventKey == Keyboard.KEY_RETURN) + { + setFocus(false); + + for(ITextInputListener listener: listeners) + { + listener.onSubmit(this); + } + + return; + } + else if(eventChar != 0 && eventKey != Keyboard.KEY_ESCAPE) + { + before = before + eventChar; + } + + for(ITextInputListener listener: listeners) + { + listener.onTextChanged(this); + } + } + else + { + super.onKeyTyped(eventChar, eventKey); + } + } + + @Override + public void draw() + { + int afterOffset = 0; + + if(inFocus == this) + { + textDisplayBefore.setText(before); + + if((System.currentTimeMillis() % 1000) > 500) + { + textDisplayAfter.setText("_" + after); + } + else + { + textDisplayAfter.setText(after); + afterOffset = Text.textWidth("_"); + } + } + else + { + textDisplayBefore.setText(before); + textDisplayAfter.setText(after); + } + + render(textDisplayBefore, xText, yText); + render(textDisplayAfter, xText + textDisplayBefore.textWidth() + afterOffset, yText); + super.draw(); + } + + public void setFocus(boolean focused) + { + if(focused) + { + inFocus = this; + } + else if(inFocus == this) + { + inFocus = null; + } + } + + @Override + public void onButtonEvent(GuiButton button, Event eventType) + { + setFocus(true); + } + + public void setText(String string) + { + before = string; + after = ""; + + for(ITextInputListener listener: listeners) + { + listener.onTextChanged(this); + } + } + +/* + @Override + public void onGuiClosed() + { + setFocus(false); + + super.onGuiClosed(); + } +*/ +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/GuiVariableRowHeightGrid.java b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiVariableRowHeightGrid.java new file mode 100644 index 000000000..27eed0e55 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/GuiVariableRowHeightGrid.java @@ -0,0 +1,108 @@ +package uristqwerty.CraftGuide.client.ui; + +import java.util.Arrays; + + +public abstract class GuiVariableRowHeightGrid extends GuiScrollableGrid +{ + private int[] rowHeights; + private int[] rowStartY; + + public GuiVariableRowHeightGrid(int x, int y, int width, int height, GuiScrollBar scrollBar, int rowHeight, int columnWidth) + { + super(x, y, width, height, scrollBar, rowHeight, columnWidth); + } + + @Override + protected void recalculateRowHeight() + { + int rowCount = rowCount(); + int columns = getColumns(); + rowHeights = new int[rowCount]; + rowStartY = new int[rowCount]; + + if(rowCount < 1) + { + return; + } + + rowStartY[0] = 0; + + for(int row = 0; row < rowCount; row++) + { + int height = 1; + for(int column = 0; column < columns; column++) + { + int cell = row * columns + column; + + if(cell < getCells()) + { + height = Math.max(height, getMinCellHeight(cell)); + } + } + + rowHeights[row] = height; + + if(row < rowCount - 1) + { + rowStartY[row + 1] = rowStartY[row] + height; + } + } + } + + @Override + protected int getHeightForRow(int row) + { + if(row >= 0 && row < rowHeights.length) + { + return rowHeights[row]; + } + else + { + return 0; + } + } + + @Override + protected int rowAtScreenY(int y) + { + return rowAtGridY(pixelsScrolledForScreenY(y)); + } + + @Override + protected int rowAtY(int y) + { + return rowAtGridY(pixelsScrolledForY(y)); + } + + @Override + protected int rowAtGridY(int y) + { + int row = Arrays.binarySearch(rowStartY, y); + + if(row < 0) + { + row = Math.max(0,(-row) - 2); + } + + return row; + } + + @Override + protected int rowStartPixels(int row) + { + if(row >= 0) + { + if(row < rowStartY.length) + { + return rowStartY[row]; + } + else if(rowStartY.length > 0) + { + return rowStartY[rowStartY.length - 1]; + } + } + + return 0; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/IButtonListener.java b/src/api/java/uristqwerty/CraftGuide/client/ui/IButtonListener.java new file mode 100644 index 000000000..5112dcda2 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/IButtonListener.java @@ -0,0 +1,12 @@ +package uristqwerty.CraftGuide.client.ui; + +public interface IButtonListener +{ + enum Event + { + PRESS, + RELEASE + } + + void onButtonEvent(GuiButton button, Event eventType); +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/IRecipeCacheListener.java b/src/api/java/uristqwerty/CraftGuide/client/ui/IRecipeCacheListener.java new file mode 100644 index 000000000..8430d9c80 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/IRecipeCacheListener.java @@ -0,0 +1,9 @@ +package uristqwerty.CraftGuide.client.ui; + +import uristqwerty.CraftGuide.RecipeCache; + +public interface IRecipeCacheListener +{ + void onChange(RecipeCache cache); + void onReset(RecipeCache cache); +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/ISliderListener.java b/src/api/java/uristqwerty/CraftGuide/client/ui/ISliderListener.java new file mode 100644 index 000000000..deff11537 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/ISliderListener.java @@ -0,0 +1,6 @@ +package uristqwerty.CraftGuide.client.ui; + +public interface ISliderListener +{ + void onSliderMoved(GuiSlider slider); +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/ITextInputListener.java b/src/api/java/uristqwerty/CraftGuide/client/ui/ITextInputListener.java new file mode 100644 index 000000000..3807e9986 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/ITextInputListener.java @@ -0,0 +1,7 @@ +package uristqwerty.CraftGuide.client.ui; + +public interface ITextInputListener +{ + public void onTextChanged(GuiTextInput input); + public void onSubmit(GuiTextInput input); +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/NamedTextureObject.java b/src/api/java/uristqwerty/CraftGuide/client/ui/NamedTextureObject.java new file mode 100644 index 000000000..7978391ac --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/NamedTextureObject.java @@ -0,0 +1,21 @@ +package uristqwerty.CraftGuide.client.ui; + +import uristqwerty.CraftGuide.api.NamedTexture; +import uristqwerty.gui_craftguide.rendering.RendererBase; +import uristqwerty.gui_craftguide.texture.Texture; + +public class NamedTextureObject implements NamedTexture, Texture +{ + private final Texture actualTexture; + + public NamedTextureObject(Texture texture) + { + actualTexture = texture; + } + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + actualTexture.renderRect(renderer, x, y, width, height, u, v); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/CentredText.java b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/CentredText.java new file mode 100644 index 000000000..183cffb32 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/CentredText.java @@ -0,0 +1,36 @@ +package uristqwerty.CraftGuide.client.ui.Rendering; + +import uristqwerty.gui_craftguide.minecraft.Text; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class CentredText extends Text +{ + private int width, height; + + public CentredText(int x, int y, int width, int height, String text) + { + this(x, y, width, height, text, 0xff000000); + } + + public CentredText(int x, int y, int width, int height, String text, int color) + { + super(x, y, text, color); + + this.width = width; + this.height = height; + } + + @Override + public void render(RendererBase renderer, int xOffset, int yOffset) + { + renderer.setColor(color); + renderer.drawText(text, x + xOffset + (width + 1 - textWidth()) / 2, y + yOffset + (height + 1 - textHeight()) / 2); + renderer.setColor(0xffffffff); + } + + public void setSize(int width, int height) + { + this.width = width; + this.height = height; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/FloatingItemText.java b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/FloatingItemText.java new file mode 100644 index 000000000..e27946ca1 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/FloatingItemText.java @@ -0,0 +1,50 @@ +package uristqwerty.CraftGuide.client.ui.Rendering; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.input.Mouse; + +import uristqwerty.CraftGuide.client.ui.GuiRenderer; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.RendererBase; + + +public class FloatingItemText implements Renderable +{ + private List text; + + public FloatingItemText(List text) + { + this.text = text; + } + + public FloatingItemText(String text) + { + this.text = new ArrayList(1); + this.text.add(text); + } + + public void setText(String text) + { + this.text = new ArrayList(1); + this.text.add(text); + } + + public void setText(List text) + { + this.text = text; + } + + //@Override + public void render(GuiRenderer renderer, int xOffset, int yOffset) + { + renderer.drawFloatingText(renderer.guiXFromMouseX(Mouse.getX()) + 12, renderer.guiYFromMouseY(Mouse.getY()) - 13, text); + } + + @Override + public void render(RendererBase renderer, int x, int y) + { + render((GuiRenderer)renderer, x, y); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/GridRect.java b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/GridRect.java new file mode 100644 index 000000000..69d743d25 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/GridRect.java @@ -0,0 +1,48 @@ +package uristqwerty.CraftGuide.client.ui.Rendering; + +import uristqwerty.CraftGuide.client.ui.GuiRenderer; +import uristqwerty.CraftGuide.client.ui.GuiScrollableGrid; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class GridRect implements Renderable +{ + private int x, y, width, height; + private GuiScrollableGrid gridElement; + + public GridRect(int x, int y, int width, int height, GuiScrollableGrid displayElement) + { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.gridElement = displayElement; + } + + //@Override + public void render(GuiRenderer renderer, int xOffset, int yOffset) + { + renderer.setClippingRegion(x + xOffset, y + yOffset, width, height); + + try + { + gridElement.renderGridRows(renderer, x + xOffset, y + yOffset); + } + finally + { + renderer.clearClippingRegion(); + } + } + + @Override + public void render(RendererBase renderer, int x, int y) + { + render((GuiRenderer)renderer, x, y); + } + + public void setSize(int width, int height) + { + this.width = width; + this.height = height; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/Overlay.java b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/Overlay.java new file mode 100644 index 000000000..253a6db8e --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/Overlay.java @@ -0,0 +1,35 @@ +package uristqwerty.CraftGuide.client.ui.Rendering; + +import uristqwerty.CraftGuide.client.ui.GuiRenderer; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class Overlay implements Renderable +{ + private Renderable renderable; + private int x, y; + + public Overlay(Renderable renderable) + { + this.renderable = renderable; + } + + //@Override + public void render(GuiRenderer renderer, int xOffset, int yOffset) + { + renderer.overlay(this); + x = xOffset; + y = yOffset; + } + + public void renderOverlay(GuiRenderer renderer) + { + renderable.render(renderer, x, y); + } + + @Override + public void render(RendererBase renderer, int x, int y) + { + render((GuiRenderer)renderer, x, y); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/RenderMultiple.java b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/RenderMultiple.java new file mode 100644 index 000000000..c54a643fc --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/RenderMultiple.java @@ -0,0 +1,31 @@ +package uristqwerty.CraftGuide.client.ui.Rendering; + +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class RenderMultiple implements Renderable +{ + Renderable render[]; + int x, y; + + public RenderMultiple(Renderable render[]) + { + this(0, 0, render); + } + + public RenderMultiple(int x, int y, Renderable render[]) + { + this.x = x; + this.y = y; + this.render = render; + } + + @Override + public void render(RendererBase renderer, int x, int y) + { + for(Renderable renderable: render) + { + renderable.render(renderer, x + this.x, y + this.y); + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/RightAlignedText.java b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/RightAlignedText.java new file mode 100644 index 000000000..cc9223ff4 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/RightAlignedText.java @@ -0,0 +1,25 @@ +package uristqwerty.CraftGuide.client.ui.Rendering; + +import uristqwerty.gui_craftguide.minecraft.Text; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class RightAlignedText extends Text +{ + public RightAlignedText(int x, int y, String text) + { + super(x, y, text); + } + + public RightAlignedText(int x, int y, String text, int color) + { + super(x, y, text, color); + } + + @Override + public void render(RendererBase renderer, int xOffset, int yOffset) + { + renderer.setColor(color); + renderer.drawText(text, x + xOffset - textWidth(), y + yOffset); + renderer.setColor(0xffffffff); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/ShadedRect.java b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/ShadedRect.java new file mode 100644 index 000000000..27b2a7339 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/Rendering/ShadedRect.java @@ -0,0 +1,40 @@ +package uristqwerty.CraftGuide.client.ui.Rendering; + +import uristqwerty.CraftGuide.client.ui.GuiRenderer; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class ShadedRect implements Renderable +{ + private int x, y, width, height; + private int color, alpha; + + public ShadedRect(int x, int y, int width, int height, int colour) + { + this(x, y, width, height, colour, 0xff); + } + + public ShadedRect(int x, int y, int width, int height, int color, int alpha) + { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.color = color; + this.alpha = alpha; + } + + //@Override + public void render(GuiRenderer renderer, int xOffset, int yOffset) + { + renderer.setColor(color, alpha); + renderer.drawRect(x + xOffset, y + yOffset, width, height); + renderer.setColor(0xffffff, 0xff); + } + + @Override + public void render(RendererBase renderer, int x, int y) + { + render((GuiRenderer)renderer, x, y); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/RowCount.java b/src/api/java/uristqwerty/CraftGuide/client/ui/RowCount.java new file mode 100644 index 000000000..7cdfe1a6a --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/RowCount.java @@ -0,0 +1,25 @@ +package uristqwerty.CraftGuide.client.ui; + +import uristqwerty.gui_craftguide.components.GuiElement; + +public class RowCount extends GuiElement +{ + GuiScrollableGrid grid; + GuiRightAlignedText text; + + public RowCount(int x, int y, GuiScrollableGrid grid) + { + super(x, y, 0, 0); + + text = new GuiRightAlignedText(0, 0, "", 0xff000000); + addElement(text); + this.grid = grid; + } + + @Override + public void draw() + { + text.setText("Rows " + (grid.firstVisibleRow() + 1) + "-" + + (grid.lastVisibleRow()) + " of " + (grid.rowCount())); + super.draw(); + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/client/ui/ToggleButton.java b/src/api/java/uristqwerty/CraftGuide/client/ui/ToggleButton.java new file mode 100644 index 000000000..853d72125 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/client/ui/ToggleButton.java @@ -0,0 +1,45 @@ +package uristqwerty.CraftGuide.client.ui; + + +public class ToggleButton extends GuiButton +{ + public ToggleButton(int x, int y, int width, int height, ButtonTemplate template) + { + super(x, y, width, height, template); + } + + @Override + public void mouseMoved(int x, int y) + { + updateState(containsPoint(x, y), isHeld()); + } + + @Override + public void mousePressed(int x, int y) + { + if(containsPoint(x, y)) + { + if(!isHeld()) + { + sendButtonEvent(IButtonListener.Event.PRESS); + } + else + { + sendButtonEvent(IButtonListener.Event.RELEASE); + } + + updateState(true, !isHeld()); + } + } + + @Override + public void mouseReleased(int x, int y) + { + } + + public ToggleButton setState(ButtonState state) + { + currentState = state; + return this; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/recipes/BrewingRecipes.java b/src/api/java/uristqwerty/CraftGuide/recipes/BrewingRecipes.java new file mode 100644 index 000000000..0e2b08b1e --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/recipes/BrewingRecipes.java @@ -0,0 +1,131 @@ +package uristqwerty.CraftGuide.recipes; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionHelper; +import uristqwerty.CraftGuide.CommonUtilities; +import uristqwerty.CraftGuide.CraftGuide; +import uristqwerty.CraftGuide.DefaultRecipeTemplate; +import uristqwerty.CraftGuide.api.CraftGuideAPIObject; +import uristqwerty.CraftGuide.api.ItemSlot; +import uristqwerty.CraftGuide.api.RecipeGenerator; +import uristqwerty.CraftGuide.api.RecipeProvider; +import uristqwerty.CraftGuide.api.RecipeTemplate; +import uristqwerty.CraftGuide.api.Slot; +import uristqwerty.CraftGuide.api.SlotType; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.TextureClip; + +public class BrewingRecipes extends CraftGuideAPIObject implements RecipeProvider +{ + private final Slot[] slots = new ItemSlot[]{ + new ItemSlot(12, 12, 16, 16).setSlotType(SlotType.INPUT_SLOT), + new ItemSlot(12, 30, 16, 16).setSlotType(SlotType.INPUT_SLOT), + new ItemSlot(49, 21, 16, 16).setSlotType(SlotType.OUTPUT_SLOT), + }; + + @Override + public void generateRecipes(RecipeGenerator generator) + { + ItemStack stack = new ItemStack(Items.brewing_stand); + List recipes = getRecipes(); + /*RecipeTemplate template = generator.createRecipeTemplate(slots, stack, + "/gui/BrewGuide.png", 1, 1, 82, 1);*/ + + RecipeTemplate template = new DefaultRecipeTemplate( + slots, + stack, + new TextureClip( + DynamicTexture.instance("brew_recipe_background"), + 1, 1, 79, 58), + new TextureClip( + DynamicTexture.instance("brew_recipe_background"), + 82, 1, 79, 58)); + + if(CraftGuide.hideMundanePotionRecipes) + { + Iterator iterator = recipes.iterator(); + + while(iterator.hasNext()) + { + ItemStack[] recipe = iterator.next(); + + if(recipe[2] != null && CommonUtilities.getItemDamage(recipe[2]) == 8192) + { + iterator.remove(); + } + } + } + + for(ItemStack[] recipe: recipes) + { + generator.addRecipe(template, recipe); + } + + generator.setDefaultTypeVisibility(stack, false); + } + + private List getRecipes() + { + List ingredients = getIngredients(); + + ItemStack water = new ItemStack(Items.potionitem); + List potionRecipes = new LinkedList(); + Set done = new HashSet(); + done.add(0); + + addRecipesForPotion(potionRecipes, water, ingredients, done); + + return potionRecipes; + } + + private void addRecipesForPotion(List potionRecipes, ItemStack potion, List ingredients, Set done) + { + List next = new LinkedList(); + + for(Item ingredient: ingredients) + { + int result = PotionHelper.applyIngredient(CommonUtilities.getItemDamage(potion), ingredient.getPotionEffect(new ItemStack(ingredient))); + + if(result != 0 && result != CommonUtilities.getItemDamage(potion)) + { + ItemStack output = new ItemStack(Items.potionitem); + output.setItemDamage(result); + potionRecipes.add(new ItemStack[] {potion, new ItemStack(ingredient), output}); + + if(!done.contains(result)) + { + next.add(output); + done.add(result); + } + } + } + + for(ItemStack nextPotion: next) + { + addRecipesForPotion(potionRecipes, nextPotion, ingredients, done); + } + } + + private List getIngredients() + { + List ingredients = new LinkedList(); + + for(Object item: Item.itemRegistry) + { + if(item != null && ((Item)item).isPotionIngredient(new ItemStack((Item)item))) + { + ingredients.add(((Item)item)); + } + } + + return ingredients; + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/recipes/DefaultRecipeProvider.java b/src/api/java/uristqwerty/CraftGuide/recipes/DefaultRecipeProvider.java new file mode 100644 index 000000000..c8642e271 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/recipes/DefaultRecipeProvider.java @@ -0,0 +1,214 @@ +package uristqwerty.CraftGuide.recipes; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.tileentity.TileEntityFurnace; +import uristqwerty.CraftGuide.CraftGuide; +import uristqwerty.CraftGuide.CraftGuideLog; +import uristqwerty.CraftGuide.DefaultRecipeTemplate; +import uristqwerty.CraftGuide.RecipeGeneratorImplementation; +import uristqwerty.CraftGuide.api.CraftGuideAPIObject; +import uristqwerty.CraftGuide.api.ItemSlot; +import uristqwerty.CraftGuide.api.RecipeGenerator; +import uristqwerty.CraftGuide.api.RecipeProvider; +import uristqwerty.CraftGuide.api.RecipeTemplate; +import uristqwerty.CraftGuide.api.Slot; +import uristqwerty.CraftGuide.api.SlotType; +import uristqwerty.CraftGuide.api.StackInfo; +import uristqwerty.CraftGuide.api.StackInfoSource; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.TextureClip; + +public class DefaultRecipeProvider extends CraftGuideAPIObject implements RecipeProvider, StackInfoSource +{ + + public DefaultRecipeProvider() { + StackInfo.addSource( this ); + } + + private final Slot[] shapelessCraftingSlots = new ItemSlot[] { new ItemSlot( 3, 3, 16, 16 ), new ItemSlot( 21, 3, 16, 16 ), new ItemSlot( 39, 3, 16, 16 ), + new ItemSlot( 3, 21, 16, 16 ), new ItemSlot( 21, 21, 16, 16 ), new ItemSlot( 39, 21, 16, 16 ), new ItemSlot( 3, 39, 16, 16 ), + new ItemSlot( 21, 39, 16, 16 ), new ItemSlot( 39, 39, 16, 16 ), new ItemSlot( 59, 21, 16, 16, true ).setSlotType( SlotType.OUTPUT_SLOT ), }; + + private final Slot[] craftingSlotsOwnBackground = new ItemSlot[] { new ItemSlot( 3, 3, 16, 16 ).drawOwnBackground(), + new ItemSlot( 21, 3, 16, 16 ).drawOwnBackground(), new ItemSlot( 39, 3, 16, 16 ).drawOwnBackground(), + new ItemSlot( 3, 21, 16, 16 ).drawOwnBackground(), new ItemSlot( 21, 21, 16, 16 ).drawOwnBackground(), + new ItemSlot( 39, 21, 16, 16 ).drawOwnBackground(), new ItemSlot( 3, 39, 16, 16 ).drawOwnBackground(), + new ItemSlot( 21, 39, 16, 16 ).drawOwnBackground(), new ItemSlot( 39, 39, 16, 16 ).drawOwnBackground(), + new ItemSlot( 59, 21, 16, 16, true ).setSlotType( SlotType.OUTPUT_SLOT ).drawOwnBackground(), }; + + private final Slot[] smallCraftingSlotsOwnBackground = new ItemSlot[] { new ItemSlot( 12, 12, 16, 16 ).drawOwnBackground(), + new ItemSlot( 30, 12, 16, 16 ).drawOwnBackground(), new ItemSlot( 12, 30, 16, 16 ).drawOwnBackground(), + new ItemSlot( 30, 30, 16, 16 ).drawOwnBackground(), new ItemSlot( 59, 21, 16, 16, true ).setSlotType( SlotType.OUTPUT_SLOT ).drawOwnBackground(), }; + + private final Slot[] craftingSlots = new ItemSlot[] { new ItemSlot( 3, 3, 16, 16 ), new ItemSlot( 21, 3, 16, 16 ), new ItemSlot( 39, 3, 16, 16 ), + new ItemSlot( 3, 21, 16, 16 ), new ItemSlot( 21, 21, 16, 16 ), new ItemSlot( 39, 21, 16, 16 ), new ItemSlot( 3, 39, 16, 16 ), + new ItemSlot( 21, 39, 16, 16 ), new ItemSlot( 39, 39, 16, 16 ), new ItemSlot( 59, 21, 16, 16, true ).setSlotType( SlotType.OUTPUT_SLOT ), }; + + private final Slot[] smallCraftingSlots = new ItemSlot[] { new ItemSlot( 12, 12, 16, 16 ), new ItemSlot( 30, 12, 16, 16 ), new ItemSlot( 12, 30, 16, 16 ), + new ItemSlot( 30, 30, 16, 16 ), new ItemSlot( 59, 21, 16, 16, true ).setSlotType( SlotType.OUTPUT_SLOT ), }; + + private final Slot[] furnaceSlots = new ItemSlot[] { new ItemSlot( 13, 21, 16, 16 ), + new ItemSlot( 50, 21, 16, 16, true ).setSlotType( SlotType.OUTPUT_SLOT ), }; + + @Override + public void generateRecipes(RecipeGenerator generator) + { + RecipeTemplate craftingTemplate; + RecipeTemplate smallCraftingTemplate; + + if ( CraftGuide.newerBackgroundStyle ) + { + craftingTemplate = generator.createRecipeTemplate( craftingSlotsOwnBackground, null ); + smallCraftingTemplate = generator.createRecipeTemplate( smallCraftingSlotsOwnBackground, null ); + } + else + { + craftingTemplate = new DefaultRecipeTemplate( craftingSlots, RecipeGeneratorImplementation.workbench, new TextureClip( + DynamicTexture.instance( "recipe_backgrounds" ), 1, 1, 79, 58 ), new TextureClip( DynamicTexture.instance( "recipe_backgrounds" ), 82, 1, + 79, 58 ) ); + + smallCraftingTemplate = new DefaultRecipeTemplate( smallCraftingSlots, RecipeGeneratorImplementation.workbench, new TextureClip( + DynamicTexture.instance( "recipe_backgrounds" ), 1, 61, 79, 58 ), new TextureClip( DynamicTexture.instance( "recipe_backgrounds" ), 82, 61, + 79, 58 ) ); + } + + RecipeTemplate shapelessTemplate = new DefaultRecipeTemplate( shapelessCraftingSlots, RecipeGeneratorImplementation.workbench, new TextureClip( + DynamicTexture.instance( "recipe_backgrounds" ), 1, 121, 79, 58 ), new TextureClip( DynamicTexture.instance( "recipe_backgrounds" ), 82, 121, + 79, 58 ) ); + + RecipeTemplate furnaceTemplate = new DefaultRecipeTemplate( furnaceSlots, new ItemStack( Blocks.furnace ), new TextureClip( + DynamicTexture.instance( "recipe_backgrounds" ), 1, 181, 79, 58 ), new TextureClip( DynamicTexture.instance( "recipe_backgrounds" ), 82, 181, + 79, 58 ) ); + + addCraftingRecipes( craftingTemplate, smallCraftingTemplate, shapelessTemplate, generator ); + addFurnaceRecipes( furnaceTemplate, generator ); + } + + private void addFurnaceRecipes(RecipeTemplate template, RecipeGenerator generator) + { + Map furnaceRecipes = FurnaceRecipes.smelting().getSmeltingList(); + + for (Entry entry : furnaceRecipes.entrySet()) + { + ItemStack input = entry.getKey(); + if ( input.getItemDamage() == 32767 && input.getItem().getHasSubtypes() ) + { + List items = new ArrayList(); + input.getItem().getSubItems( input.getItem(), null, items ); + + for (ItemStack subItem : items) + { + generator.addRecipe( template, new Object[] { subItem, entry.getValue() } ); + } + } + else + { + generator.addRecipe( template, new Object[] { entry.getKey(), entry.getValue() } ); + } + } + } + + private void addCraftingRecipes(RecipeTemplate template, RecipeTemplate templateSmall, RecipeTemplate templateShapeless, RecipeGenerator generator) + { + List recipes = CraftingManager.getInstance().getRecipeList(); + + int errCount = 0; + + for (Object o : recipes) + { + try + { + IRecipe recipe = (IRecipe) o; + + Object[] items = generator.getCraftingRecipe( recipe, true ); + + if ( items == null ) + { + continue; + } + else if ( items.length == 5 ) + { + generator.addRecipe( templateSmall, items ); + } + else if ( isShapelessRecipe( recipe ) ) + { + generator.addRecipe( templateShapeless, items ); + } + else + { + generator.addRecipe( template, items ); + } + } + catch (Exception e) + { + if ( errCount == -1 ) + { + } + else if ( errCount++ >= 5 ) + { + CraftGuideLog + .log( "CraftGuide DefaultRecipeProvider: Stack trace limit reached, further stack traces from this invocation will not be logged to the console. They will still be logged to (.minecraft)/config/CraftGuide/CraftGuide.log", + true ); + errCount = -1; + } + else + { + e.printStackTrace(); + } + + CraftGuideLog.log( e ); + } + } + } + + private boolean isShapelessRecipe(IRecipe recipe) + { + return recipe instanceof ShapelessRecipes + || (RecipeGeneratorImplementation.forgeExt != null && RecipeGeneratorImplementation.forgeExt.isShapelessRecipe( recipe )); + } + + @Override + public String getInfo(ItemStack itemStack) + { + int fuel = TileEntityFurnace.getItemBurnTime( itemStack ); + + if ( fuel > 0 ) + { + double value = fuel / 200.0; + int round = (int) value; + int dec = (int) ((value - round) * 100); + + StringBuilder builder = new StringBuilder( "\u00a77Can fuel " ); + builder.append( round ); + + if ( dec > 0 ) + { + builder.append( '.' ); + + if ( dec < 10 ) + { + builder.append( '0' ); + } + + builder.append( dec ); + } + + builder.append( " furnace operations" ); + return builder.toString(); + } + else + { + return null; + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/recipes/ExtendedWorkbench.java b/src/api/java/uristqwerty/CraftGuide/recipes/ExtendedWorkbench.java new file mode 100644 index 000000000..1224c9f84 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/recipes/ExtendedWorkbench.java @@ -0,0 +1,137 @@ +package uristqwerty.CraftGuide.recipes; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import uristqwerty.CraftGuide.api.CraftGuideAPIObject; +import uristqwerty.CraftGuide.api.ItemSlot; +import uristqwerty.CraftGuide.api.RecipeGenerator; +import uristqwerty.CraftGuide.api.RecipeProvider; +import uristqwerty.CraftGuide.api.RecipeTemplate; +import uristqwerty.CraftGuide.api.Slot; +import uristqwerty.CraftGuide.api.SlotType; + +public class ExtendedWorkbench extends CraftGuideAPIObject implements RecipeProvider +{ + private static ItemStack workbenchStack = new ItemStack(Blocks.crafting_table, 1, 1); + + @Override + public void generateRecipes(RecipeGenerator generator) + { + try + { + Class craftingManagerClass = Class.forName("naruto1310.extendedWorkbench.ExtendedCraftingManager"); + Object craftingManager = craftingManagerClass.getMethod("getInstance").invoke(null); + addRecipes(generator, (List)craftingManagerClass.getMethod("getRecipeList").invoke(craftingManager)); + } + catch(IllegalArgumentException e) + { + e.printStackTrace(); + } + catch(SecurityException e) + { + e.printStackTrace(); + } + catch(IllegalAccessException e) + { + e.printStackTrace(); + } + catch(InvocationTargetException e) + { + e.printStackTrace(); + } + catch(NoSuchMethodException e) + { + e.printStackTrace(); + } + catch(ClassNotFoundException e) + { + e.printStackTrace(); + } + catch(NoSuchFieldException e) + { + e.printStackTrace(); + } + } + + private void addRecipes(RecipeGenerator generator, List recipes) throws ClassNotFoundException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException + { + Class extendedShapedRecipe = Class.forName("naruto1310.extendedWorkbench.ExtendedShapedRecipes"); + Field shapedWidth = extendedShapedRecipe.getDeclaredField("recipeWidth"); + Field shapedHeight = extendedShapedRecipe.getDeclaredField("recipeHeight"); + Field shapedItems = extendedShapedRecipe.getDeclaredField("recipeItems"); + shapedWidth.setAccessible(true); + shapedHeight.setAccessible(true); + shapedItems.setAccessible(true); + + Class extendedShapelessRecipe = Class.forName("naruto1310.extendedWorkbench.ExtendedShapelessRecipes"); + Field shapelessItems = extendedShapelessRecipe.getDeclaredField("recipeItems"); + shapelessItems.setAccessible(true); + + Slot[] slots = new Slot[] { + new ItemSlot( 3, 3, 16, 16).drawOwnBackground(), + new ItemSlot(21, 3, 16, 16).drawOwnBackground(), + new ItemSlot(39, 3, 16, 16).drawOwnBackground(), + new ItemSlot( 3, 21, 16, 16).drawOwnBackground(), + new ItemSlot(21, 21, 16, 16).drawOwnBackground(), + new ItemSlot(39, 21, 16, 16).drawOwnBackground(), + new ItemSlot( 3, 39, 16, 16).drawOwnBackground(), + new ItemSlot(21, 39, 16, 16).drawOwnBackground(), + new ItemSlot(39, 39, 16, 16).drawOwnBackground(), + new ItemSlot( 3, 57, 16, 16).drawOwnBackground(), + new ItemSlot(21, 57, 16, 16).drawOwnBackground(), + new ItemSlot(39, 57, 16, 16).drawOwnBackground(), + new ItemSlot( 3, 75, 16, 16).drawOwnBackground(), + new ItemSlot(21, 75, 16, 16).drawOwnBackground(), + new ItemSlot(39, 75, 16, 16).drawOwnBackground(), + new ItemSlot( 3, 93, 16, 16).drawOwnBackground(), + new ItemSlot(21, 93, 16, 16).drawOwnBackground(), + new ItemSlot(39, 93, 16, 16).drawOwnBackground(), + new ItemSlot(59, 48, 16, 16, true).setSlotType(SlotType.OUTPUT_SLOT).drawOwnBackground(), + }; + + RecipeTemplate template = generator.createRecipeTemplate(slots, workbenchStack); + template.setSize(79, 112); + + for(IRecipe recipe: recipes) + { + Object[] recipeContents = new Object[19]; + + if(extendedShapedRecipe.isInstance(recipe)) + { + ItemStack[] items = (ItemStack[])shapedItems.get(recipe); + int height = Math.min(6, shapedHeight.getInt(recipe)); + int width = Math.min(3, shapedWidth.getInt(recipe)); + + for(int i = 0; i < height; i++) + { + for(int j = 0; j < width; j++) + { + recipeContents[i * 3 + j] = items[i * width + j]; + } + } + } + else if(extendedShapelessRecipe.isInstance(recipe)) + { + List items = (List)shapelessItems.get(recipe); + + for(int i = 0; i < Math.min(18, items.size()); i++) + { + recipeContents[i] = items.get(i); + } + } + else + { + continue; + } + + recipeContents[18] = recipe.getRecipeOutput(); + + generator.addRecipe(template, recipeContents); + } + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/server/CraftGuideServer.java b/src/api/java/uristqwerty/CraftGuide/server/CraftGuideServer.java new file mode 100644 index 000000000..d00e6b924 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/server/CraftGuideServer.java @@ -0,0 +1,44 @@ +package uristqwerty.CraftGuide.server; + +import net.minecraft.entity.player.EntityPlayer; +import uristqwerty.CraftGuide.CraftGuideSide; +import uristqwerty.CraftGuide.api.Util; + +public class CraftGuideServer implements CraftGuideSide +{ + @Override + public void initKeybind() + { + } + + @Override + public void checkKeybind() + { + } + + @Override + public void preInit() + { + Util.instance = new UtilImplementationServer(); + } + + @Override + public void reloadRecipes() + { + } + + @Override + public void openGUI(EntityPlayer player) + { + } + + @Override + public void initNetworkChannels() + { + } + + @Override + public void stopTessellating() + { + } +} diff --git a/src/api/java/uristqwerty/CraftGuide/server/UtilImplementationServer.java b/src/api/java/uristqwerty/CraftGuide/server/UtilImplementationServer.java new file mode 100644 index 000000000..3a309af38 --- /dev/null +++ b/src/api/java/uristqwerty/CraftGuide/server/UtilImplementationServer.java @@ -0,0 +1,13 @@ +package uristqwerty.CraftGuide.server; + +import uristqwerty.CraftGuide.UtilImplementationCommon; +import uristqwerty.CraftGuide.api.NamedTexture; + +public class UtilImplementationServer extends UtilImplementationCommon +{ + @Override + public NamedTexture getTexture(String identifier) + { + return null; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/Color.java b/src/api/java/uristqwerty/gui_craftguide/Color.java new file mode 100644 index 000000000..c20a4f295 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/Color.java @@ -0,0 +1,14 @@ +package uristqwerty.gui_craftguide; + +public class Color +{ + public final int red, green, blue, alpha; + + public Color(int red, int green, int blue, int alpha) + { + this.red = red; + this.green = green; + this.blue = blue; + this.alpha = alpha; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/MutableRect.java b/src/api/java/uristqwerty/gui_craftguide/MutableRect.java new file mode 100644 index 000000000..e81e519f1 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/MutableRect.java @@ -0,0 +1,91 @@ +package uristqwerty.gui_craftguide; + +public class MutableRect +{ + private int x, y, width, height; + private Rect rect = null; + + public MutableRect(int x, int y, int width, int height) + { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + public MutableRect(Rect rect) + { + x = rect.x; + y = rect.y; + width = rect.width; + height = rect.height; + } + + public Rect rect() + { + if(rect == null) + { + rect = new Rect(x, y, width, height); + } + + return rect; + } + + public void setPosition(int x, int y) + { + rect = null; + this.x = x; + this.y = y; + } + + public void setSize(int width, int height) + { + rect = null; + this.width = width; + this.height = height; + } + + public void setRect(int x, int y, int width, int height) + { + rect = null; + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + public void setRect(Rect rect) + { + this.rect = null; + x = rect.x; + y = rect.y; + width = rect.width; + height = rect.height; + } + + public int x() + { + return x; + } + + public int y() + { + return y; + } + + public int width() + { + return width; + } + + public int height() + { + return height; + } + + @Override + public String toString() + { + return "(x: " + x + ", y: " + y + ", width: " + width + ", height: " + height + ")"; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/Rect.java b/src/api/java/uristqwerty/gui_craftguide/Rect.java new file mode 100644 index 000000000..9728a6a71 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/Rect.java @@ -0,0 +1,14 @@ +package uristqwerty.gui_craftguide; + +public class Rect +{ + public final int x, y, width, height; + + public Rect(int x, int y, int width, int height) + { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/components/Button.java b/src/api/java/uristqwerty/gui_craftguide/components/Button.java new file mode 100644 index 000000000..2fd16dde5 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/components/Button.java @@ -0,0 +1,95 @@ +package uristqwerty.gui_craftguide.components; + +import java.util.EnumMap; + +import uristqwerty.gui_craftguide.Rect; +import uristqwerty.gui_craftguide.editor.GuiElementMeta; +import uristqwerty.gui_craftguide.editor.GuiElementMeta.EnumMapProperty; +import uristqwerty.gui_craftguide.editor.GuiElementMeta.GuiElementProperty; +import uristqwerty.gui_craftguide.texture.Texture; + +@GuiElementMeta(name = "button") +public class Button extends GuiElement +{ + enum ButtonState + { + UP, + DOWN, + MOUSEOVER, + DOWN_MOUSEOUT, + } + + @GuiElementProperty(name = "states") + @EnumMapProperty(keyType = ButtonState.class, valueType = Texture.class) + public EnumMap stateBackgrounds = new EnumMap(ButtonState.class); + + private ButtonState currentState; + + public Button(int x, int y, int width, int height) + { + this(new Rect(x, y, width, height)); + } + + public Button(int x, int y, int width, int height, String template) + { + this(new Rect(x, y, width, height), template); + } + + public Button(Rect rect) + { + this(rect, "button-default"); + } + + public Button(Rect rect, String template) + { + super(rect, template); + } + + @Override + public void mouseMoved(int x, int y) + { + if(containsPoint(x, y)) + { + if(currentState == ButtonState.UP) + { + currentState = ButtonState.MOUSEOVER; + } + else if(currentState == ButtonState.DOWN_MOUSEOUT) + { + currentState = ButtonState.DOWN; + } + } + else + { + if(currentState == ButtonState.MOUSEOVER) + { + currentState = ButtonState.UP; + } + else if(currentState == ButtonState.DOWN) + { + currentState = ButtonState.DOWN_MOUSEOUT; + } + } + + super.mouseMoved(x, y); + } + + @Override + public void mouseReleased(int x, int y) + { + currentState = ButtonState.UP; + super.mouseReleased(x, y); + } + + @Override + public void drawBackground() + { + super.drawBackground(); + + Texture texture = stateBackgrounds.get(currentState); + if(texture != null) + { + render(texture, 0, 0, bounds.width(), bounds.height()); + } + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/components/DropdownSelector.java b/src/api/java/uristqwerty/gui_craftguide/components/DropdownSelector.java new file mode 100644 index 000000000..d8af4de7c --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/components/DropdownSelector.java @@ -0,0 +1,114 @@ +package uristqwerty.gui_craftguide.components; + +import java.util.Arrays; + +import uristqwerty.gui_craftguide.components.Window.Layer; +import uristqwerty.gui_craftguide.minecraft.Text; +import uristqwerty.gui_craftguide.texture.BorderedTexture; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.SubTexture; +import uristqwerty.gui_craftguide.texture.Texture; +import uristqwerty.gui_craftguide.texture.TextureClip; + +public class DropdownSelector extends GuiElement +{ + private boolean open = false; + private String[] options; + private int selected = -1; + private String selection = null; + + private Text selectedText = new Text(0, 0, ""); + private ScrollPane selectionPane; + + public DropdownSelector(int x, int y, int width, int height) + { + super(x, y, width, height); + selectionPane = new ScrollPane(x, y + height, width, 100); + + Texture texture = DynamicTexture.instance("base_image"); + selectionPane.background = new BorderedTexture( + new Texture[]{ + new TextureClip(texture, 1, 1, 4, 4), + new SubTexture(texture, 6, 1, 64, 4), + new TextureClip(texture, 71, 1, 4, 4), + new SubTexture(texture, 1, 6, 4, 64), + new SubTexture(texture, 6, 6, 64, 64), + new SubTexture(texture, 71, 6, 4, 64), + new TextureClip(texture, 1, 71, 4, 4), + new SubTexture(texture, 6, 71, 64, 4), + new TextureClip(texture, 71, 71, 4, 4), + }, 4); + } + + @Override + public void mousePressed(int x, int y) + { + if(open && !popupContainsPoint(x, y)) + { + open = false; + getLayer(Layer.POPUP).removeElement(selectionPane); + } + + super.mousePressed(x, y); + } + + @Override + public void elementClicked(int x, int y) + { + if(!open) + { + open = true; + getLayer(Layer.POPUP).addElement(selectionPane); + } + + super.elementClicked(x, y); + } + + private boolean popupContainsPoint(int x, int y) + { + // TODO Auto-generated method stub + return false; + } + + public void setOptions(String[] list) + { + selected = -1; + options = Arrays.copyOf(list, list.length); + + for(int i = 0; i < options.length; i++) + { + if(options[i].equals(selection)) + { + selected = i; + break; + } + } + + if(selected == -1) + { + selection = null; + } + } + + public String getCurrentSelection() + { + return selection; + } + + @Override + public void draw() + { + if(open) + { + selectionPane.setPositionAbsolute(this.absoluteX(), this.absoluteY() + bounds.height()); + } + + if(selection != null) + { + selectedText.setText(selection); + render(selectedText); + } + + super.draw(); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/components/GuiElement.java b/src/api/java/uristqwerty/gui_craftguide/components/GuiElement.java new file mode 100644 index 000000000..334374466 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/components/GuiElement.java @@ -0,0 +1,428 @@ +package uristqwerty.gui_craftguide.components; + +import java.lang.reflect.Field; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import uristqwerty.CraftGuide.CraftGuideLog; +import uristqwerty.gui_craftguide.MutableRect; +import uristqwerty.gui_craftguide.Rect; +import uristqwerty.gui_craftguide.editor.GuiElementMeta.GuiElementProperty; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.texture.Texture; + +public class GuiElement +{ + protected MutableRect bounds; + + @GuiElementProperty(name = "background") + public Texture background = null; + + private GuiElement parent = null; + private List children = new LinkedList(); + + public enum AnchorPoint + { + TOP_LEFT, + TOP_RIGHT, + BOTTOM_LEFT, + BOTTOM_RIGHT, + } + + private AnchorPoint anchorTL = AnchorPoint.TOP_LEFT; + private AnchorPoint anchorBR = AnchorPoint.TOP_LEFT; + + private boolean clickable = true; + + public GuiElement(int x, int y, int width, int height) + { + bounds = new MutableRect(x, y, width, height); + } + + public GuiElement(Rect bounds) + { + this.bounds = new MutableRect(bounds); + } + + public GuiElement(Rect bounds, String template) + { + this.bounds = new MutableRect(bounds); + applyTemplate(template); + } + + public GuiElement getLayer(Window.Layer layer) + { + if(parent != null) + { + return parent.getLayer(layer); + } + else + { + return null; + } + } + + public GuiElement getElementAtPoint(int x, int y) + { + if(!containsPoint(x, y)) + { + return null; + } + + GuiElement clicked = clickable? this : null; + + for(GuiElement child: children) + { + GuiElement element = child.getElementAtPoint(x - bounds.x(), y - bounds.y()); + + if(element != null) + { + clicked = element; + } + } + + return clicked; + } + + private void applyTemplate(String template) + { + for(Field field: this.getClass().getFields()) + { + GuiElementProperty property = field.getAnnotation(GuiElementProperty.class); + if(property != null) + { + try + { + CraftGuideLog.log("Annotated property '" + property.name() + "', field '" + field.getName() + "', currentValue '" + field.get(this) + "'", true); + } + catch(IllegalArgumentException e) + { + e.printStackTrace(); + } + catch(IllegalAccessException e) + { + e.printStackTrace(); + } + } + } + Map values = getTemplate(template); + + if(values != null) + { + /* + //GuiElementMeta meta = this.getClass().getAnnotation(GuiElementMeta.class); + + for(Field field: this.getClass().getFields()) + { + GuiElementProperty property = field.getAnnotation(GuiElementProperty.class); + + if(property != null) + { + if(values.containsKey(property.name())) + { + + } + else + { + if() + { + + } + } + } + }*/ + } + } + + private Map getTemplate(String template) + { + if(template.equalsIgnoreCase("")) + { + + } + + return null; + } + + public GuiElement addElement(GuiElement element) + { + element.parent = this; + children.add(element); + + return this; + } + + public void removeElement(GuiElement element) + { + element.parent = null; + children.remove(element); + } + + public void update() + { + for(GuiElement element: children) + { + element.update(); + } + } + + public void draw() + { + drawBackground(); + drawChildren(); + } + + public void drawChildren() + { + for(GuiElement element: children) + { + element.draw(); + } + } + + public void drawBackground() + { + if(background != null) + { + render(background, 0, 0, bounds.width(), bounds.height()); + } + } + + public void mouseMoved(int x, int y) + { + for(GuiElement element: children) + { + element.mouseMoved(x - bounds.x(), y - bounds.y()); + } + } + + public void mousePressed(int x, int y) + { + for(GuiElement element: children) + { + element.mousePressed(x - bounds.x(), y - bounds.y()); + } + } + + public void mouseReleased(int x, int y) + { + for(GuiElement element: children) + { + element.mouseReleased(x - bounds.x(), y - bounds.y()); + } + } + + public void render(Renderable renderable) + { + render(renderable, 0, 0); + } + + public void render(Texture texture, int x, int y, int width, int height) + { + if(parent != null && texture != null && width > 0 && height > 0) + { + parent.render(texture, x + bounds.x(), y + bounds.y(), width, height); + } + } + + public void render(Renderable renderable, int xOffset, int yOffset) + { + if(parent != null && renderable != null) + { + parent.render(renderable, xOffset + bounds.x(), yOffset + bounds.y()); + } + } + + public boolean containsPoint(int x, int y) + { + return x >= bounds.x() + && x < bounds.x() + bounds.width() + && y >= bounds.y() + && y < bounds.y() + bounds.height(); + } + + public GuiElement setSize(int width, int height) + { + if(width != bounds.width() || height != bounds.height()) + { + int oldWidth = bounds.width(); + int oldHeight = bounds.height(); + + bounds.setSize(width, height); + onResize(oldWidth, oldHeight); + + for(GuiElement element: children) + { + element.onParentResize(oldWidth, oldHeight, width, height); + } + } + + return this; + } + + public void onParentResize(int oldWidth, int oldHeight, int newWidth, int newHeight) + { + int x1 = bounds.x(); + int y1 = bounds.y(); + int x2 = bounds.x() + bounds.width(); + int y2 = bounds.y() + bounds.height(); + + if(anchorTL == AnchorPoint.TOP_RIGHT || anchorTL == AnchorPoint.BOTTOM_RIGHT) + { + x1 += newWidth - oldWidth; + } + + if(anchorTL == AnchorPoint.BOTTOM_LEFT || anchorTL == AnchorPoint.BOTTOM_RIGHT) + { + y1 += newHeight - oldHeight; + } + + if(anchorBR == AnchorPoint.TOP_RIGHT || anchorBR == AnchorPoint.BOTTOM_RIGHT) + { + x2 += newWidth - oldWidth; + } + + if(anchorBR == AnchorPoint.BOTTOM_LEFT || anchorBR == AnchorPoint.BOTTOM_RIGHT) + { + y2 += newHeight - oldHeight; + } + + if(x1 != bounds.x() || y1 != bounds.y()) + { + setPosition(x1, y1); + } + + if(x2 - x1 != bounds.width() || y2 - y1 != bounds.height()) + { + setSize(x2 - x1, y2 - y1); + } + } + + public GuiElement setPosition(int x, int y) + { + if(x == bounds.x() && y == bounds.y()) + { + return this; + } + + bounds.setPosition(x, y); + + onMove(); + + for(GuiElement element: children) + { + element.onParentMove(); + } + + return this; + } + + public GuiElement setPositionAbsolute(int x, int y) + { + return setPosition(x - absoluteX() + bounds.x(), y - absoluteY() + bounds.y()); + } + + public GuiElement anchor(AnchorPoint topLeft, AnchorPoint bottomRight) + { + anchorTL = topLeft; + anchorBR = bottomRight; + + return this; + } + + public GuiElement anchor(AnchorPoint point) + { + return anchor(point, point); + } + + public int absoluteX() + { + if(parent == null) + { + return bounds.x(); + } + else + { + return parent.absoluteX() + bounds.x(); + } + } + + public int absoluteY() + { + if(parent == null) + { + return bounds.y(); + } + else + { + return parent.absoluteY() + bounds.y(); + } + } + + public void onKeyTyped(char eventChar, int eventKey) + { + for(GuiElement element: children) + { + element.onKeyTyped(eventChar, eventKey); + } + } + + public void scrollWheelTurned(int change) + { + for(GuiElement element: children) + { + element.scrollWheelTurned(change); + } + } + + public void onGuiClosed() + { + for(GuiElement element: children) + { + element.onGuiClosed(); + } + } + + public GuiElement setClickable(boolean clickable) + { + this.clickable = clickable; + return this; + } + + public GuiElement setBackground(Texture background) + { + this.background = background; + return this; + } + + public int width() + { + return bounds.width(); + } + + public int height() + { + return bounds.height(); + } + + public void onResize(int oldWidth, int oldHeight) + { + /** Default implementation: Do nothing */ + } + + public void onParentMove() + { + /** Default implementation: Do nothing */ + } + + public void onMove() + { + /** Default implementation: Do nothing */ + } + + public void elementClicked(int x, int y) + { + /** Default implementation: Do nothing */ + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/components/Image.java b/src/api/java/uristqwerty/gui_craftguide/components/Image.java new file mode 100644 index 000000000..892a58a82 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/components/Image.java @@ -0,0 +1,24 @@ +package uristqwerty.gui_craftguide.components; + +import uristqwerty.gui_craftguide.rendering.TexturedRect; +import uristqwerty.gui_craftguide.texture.Texture; + +public class Image extends GuiElement +{ + private TexturedRect image; + + public Image(int x, int y, int width, int height, Texture texture, int u, int v) + { + super(x, y, width, height); + + image = new TexturedRect(0, 0, width, height, texture, u, v); + } + + @Override + public void draw() + { + render(image); + + super.draw(); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/components/ScrollBar.java b/src/api/java/uristqwerty/gui_craftguide/components/ScrollBar.java new file mode 100644 index 000000000..391b64492 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/components/ScrollBar.java @@ -0,0 +1,10 @@ +package uristqwerty.gui_craftguide.components; + +public class ScrollBar extends GuiElement +{ + public ScrollBar(int x, int y, int width, int height) + { + super(x, y, width, height); + // TODO Auto-generated constructor stub + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/components/ScrollPane.java b/src/api/java/uristqwerty/gui_craftguide/components/ScrollPane.java new file mode 100644 index 000000000..cfef9a64c --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/components/ScrollPane.java @@ -0,0 +1,13 @@ +package uristqwerty.gui_craftguide.components; + +public class ScrollPane extends GuiElement +{ + //private ScrollBar scrollbar; + + public ScrollPane(int x, int y, int width, int height) + { + super(x, y, width, height); + + + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/components/Slider.java b/src/api/java/uristqwerty/gui_craftguide/components/Slider.java new file mode 100644 index 000000000..a2ecf0bb6 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/components/Slider.java @@ -0,0 +1,10 @@ +package uristqwerty.gui_craftguide.components; + +public class Slider extends GuiElement +{ + public Slider(int x, int y, int width, int height) + { + super(x, y, width, height); + // TODO Auto-generated constructor stub + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/components/Window.java b/src/api/java/uristqwerty/gui_craftguide/components/Window.java new file mode 100644 index 000000000..035dfe2dc --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/components/Window.java @@ -0,0 +1,177 @@ +package uristqwerty.gui_craftguide.components; + +import java.util.EnumMap; +import java.util.Map; + +import uristqwerty.CraftGuide.client.ui.GuiRenderer; +import uristqwerty.gui_craftguide.Rect; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.texture.Texture; + +public class Window extends GuiElement +{ + public enum Layer + { + MAIN, + POPUP, + TOOLTIP, + } + + private GuiRenderer renderer; + private boolean mousePressed; + private Map layers = new EnumMap(Layer.class); + + private int lastMouseX, lastMouseY; + private int centerX, centerY; + private int maxWidth, maxHeight; + private boolean centred = false; + + public Window(int x, int y, int width, int height, GuiRenderer renderer) + { + super(x, y, width, height); + + this.renderer = renderer; + } + + public void centerOn(int centerX, int centerY) + { + centred = true; + this.centerX = centerX; + this.centerY = centerY; + setPosition(centerX - (bounds.width() / 2), centerY - (bounds.height() / 2)); + } + + @Override + public void render(Renderable renderable, int xOffset, int yOffset) + { + renderer.render(renderable, xOffset + bounds.x(), yOffset + bounds.y()); + } + + @Override + public void render(Texture texture, int x, int y, int width, int height) + { + texture.renderRect(renderer, x + bounds.x(), y + bounds.y(), width, height, 0, 0); + } + + public void updateMouse(int x, int y) + { + if(x != lastMouseX || y != lastMouseY) + { + mouseMoved(x, y); + lastMouseX = x; + lastMouseY = y; + } + } + + public void updateMouseState(int x, int y, boolean buttonState) + { + if(mousePressed != buttonState) + { + mousePressed = buttonState; + + if(buttonState) + { + mousePressed(x, y); + GuiElement element = getElementAtPoint(x, y); + + if(element != null) + { + element.elementClicked(x - element.absoluteX(), y - element.absoluteY()); + } + } + else + { + mouseReleased(x, y); + } + } + } + + @Override + public void mousePressed(int x, int y) + { + getLayer(Layer.MAIN).mousePressed(x - bounds.x(), y - bounds.y()); + getLayer(Layer.POPUP).mousePressed(x - bounds.x(), y - bounds.y()); + } + + @Override + public void draw() + { + drawBackground(); + getLayer(Layer.MAIN).draw(); + getLayer(Layer.POPUP).draw(); + getLayer(Layer.TOOLTIP).draw(); + } + + @Override + public GuiElement getElementAtPoint(int x, int y) + { + GuiElement element = null; + + element = getLayer(Layer.POPUP).getElementAtPoint(x - bounds.x(), y - bounds.y()); + + if(element == null) + { + element = getLayer(Layer.MAIN).getElementAtPoint(x - bounds.x(), y - bounds.y()); + } + + return element; + } + + public void setMaxSize(int width, int height) + { + maxWidth = width; + maxHeight = height; + + if(bounds.width() > width || bounds.height() > height) + { + setSize(Math.min(bounds.width(), width), Math.min(bounds.height(), height)); + } + } + + @Override + public GuiElement getLayer(Layer layer) + { + GuiElement element = layers.get(layer); + + if(element == null) + { + element = new GuiElement(new Rect(0, 0, bounds.width(), bounds.height())) + .anchor(AnchorPoint.TOP_LEFT, AnchorPoint.BOTTOM_RIGHT) + .setClickable(false); + layers.put(layer, element); + super.addElement(element); + } + + return element; + } + + @Override + public GuiElement addElement(GuiElement element) + { + addElement(element, Layer.MAIN); + return this; + } + + @Override + public GuiElement setSize(int width, int height) + { + super.setSize(Math.min(width, maxWidth), Math.min(height, maxHeight)); + + if(isCentred()) + { + setPosition(centerX - bounds.width() / 2, centerY - bounds.height() / 2); + } + + return this; + } + + private void addElement(GuiElement element, Layer layer) + { + getLayer(layer).addElement(element); + } + + public boolean isCentred() + { + return centred; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/editor/Editor.java b/src/api/java/uristqwerty/gui_craftguide/editor/Editor.java new file mode 100644 index 000000000..6c23064a7 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/editor/Editor.java @@ -0,0 +1,21 @@ +package uristqwerty.gui_craftguide.editor; + +import java.util.HashMap; +import java.util.Map; + +import uristqwerty.gui_craftguide.components.GuiElement; + +public class Editor +{ + public static Map> components = new HashMap>(); + + public static void registerComponent(Class component) + { + GuiElementMeta meta = component.getAnnotation(GuiElementMeta.class); + + if(meta != null) + { + components.put(meta.name(), component); + } + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/editor/EditorGui.java b/src/api/java/uristqwerty/gui_craftguide/editor/EditorGui.java new file mode 100644 index 000000000..5a6df4e86 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/editor/EditorGui.java @@ -0,0 +1,51 @@ +package uristqwerty.gui_craftguide.editor; + +import uristqwerty.gui_craftguide.components.DropdownSelector; +import uristqwerty.gui_craftguide.components.Image; +import uristqwerty.gui_craftguide.minecraft.Gui; +import uristqwerty.gui_craftguide.texture.BorderedTexture; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.SubTexture; +import uristqwerty.gui_craftguide.texture.Texture; +import uristqwerty.gui_craftguide.texture.TextureClip; + +public class EditorGui extends Gui +{ + public TextureDisplay textureDisplay; + public TextureProperties textureProperties; + + public EditorGui(int windowWidth, int windowHeight) + { + super(windowWidth, windowHeight); + + textureDisplay = new TextureDisplay(windowWidth / 3, 20, windowWidth * 2 / 3 - 20, windowHeight - 40); + textureProperties = new TextureProperties(20, 20, windowWidth / 3 - 40, windowHeight - 40); + + setupGui(); + } + + private void setupGui() + { + Texture texture = DynamicTexture.instance("base_image"); + textureProperties.addElement( + new Image(0, 0, textureProperties.width(), textureProperties.height(), + new BorderedTexture( + new Texture[]{ + new TextureClip(texture, 1, 1, 4, 4), + new SubTexture(texture, 6, 1, 64, 4), + new TextureClip(texture, 71, 1, 4, 4), + new SubTexture(texture, 1, 6, 4, 64), + new SubTexture(texture, 6, 6, 64, 64), + new SubTexture(texture, 71, 6, 4, 64), + new TextureClip(texture, 1, 71, 4, 4), + new SubTexture(texture, 6, 71, 64, 4), + new TextureClip(texture, 71, 71, 4, 4), + }, 4), + 0, 0)); + + textureProperties.addElement(new DropdownSelector(10, 10, 60, 20)); + + guiWindow.addElement(textureProperties); + guiWindow.addElement(textureDisplay); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/editor/GuiElementMeta.java b/src/api/java/uristqwerty/gui_craftguide/editor/GuiElementMeta.java new file mode 100644 index 000000000..0c87e6e89 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/editor/GuiElementMeta.java @@ -0,0 +1,33 @@ +package uristqwerty.gui_craftguide.editor; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface GuiElementMeta +{ + public String name(); + + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.FIELD}) + public @interface GuiElementProperty + { + /** + * The name of this property, as seen in the in-game editor + * and as used when a template is being read from a file or + * written to a file. + */ + public String name(); + + public boolean required() default false; + } + + public @interface EnumMapProperty + { + public Class keyType(); + public Class valueType(); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/editor/TextureDisplay.java b/src/api/java/uristqwerty/gui_craftguide/editor/TextureDisplay.java new file mode 100644 index 000000000..bf4bfbb4a --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/editor/TextureDisplay.java @@ -0,0 +1,55 @@ +package uristqwerty.gui_craftguide.editor; + +import uristqwerty.gui_craftguide.Rect; +import uristqwerty.gui_craftguide.components.GuiElement; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.RendererBase; +import uristqwerty.gui_craftguide.texture.Texture; + +public class TextureDisplay extends GuiElement implements Renderable +{ + private Texture currentTexture; + private Rect textureSize; + + public TextureDisplay(int x, int y, int width, int height) + { + super(x, y, width, height); + textureSize = bounds.rect(); + } + + public TextureDisplay(Rect rect) + { + super(rect); + textureSize = rect; + } + + @Override + public void draw() + { + render(this); + super.draw(); + } + + public void setTexture(Texture texture, Rect size) + { + currentTexture = texture; + textureSize = size; + } + + @Override + public void render(RendererBase renderer, int x, int y) + { + if(currentTexture != null && textureSize != null) + { + renderer.setAlpha(127); + renderer.drawTexturedRect(currentTexture, + x, y, bounds.width(), bounds.height(), + (textureSize.width - bounds.width()) / 2, (textureSize.height - bounds.height()) / 2); + + renderer.setAlpha(256); + renderer.drawTexturedRect(currentTexture, + x + (bounds.width() - textureSize.width) / 2, y + (bounds.height() - textureSize.height) / 2, + textureSize.width, textureSize.height, 0, 0); + } + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/editor/TextureMeta.java b/src/api/java/uristqwerty/gui_craftguide/editor/TextureMeta.java new file mode 100644 index 000000000..e65cc2ccc --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/editor/TextureMeta.java @@ -0,0 +1,26 @@ +package uristqwerty.gui_craftguide.editor; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface TextureMeta +{ + public String name(); + + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.FIELD}) + public @interface TextureParameter + { + } + + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.FIELD}) + public @interface ListSize + { + public int value(); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/editor/TextureProperties.java b/src/api/java/uristqwerty/gui_craftguide/editor/TextureProperties.java new file mode 100644 index 000000000..991969f57 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/editor/TextureProperties.java @@ -0,0 +1,11 @@ +package uristqwerty.gui_craftguide.editor; + +import uristqwerty.gui_craftguide.components.GuiElement; + +public class TextureProperties extends GuiElement +{ + public TextureProperties(int x, int y, int width, int height) + { + super(x, y, width, height); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/minecraft/Gui.java b/src/api/java/uristqwerty/gui_craftguide/minecraft/Gui.java new file mode 100644 index 000000000..910751d25 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/minecraft/Gui.java @@ -0,0 +1,121 @@ +package uristqwerty.gui_craftguide.minecraft; + + +import net.minecraft.client.gui.GuiScreen; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +import uristqwerty.CraftGuide.client.ui.GuiRenderer; +import uristqwerty.CraftGuide.client.ui.GuiTextInput; +import uristqwerty.gui_craftguide.components.Window; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class Gui extends GuiScreen +{ + protected GuiRenderer renderer = (GuiRenderer)RendererBase.instance; + protected Window guiWindow; + private boolean firstFrame = false; + + public Gui(int windowWidth, int windowHeight) + { + super(); + + guiWindow = new Window(0, 0, windowWidth, windowHeight, renderer); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) + { + guiWindow.setMaxSize(width, height); + guiWindow.update(); + + if(doesGuiPauseGame()) + { + drawDefaultBackground(); + } + + renderer.startFrame(this); + guiWindow.draw(); + renderer.endFrame(); + firstFrame = false; + } + + @Override + protected void keyTyped(char eventChar, int eventKey) + { + super.keyTyped(eventChar, eventKey); + + if(GuiTextInput.inFocus != null) + { + if(!firstFrame) + { + GuiTextInput.inFocus.onKeyTyped(eventChar, eventKey); + } + } + else if(eventKey == Keyboard.KEY_ESCAPE || eventKey == mc.gameSettings.keyBindInventory.getKeyCode()) + { + mc.thePlayer.closeScreen(); + } + else + { + guiWindow.onKeyTyped(eventChar, eventKey); + } + } + + @Override + public void handleMouseInput() + { + int x = (Mouse.getEventX() * width) / mc.displayWidth; + int y = height - (Mouse.getEventY() * height) / mc.displayHeight - 1; + + if(Mouse.getEventButton() == 0) + { + guiWindow.updateMouseState(x, y, Mouse.getEventButtonState()); + } + else if(Mouse.getEventButton() == -1) + { + guiWindow.updateMouse(x, y); + } + + if(Mouse.getEventDWheel() != 0) + { + guiWindow.scrollWheelTurned(Mouse.getEventDWheel() > 0? -mouseWheelRate() : mouseWheelRate()); + } + } + + @Override + public void handleKeyboardInput() + { + if(Keyboard.getEventKeyState()) + { + if(Keyboard.getEventKey() == Keyboard.KEY_F11) + { + mc.toggleFullscreen(); + return; + } + else + { + keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); + } + } + } + + public int mouseWheelRate() + { + return 1; + } + + @Override + public void onGuiClosed() + { + guiWindow.onGuiClosed(); + } + + @Override + public void initGui() + { + super.initGui(); + firstFrame = true; + } +} \ No newline at end of file diff --git a/src/api/java/uristqwerty/gui_craftguide/minecraft/Image.java b/src/api/java/uristqwerty/gui_craftguide/minecraft/Image.java new file mode 100644 index 000000000..8dfdce6ec --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/minecraft/Image.java @@ -0,0 +1,202 @@ +package uristqwerty.gui_craftguide.minecraft; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import javax.imageio.ImageIO; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.ITextureObject; +import net.minecraft.client.renderer.texture.SimpleTexture; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import uristqwerty.gui_craftguide.rendering.RendererBase; +import uristqwerty.gui_craftguide.texture.Texture; + +public class Image implements Texture +{ + private int texID; + private static Map jarCache = new HashMap(); + private static Map fileCache = new HashMap(); + private static Image err = new Image(-1); + private static boolean needsInit = true; + + public static void initJarTextures() + { + if(needsInit) + { + for(Entry entry: jarCache.entrySet()) + { + Image image = entry.getValue(); + + if(image.texID == -1) + { + ResourceLocation resourceLocation = new ResourceLocation(entry.getKey()); + ITextureObject texture = Minecraft.getMinecraft().getTextureManager().getTexture(resourceLocation); + + if(texture == null) + { + texture = new SimpleTexture(resourceLocation); + Minecraft.getMinecraft().getTextureManager().loadTexture(resourceLocation, texture); + } + + image.texID = texture.getGlTextureId(); + } + } + + needsInit = false; + } + } + + public static Image fromJar(String filename) + { + if(filename == null || filename.trim().isEmpty()) + { + return err; + } + + Image image = jarCache.get(filename); + + if(image == null) + { + image = new Image(-1); + jarCache.put(filename, image); + needsInit = true; + } + + return image; + } + + public static Image fromFile(File directory, String filename) + { + String key; + try + { + key = new File(directory, filename).getCanonicalPath(); + } + catch(IOException e) + { + e.printStackTrace(); + return null; + } + + Image image = fileCache.get(key); + + if(image == null) + { + image = new Image(-1); + fileCache.put(key, image); + } + + if(image.texID == -1) + { + image.texID = LoadImageFile(directory, filename); + } + + return image; + } + + private static int LoadImageFile(File directory, String filename) + { + try + { + int width = 4; + int height = 4; + + InputStream input = new FileInputStream(new File(directory, filename)); + BufferedImage image = ImageIO.read(input); + + while(width < image.getWidth()) + { + width *= 2; + } + + while(height < image.getHeight()) + { + height *= 2; + } + + ByteBuffer pixels = ByteBuffer.allocateDirect(width * height * 4); + + for(int y = 0; y < height; y++) + { + for(int x = 0; x < width; x++) + { + int pixel = (y * width + x) * 4; + + if(x < image.getWidth() && y < image.getHeight()) + { + int rgb = image.getRGB(x, y); + pixels.put(pixel + 0, (byte)((rgb >> 16) & 0xff)); + pixels.put(pixel + 1, (byte)((rgb >> 8) & 0xff)); + pixels.put(pixel + 2, (byte)((rgb >> 0) & 0xff)); + pixels.put(pixel + 3, (byte)((rgb >> 24) & 0xff)); + } + else + { + pixels.put(pixel + 0, (byte)0x7f); + pixels.put(pixel + 1, (byte)0x7f); + pixels.put(pixel + 2, (byte)0x7f); + pixels.put(pixel + 3, (byte)0x7f); + } + } + } + + int texID = GL11.glGenTextures(); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, pixels); + + return texID; + } + catch(IOException e) + { + e.printStackTrace(); + return -1; + } + } + + private Image(int textureID) + { + texID = textureID; + } + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int textureX, int textureY) + { + if(texID >= 0) + { + double u = (textureX % 256) / 256.0; + double v = (textureY % 256) / 256.0; + double u2 = ((textureX % 256) + width) / 256.0; + double v2 = ((textureY % 256) + height) / 256.0; + + renderer.setTextureID(texID); + renderer.drawTexturedRect(x, y, width, height, u, v, u2, v2); + } + } + + /** + * Unload the images associated with each Image loaded from a file. + * The Image objects are left behind, but given the texID of -1, so + * that they will be reloaded when next requested. + */ + public static void unloadFileTextures() + { + for(Image image: fileCache.values()) + { + GL11.glDeleteTextures(image.texID); + image.texID = -1; + } + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/minecraft/Text.java b/src/api/java/uristqwerty/gui_craftguide/minecraft/Text.java new file mode 100644 index 000000000..b197a18d0 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/minecraft/Text.java @@ -0,0 +1,52 @@ +package uristqwerty.gui_craftguide.minecraft; + +import net.minecraft.client.Minecraft; +import uristqwerty.gui_craftguide.rendering.Renderable; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class Text implements Renderable +{ + protected int x, y; + protected String text; + protected int color; + + public Text(int x, int y, String text, int color) + { + this.x = x; + this.y = y; + this.text = text; + this.color = color; + } + public Text(int x, int y, String text) + { + this(x, y, text, 0xff000000); + } + + @Override + public void render(RendererBase renderer, int x, int y) + { + renderer.setColor(color); + renderer.drawText(text, x + this.x, y + this.y); + renderer.setColor(0xffffffff); + } + + public void setText(String text) + { + this.text = text; + } + + public int textHeight() + { + return 8; + } + + public int textWidth() + { + return Minecraft.getMinecraft().fontRenderer.getStringWidth(text); + } + + public static int textWidth(String text) + { + return Minecraft.getMinecraft().fontRenderer.getStringWidth(text); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/rendering/Renderable.java b/src/api/java/uristqwerty/gui_craftguide/rendering/Renderable.java new file mode 100644 index 000000000..17f7bc45f --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/rendering/Renderable.java @@ -0,0 +1,6 @@ +package uristqwerty.gui_craftguide.rendering; + +public interface Renderable +{ + public void render(RendererBase renderer, int x, int y); +} diff --git a/src/api/java/uristqwerty/gui_craftguide/rendering/RendererBase.java b/src/api/java/uristqwerty/gui_craftguide/rendering/RendererBase.java new file mode 100644 index 000000000..dfd478b78 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/rendering/RendererBase.java @@ -0,0 +1,157 @@ +package uristqwerty.gui_craftguide.rendering; + +import org.lwjgl.opengl.GL11; + +import uristqwerty.gui_craftguide.Color; +import uristqwerty.gui_craftguide.texture.Texture; + +/** + * Defines the core functionality required to render GUI components. + */ +public abstract class RendererBase +{ + protected double red; + protected double green; + protected double blue; + protected double alpha; + + protected double redModifier; + protected double greenModifier; + protected double blueModifier; + protected double alphaModifier; + + public static RendererBase instance; + + public abstract void setTextureID(int textureID); + public abstract void drawText(String text, int x, int y); + public abstract void drawTextWithShadow(String text, int x, int y); + + public void resetValues() + { + red = 1.0; + green = 1.0; + blue = 1.0; + alpha = 1.0; + redModifier = 1.0; + greenModifier = 1.0; + blueModifier = 1.0; + alphaModifier = 1.0; + } + + public void drawRect(int x, int y, int width, int height) + { + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(770, 771); + + setGlColor(red, green, blue, alpha); + GL11.glBegin(GL11.GL_QUADS); + GL11.glVertex2i(x, y); + GL11.glVertex2i(x, y + height); + GL11.glVertex2i(x + width, y + height); + GL11.glVertex2i(x + width, y); + GL11.glEnd(); + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + public void drawTexturedRect( + int x, int y, int width, int height, + double u, double v, double u2, double v2) + { + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(770, 771); + + setGlColor(red, green, blue, alpha); + GL11.glBegin(GL11.GL_QUADS); + GL11.glTexCoord2d(u, v); + GL11.glVertex2i(x, y); + + GL11.glTexCoord2d(u, v2); + GL11.glVertex2i(x, y + height); + + GL11.glTexCoord2d(u2, v2); + GL11.glVertex2i(x + width, y + height); + + GL11.glTexCoord2d(u2, v); + GL11.glVertex2i(x + width, y); + GL11.glEnd(); + + GL11.glDisable(GL11.GL_BLEND); + } + + public void drawTexturedRect(Texture texture, + int x, int y, int width, int height, int u, int v) + { + texture.renderRect(this, x, y, width, height, u, v); + } + + public void setColorModifier(double red, double green, double blue, double alpha) + { + redModifier = red; + greenModifier = green; + blueModifier = blue; + alphaModifier = alpha; + } + + public void setColorModifierv(double v[]) + { + redModifier = v[0]; + greenModifier = v[1]; + blueModifier = v[2]; + alphaModifier = v[3]; + } + + public void setColorModifierv(Color color) + { + redModifier = color.red / 255.0; + greenModifier = color.green / 255.0; + blueModifier = color.blue / 255.0; + alphaModifier = color.alpha / 255.0; + } + + public void getColorModifierv(double v[]) + { + v[0] = red; + v[1] = green; + v[2] = blue; + v[3] = alpha; + } + + public void setColorRgb(int colour) + { + setColor((colour >> 16) & 0xff, (colour >> 8) & 0xff, colour & 0xff); + } + + public void setColor(int color) + { + setColor((color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff, (color >> 24) & 0xff); + } + + public void setColor(int red, int green, int blue, int alpha) + { + setColor(red, green, blue); + setAlpha(alpha); + } + + public void setColor(int red, int green, int blue) + { + this.red = red / 255.0; + this.green = green / 255.0; + this.blue = blue / 255.0; + } + + public void setAlpha(int alpha) + { + this.alpha = alpha / 255.0; + } + + public void setGlColor(double red, double green, double blue, double alpha) + { + GL11.glColor4d(red * redModifier, green * greenModifier, blue * blueModifier, alpha * alphaModifier); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/rendering/TexturedRect.java b/src/api/java/uristqwerty/gui_craftguide/rendering/TexturedRect.java new file mode 100644 index 000000000..09d90f3c5 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/rendering/TexturedRect.java @@ -0,0 +1,43 @@ +package uristqwerty.gui_craftguide.rendering; + +import uristqwerty.gui_craftguide.texture.Texture; + +public class TexturedRect implements Renderable +{ + protected int x, y, width, height, u, v; + protected Texture texture; + + public TexturedRect(int x, int y, int width, int height, Texture texture) + { + this(x, y, width, height, texture, 0, 0); + } + + public TexturedRect(int x, int y, int width, int height, Texture texture, int u, int v) + { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.texture = texture; + this.u = u; + this.v = v; + } + + @Override + public void render(RendererBase renderer, int x, int y) + { + renderer.drawTexturedRect(texture, x + this.x, y + this.y, width, height, u, v); + } + + public void moveBy(int xChange, int yChange) + { + x += xChange; + y += yChange; + } + + public void resizeBy(int widthChange, int heightChange) + { + width += widthChange; + height += heightChange; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/BlankTexture.java b/src/api/java/uristqwerty/gui_craftguide/texture/BlankTexture.java new file mode 100644 index 000000000..d80415288 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/BlankTexture.java @@ -0,0 +1,13 @@ +package uristqwerty.gui_craftguide.texture; + +import uristqwerty.gui_craftguide.editor.TextureMeta; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +@TextureMeta(name = "blank") +public class BlankTexture implements Texture +{ + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/BorderedTexture.java b/src/api/java/uristqwerty/gui_craftguide/texture/BorderedTexture.java new file mode 100644 index 000000000..a0dd6b069 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/BorderedTexture.java @@ -0,0 +1,80 @@ +package uristqwerty.gui_craftguide.texture; + +import uristqwerty.gui_craftguide.editor.TextureMeta; +import uristqwerty.gui_craftguide.editor.TextureMeta.ListSize; +import uristqwerty.gui_craftguide.editor.TextureMeta.TextureParameter; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +@TextureMeta(name = "borderedtexture") +public class BorderedTexture implements Texture +{ + @ListSize(9) + @TextureParameter + public Texture[] textures = new Texture[9]; + + @TextureParameter + public int borderWidth; + + @TextureParameter + public int borderHeight; + + public BorderedTexture() + { + } + + public BorderedTexture(Texture[] textures, int borderWidth) + { + this(textures, borderWidth, borderWidth); + } + + public BorderedTexture(Texture[] textures, int borderWidth, int borderHeight) + { + for(int i = 0; i < Math.min(textures.length, 9); i++) + { + this.textures[i] = textures[i]; + } + + this.borderWidth = borderWidth; + this.borderHeight = borderHeight; + } + + public BorderedTexture(Texture source, int u, int v, int spacing, int centerSize, int borderSize) + { + this(source, u, v, spacing, centerSize, centerSize, borderSize, borderSize); + } + + public BorderedTexture(Texture source, int u, int v, int spacing, int centerWidth, int centerHeight, int borderWidth, int borderHeight) + { + int centerU = u + spacing + borderWidth; + int rightU = u + spacing * 2 + centerWidth + borderWidth; + int centerV = v + spacing + borderHeight; + int bottomV = v + spacing * 2 + centerHeight + borderHeight; + + textures[0] = new TextureClip(source, u, v, borderWidth, borderHeight); + textures[1] = new SubTexture(source, centerU, v, centerWidth, borderHeight); + textures[2] = new TextureClip(source, rightU, v, borderWidth, borderHeight); + textures[3] = new TextureClip(source, u, centerV, borderWidth, centerHeight); + textures[4] = new SubTexture(source, centerU, centerV, centerWidth, centerHeight); + textures[5] = new TextureClip(source, rightU, centerV, borderWidth, centerHeight); + textures[6] = new TextureClip(source, u, bottomV, borderWidth, borderHeight); + textures[7] = new SubTexture(source, centerU, bottomV, centerWidth, borderHeight); + textures[8] = new TextureClip(source, rightU, bottomV, borderWidth, borderHeight); + + this.borderWidth = borderWidth; + this.borderHeight = borderHeight; + } + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + textures[0].renderRect(renderer, x, y, borderWidth, borderHeight, 0, 0); + textures[1].renderRect(renderer, x + borderWidth, y, width - borderWidth * 2, borderHeight, 0, 0); + textures[2].renderRect(renderer, x + width - borderWidth, y, borderWidth, borderHeight, 0, 0); + textures[3].renderRect(renderer, x, y + borderHeight, borderWidth, height - borderHeight * 2, 0, 0); + textures[4].renderRect(renderer, x + borderWidth, y + borderHeight, width - borderWidth * 2, height - borderHeight * 2, 0, 0); + textures[5].renderRect(renderer, x + width - borderWidth, y + borderHeight, borderWidth, height - borderHeight * 2, 0, 0); + textures[6].renderRect(renderer, x, y + height - borderHeight, borderWidth, borderHeight, 0, 0); + textures[7].renderRect(renderer, x + borderWidth, y + height - borderHeight, width - borderWidth * 2, borderHeight, 0, 0); + textures[8].renderRect(renderer, x + width - borderWidth, y + height - borderHeight, borderWidth, borderHeight, 0, 0); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/DynamicTexture.java b/src/api/java/uristqwerty/gui_craftguide/texture/DynamicTexture.java new file mode 100644 index 000000000..7965d72dc --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/DynamicTexture.java @@ -0,0 +1,53 @@ +package uristqwerty.gui_craftguide.texture; + +import java.util.HashMap; +import java.util.Map; + +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class DynamicTexture implements Texture +{ + public Texture mapped; + public final String id; + + private DynamicTexture(String id) + { + this.id = id; + } + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + if(mapped != null) + { + mapped.renderRect(renderer, x, y, width, height, u, v); + } + } + + private static Map instances = new HashMap(); + + public static Texture instance(String id, Texture mappedTo) + { + DynamicTexture texture = (DynamicTexture)instance(id); + + if(texture != null) + { + texture.mapped = mappedTo; + } + + return texture; + } + + public static Texture instance(String id) + { + DynamicTexture texture = instances.get(id); + + if(texture == null) + { + texture = new DynamicTexture(id); + instances.put(id, texture); + } + + return texture; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/MultipleTextures.java b/src/api/java/uristqwerty/gui_craftguide/texture/MultipleTextures.java new file mode 100644 index 000000000..0fc6dfaab --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/MultipleTextures.java @@ -0,0 +1,26 @@ +package uristqwerty.gui_craftguide.texture; + +import uristqwerty.gui_craftguide.editor.TextureMeta; +import uristqwerty.gui_craftguide.editor.TextureMeta.TextureParameter; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +@TextureMeta(name = "multipletextures") +public class MultipleTextures implements Texture +{ + @TextureParameter + public Texture[] textures; + + public MultipleTextures(Texture[] textures) + { + this.textures = textures; + } + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + for(Texture texture: textures) + { + texture.renderRect(renderer, x, y, width, height, u, v); + } + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/OffsetTexture.java b/src/api/java/uristqwerty/gui_craftguide/texture/OffsetTexture.java new file mode 100644 index 000000000..81e3fdc39 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/OffsetTexture.java @@ -0,0 +1,22 @@ +package uristqwerty.gui_craftguide.texture; + +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public class OffsetTexture implements Texture +{ + private final Texture base; + private final int u, v; + + public OffsetTexture(Texture base, int u, int v) + { + this.base = base; + this.u = u; + this.v = v; + } + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + base.renderRect(renderer, x, y, width, height, u + this.u, v + this.v); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/SolidColorTexture.java b/src/api/java/uristqwerty/gui_craftguide/texture/SolidColorTexture.java new file mode 100644 index 000000000..666d24dd8 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/SolidColorTexture.java @@ -0,0 +1,31 @@ +package uristqwerty.gui_craftguide.texture; + +import uristqwerty.gui_craftguide.Color; +import uristqwerty.gui_craftguide.editor.TextureMeta; +import uristqwerty.gui_craftguide.editor.TextureMeta.TextureParameter; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +@TextureMeta(name = "solidcolor") +public class SolidColorTexture implements Texture +{ + @TextureParameter + public Color color; + + public SolidColorTexture() + { + } + + public SolidColorTexture(int red, int green, int blue, int alpha) + { + color = new Color(red, green, blue, alpha); + } + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + renderer.setColor(color.red, color.green, color.blue, color.alpha); + renderer.drawRect(x, y, width, height); + renderer.setColor(255, 255, 255, 255); + } + +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/SubTexture.java b/src/api/java/uristqwerty/gui_craftguide/texture/SubTexture.java new file mode 100644 index 000000000..d953b31a5 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/SubTexture.java @@ -0,0 +1,89 @@ +package uristqwerty.gui_craftguide.texture; + +import uristqwerty.gui_craftguide.Rect; +import uristqwerty.gui_craftguide.editor.TextureMeta; +import uristqwerty.gui_craftguide.editor.TextureMeta.TextureParameter; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +/** + * Represents a subsection of a larger texture, shifted so that + * the sections's top left corner is at (0, 0). When drawn, loops + * the subsection to form an arbitrarily large virtual texture, to + * fully cover the drawn rectangle. + */ +@TextureMeta(name = "subtexture") +public class SubTexture implements Texture +{ + @TextureParameter + public Texture source; + + @TextureParameter + public Rect rect; + + public SubTexture(Texture source, int u, int v, int width, int height) + { + this.source = source; + this.rect = new Rect(u, v, width, height); + } + + public SubTexture() + { + } + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + if(rect.width < 1 || rect.height < 1) + { + return; + } + + u = ((u % rect.width) + rect.width) % rect.width; //Properly handle negatives + + if(u + width <= rect.width) + { + renderRectColumn(renderer, x, y, width, height, rect.x + u, v); + } + else + { + if(u != 0) + { + renderRectColumn(renderer, x, y, rect.width - (u % rect.width), height, rect.x + (u % rect.width), v); + } + + int segment_start; + for(segment_start = u; segment_start + rect.width < width; segment_start += rect.width) + { + renderRectColumn(renderer, x + segment_start, y, rect.width, height, rect.x, v); + } + + renderRectColumn(renderer, x + segment_start, y, width - segment_start, height, rect.x, v); + } + } + + private void renderRectColumn(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + int v1 = (((v % rect.height) + rect.height) % rect.height) + rect.y; + int v2 = v1 + height; + + if(v2 < rect.y + rect.height) + { + source.renderRect(renderer, x, y, width, height, u, v1); + } + else + { + if(v != 0) + { + source.renderRect(renderer, x, y, width, rect.height - (v % rect.height), u, rect.y + (v % rect.height)); + } + + int segment_start; + for(segment_start = v; segment_start + rect.height < height; segment_start += rect.height) + { + source.renderRect(renderer, x, y + segment_start, width, rect.height, u, rect.y); + } + + source.renderRect(renderer, x, y + segment_start, width, height - segment_start, u, rect.y); + } + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/Texture.java b/src/api/java/uristqwerty/gui_craftguide/texture/Texture.java new file mode 100644 index 000000000..cc8663fec --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/Texture.java @@ -0,0 +1,8 @@ +package uristqwerty.gui_craftguide.texture; + +import uristqwerty.gui_craftguide.rendering.RendererBase; + +public interface Texture +{ + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v); +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/TextureClip.java b/src/api/java/uristqwerty/gui_craftguide/texture/TextureClip.java new file mode 100644 index 000000000..8e32b2e52 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/TextureClip.java @@ -0,0 +1,69 @@ +package uristqwerty.gui_craftguide.texture; + +import uristqwerty.gui_craftguide.Rect; +import uristqwerty.gui_craftguide.editor.TextureMeta; +import uristqwerty.gui_craftguide.editor.TextureMeta.TextureParameter; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +/** + * Represents a subsection of a larger texture, shifted so that + * the sections's top left corner is at (0, 0). When drawn, only + * draws the portion, if any, of the drawn area that overlaps with + * the subsection. + */ +@TextureMeta(name = "clip") +public class TextureClip implements Texture +{ + @TextureParameter + public Texture source; + + @TextureParameter + public Rect rect; + + public TextureClip(Texture source, int u, int v, int width, int height) + { + this.source = source; + rect = new Rect(u, v, width, height); + } + + public TextureClip(Texture source, Rect rect) + { + this.source = source; + this.rect = rect; + } + + public TextureClip() + { + } + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + if(u < 0) + { + width += u; + u = 0; + } + + if(u + width > rect.width) + { + width = rect.width - u; + } + + if(v < 0) + { + height += v; + v = 0; + } + + if(v + height > rect.height) + { + height = rect.height - v; + } + + if(width > 0 && height > 0) + { + source.renderRect(renderer, x, y, width, height, u + rect.x, v + rect.y); + } + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/texture/TintedTexture.java b/src/api/java/uristqwerty/gui_craftguide/texture/TintedTexture.java new file mode 100644 index 000000000..798eb04f2 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/texture/TintedTexture.java @@ -0,0 +1,32 @@ +package uristqwerty.gui_craftguide.texture; + +import uristqwerty.gui_craftguide.Color; +import uristqwerty.gui_craftguide.editor.TextureMeta; +import uristqwerty.gui_craftguide.editor.TextureMeta.TextureParameter; +import uristqwerty.gui_craftguide.rendering.RendererBase; + +@TextureMeta(name = "coloredtexture") +public class TintedTexture implements Texture +{ + @TextureParameter + public Texture source; + + @TextureParameter + public Color color; + + private double prev[] = new double[4]; + + @Override + public void renderRect(RendererBase renderer, int x, int y, int width, int height, int u, int v) + { + renderer.getColorModifierv(prev); + renderer.setColorModifier( + prev[0] * (color.red / 255.0), + prev[1] * (color.green / 255.0), + prev[2] * (color.blue / 255.0), + prev[3] * (color.alpha / 255.0)); + + source.renderRect(renderer, x, y, width, height, u, v); + renderer.setColorModifierv(prev); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/Theme.java b/src/api/java/uristqwerty/gui_craftguide/theme/Theme.java new file mode 100644 index 000000000..ad3447b12 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/Theme.java @@ -0,0 +1,158 @@ +package uristqwerty.gui_craftguide.theme; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; +import uristqwerty.gui_craftguide.minecraft.Image; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.SolidColorTexture; +import uristqwerty.gui_craftguide.texture.Texture; + +public class Theme +{ + public enum SourceType + { + DIRECTORY, + GENERATED, + STREAM, + } + + private static Texture errorTexture = new SolidColorTexture(255, 0, 255, 255); + + public String id; + public String name; + public String description; + public File fileSource; + public SourceType fileSourceType; + public Map> images = new HashMap>(); + public String loadError = null; + public List dependencies = new ArrayList(); + public Map textures = new HashMap(); + + private static Object[] errorImage = {"builtin", "error", null}; + + public Theme(File location) + { + fileSource = location; + } + + public void setName(String name) + { + this.name = name; + } + + public void setDescription(String description) + { + this.description = description; + } + + public void setID(String id) + { + this.id = id.toLowerCase().replaceAll("[^a-z0-9_-]", ""); + } + + public void setMetadata(String propertyName, String value) + { + if(propertyName.equalsIgnoreCase("id")) + { + setID(value); + } + else if(propertyName.equalsIgnoreCase("name")) + { + setName(value); + } + else if(propertyName.equalsIgnoreCase("description")) + { + setDescription(value); + } + } + + public void addImage(String id, List sources) + { + List converted = new ArrayList(sources.size()); + + for(String source: sources) + { + Object[] o = new Object[]{source.substring(0, source.indexOf(':')), source.substring(source.indexOf(':') + 1), fileSource}; + converted.add(o); + } + + images.put(id, converted); + } + + public void addDependency(String dependency) + { + dependencies.add(dependency); + } + + public void generateTextures() + { + for(String imageID: images.keySet()) + { + ThemeManager.debug(" Loading image '" + imageID + "'"); + Texture texture = null; + + for(Object[] imageFormat: images.get(imageID)) + { + texture = loadImage(imageFormat); + + if(texture != null) + { + break; + } + } + + if(texture == null) + { + texture = loadImage(errorImage); + } + + textures.put(imageID, texture); + } + + for(String id: textures.keySet()) + { + ThemeManager.debug(" Adding texture '" + id + "'. Maps to '" + textures.get(id) + "'"); + DynamicTexture.instance(id, textures.get(id)); + } + } + + private Texture loadImage(Object[] imageFormat) + { + String sourceType = (String)imageFormat[0]; + String source = (String)imageFormat[1]; + + ThemeManager.debug(" Loading " + sourceType + " image '" + source + "'"); + + if(sourceType.equalsIgnoreCase("builtin")) + { + if(source.equalsIgnoreCase("error")) + { + return errorTexture; + } + } + else if(sourceType.equalsIgnoreCase("file-jar") || sourceType.equalsIgnoreCase("resource")) + { + + } + else if(sourceType.equalsIgnoreCase("file") && imageFormat[2] != null) + { + return Image.fromFile((File)imageFormat[2], source); + } + + ThemeManager.debug(" Not found."); + return null; + } + + public void addTexture(String id, Texture texture) + { + textures.put(id, texture); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/ThemeManager.java b/src/api/java/uristqwerty/gui_craftguide/theme/ThemeManager.java new file mode 100644 index 000000000..da069d9cb --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/ThemeManager.java @@ -0,0 +1,393 @@ +package uristqwerty.gui_craftguide.theme; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import uristqwerty.CraftGuide.CraftGuideLog; +import uristqwerty.CraftGuide.client.CraftGuideClient; +import uristqwerty.gui_craftguide.editor.TextureMeta; +import uristqwerty.gui_craftguide.minecraft.Image; +import uristqwerty.gui_craftguide.texture.Texture; +import uristqwerty.gui_craftguide.theme.reader.ThemeReader; + +public class ThemeManager +{ + private ThemeReader xmlReader = new ThemeReader(); + public Map themeList; + public static boolean debugOutput = false; + + public static ThemeManager instance = new ThemeManager(); + public static Theme currentTheme; + public static Map> textureTypes = new HashMap>(); + + public void reload() + { + File themeDir = CraftGuideClient.themeDirectory(); + Image.unloadFileTextures(); + + if(themeDir == null || !themeDir.isDirectory()) + { + return; + } + + Map themes = new HashMap(); + + CraftGuideLog.log("(re)loading themes..."); + + for(File file: themeDir.listFiles()) + { + Theme theme = null; + + if(file.isDirectory()) + { + CraftGuideLog.log(" Trying to load directory: " + file.getName()); + theme = loadDirectory(file); + } + else if(file.getName().toLowerCase().endsWith(".txt")) + { + continue; + } + else + { + CraftGuideLog.log(" Trying to load file: " + file.getName()); + theme = loadFile(file); + } + + if(theme != null) + { + CraftGuideLog.log(" Loaded " + file.getName()); + themes.put(theme.id, theme); + } + else + { + CraftGuideLog.log(" Failed to load " + file.getName()); + } + } + + + + Map validatedThemes = new HashMap(); + List processed = new ArrayList(); + + debug("Validating themes:"); + while(themes.size() > 0) + { + debug(" Looping over unvalidated themes:"); + for(String themeID: themes.keySet()) + { + debug(" Theme '" + themeID + "':"); + Theme theme = themes.get(themeID); + + if(theme.loadError != null) + { + debug(" Already marked as having an error"); + processed.add(themeID); + continue; + } + + boolean hasDependencies = true; + + debug(" Checking dependencies..."); + for(String dependency: theme.dependencies) + { + debug(" Dependency '" + dependency + "'"); + if(themes.containsKey(dependency)) + { + hasDependencies = false; + break; + } + if(!validatedThemes.containsKey(dependency)) + { + theme.loadError = "Dependency '" + dependency + "' missing or unloadable"; + break; + } + else if(validatedThemes.get(dependency).loadError != null) + { + theme.loadError = "Error in dependency '" + dependency + "'"; + break; + } + } + + if(theme.loadError != null) + { + debug(" Dependency error '" + theme.loadError + "'"); + processed.add(themeID); + continue; + } + + if(!hasDependencies) + { + continue; + } + + debug(" All dependencies processed without error. Validating theme..."); + + for(String imageID: theme.images.keySet()) + { + debug(" Checking image sources for image '" + imageID + "'"); + boolean valid = false; + for(Object[] imageSource: theme.images.get(imageID)) + { + debug(" Source '" + imageSource + "'"); + + if(validImage(theme, imageSource, validatedThemes)) + { + valid = true; + break; + } + } + + if(!valid) + { + theme.loadError = "Unable to locate valid source for image '" + imageID + "'"; + break; + } + } + + processed.add(themeID); + } + + if(processed.size() > 0) + { + debug(" " + processed.size() + " themes validated"); + + for(String themeID: processed) + { + validatedThemes.put(themeID, themes.get(themeID)); + themes.remove(themeID); + } + + processed.clear(); + } + else + { + debug(" No themes validated, marking remaining themes as having a cyclic dependency"); + + for(String themeID: themes.keySet()) + { + Theme theme = themes.get(themeID); + theme.loadError = "Possible cyclic dependency"; + validatedThemes.put(themeID, theme); + } + + break; + } + } + + + debug("Result:"); + + for(String themeID: validatedThemes.keySet()) + { + if(validatedThemes.get(themeID).loadError == null) + { + debug(" '" + themeID + "' loaded successfully"); + } + else + { + debug(" '" + themeID + "' failed to load with error \"" + validatedThemes.get(themeID).loadError + "\""); + } + } + + themeList = validatedThemes; + } + + private boolean validImage(Theme theme, Object[] imageSource, Map validatedThemes) + { + debug(" Checking if image exists and is valid..."); + String type = (String)imageSource[0]; + String source = (String)imageSource[1]; + if(type.equalsIgnoreCase("parent-theme")) + { + debug(" Searching for definition in parent theme(s)"); + for(String id: theme.dependencies) + { + debug(" Checking theme '" + id + "'"); + + if(definesImage(validatedThemes.get(id), source, validatedThemes)) + { + return true; + } + } + + debug(" No parent theme defines image."); + return false; + } + else if(type.equalsIgnoreCase("file-jar") || type.equalsIgnoreCase("resource")) + { + debug(" Searching resource packs, Minecraft.jar, and mod jars/zips/dirs for '" + source + "'"); + + } + else if(type.equalsIgnoreCase("file")) + { + debug(" Checking theme location for '" + source + "'"); + + if(theme.fileSourceType == Theme.SourceType.DIRECTORY) + { + return new File((File)imageSource[2], source).isFile(); + } + } + else if(type.equalsIgnoreCase("builtin:")) + { + String builtin = source; + + if(builtin.equalsIgnoreCase("error")) + { + return true; + } + } + + return false; + } + + private boolean definesImage(Theme theme, String sourceID, Map validatedThemes) + { + if(theme.images.containsKey(sourceID)) + { + return true; + } + + for(String id: theme.dependencies) + { + if(definesImage(validatedThemes.get(id), sourceID, validatedThemes)) + { + return true; + } + } + + return false; + } + + private Theme loadDirectory(File dir) + { + for(File file: dir.listFiles()) + { + if(file.getName().startsWith("theme")) + { + CraftGuideLog.log(" Found " + file.getName()); + + if(!file.isDirectory() && file.getName().endsWith(".xml")) + { + + } + + CraftGuideLog.log(" Could not read " + file.getName()); + } + } + + return null; + } + + private Theme loadStream(InputStream stream) + { + Theme theme = xmlReader.read(stream, null); + + if(theme != null) + { + theme.fileSource = null; + theme.fileSourceType = Theme.SourceType.STREAM; + } + + return theme; + } + + private Theme loadFile(File file) + { + return null; + } + + public static void debug(String text) + { + if(debugOutput) + { + CraftGuideLog.log(text, true); + } + } + + public Theme buildTheme(String string) + { + debug("Building theme '" + string + "':"); + Theme theme = themeList.get(string); + + if(theme == null) + { + debug(" Could not find theme."); + return null; + } + + Theme combined = new Theme(null); + debug(" Merging..."); + merge(combined, theme); + combined.id = "[built-theme:" + string + "]"; + combined.fileSourceType = Theme.SourceType.GENERATED; + combined.description = "Internal Theme that is a combination of the currently selected theme and all of its prerequisites."; + + debug(" Generating textures..."); + combined.generateTextures(); + + return combined; + } + + private void merge(Theme combined, Theme theme) + { + debug(" Handling dependencies:"); + for(String dependency: theme.dependencies) + { + debug(" Dependency '" + dependency + "'"); + if(!combined.dependencies.contains(dependency)) + { + Theme dep = themeList.get(dependency); + + if(dep != null) + { + debug(" Not merged yet. Merging... ["); + merge(combined, dep); + debug(" ] finished merging '" + dependency + "'"); + } + else + { + debug(" Not merged yet. Could not find theme, though."); + } + } + else + { + debug(" Already merged."); + } + } + + debug(" Merging:"); + if(combined.dependencies.contains(theme.id)) + { + debug(" Already merged, skipping."); + return; + } + + debug(" Not already merged. adding images and textures."); + combined.dependencies.add(theme.id); + combined.images.putAll(theme.images); + combined.textures.putAll(theme.textures); + } + + public static void addTextureType(Class textureClass) + { + TextureMeta meta = textureClass.getAnnotation(TextureMeta.class); + + if(meta != null) + { + textureTypes.put(meta.name().toLowerCase(), textureClass); + } + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/ColorTemplate.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ColorTemplate.java new file mode 100644 index 000000000..154cccde3 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ColorTemplate.java @@ -0,0 +1,80 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.Color; +import uristqwerty.gui_craftguide.theme.Theme; + +public class ColorTemplate implements ValueTemplate +{ + public int red = 255, green = 255, blue = 255, alpha = 255; + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + for(int i = 0; i < attributes.getLength(); i++) + { + if(attributes.getLocalName(i).equalsIgnoreCase("red")) + { + red = num(attributes.getValue(i)); + } + else if(attributes.getLocalName(i).equalsIgnoreCase("green")) + { + green = num(attributes.getValue(i)); + } + else if(attributes.getLocalName(i).equalsIgnoreCase("blue")) + { + blue = num(attributes.getValue(i)); + } + else if(attributes.getLocalName(i).equalsIgnoreCase("alpha")) + { + alpha = num(attributes.getValue(i)); + } + } + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + return NullElement.instance; + } + + @Override + public void endElement(Theme theme, String name) + { + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + } + + private int num(String value) + { + try + { + return Integer.parseInt(value); + } + catch(NumberFormatException e) + { + return 0; + } + } + + @Override + public Class valueType() + { + return Color.class; + } + + @Override + public Object getValue() + { + return new Color(red, green, blue, alpha); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/DependencyElement.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/DependencyElement.java new file mode 100644 index 000000000..4ef11d259 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/DependencyElement.java @@ -0,0 +1,36 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.theme.Theme; + +public class DependencyElement implements ElementHandler +{ + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + theme.addDependency(String.valueOf(chars, start, length).trim()); + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + return NullElement.instance; + } + + @Override + public void endElement(Theme theme, String name) + { + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/ElementHandler.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ElementHandler.java new file mode 100644 index 000000000..964d47b2a --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ElementHandler.java @@ -0,0 +1,14 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.theme.Theme; + +public interface ElementHandler +{ + public void startElement(Theme theme, String name, Attributes attributes); + public void characters(Theme theme, char[] chars, int start, int length); + public ElementHandler getSubElement(String name, Attributes attributes); + public void endElement(Theme theme, String name); + public void endSubElement(Theme theme, ElementHandler handler, String name); +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/GenericHandler.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/GenericHandler.java new file mode 100644 index 000000000..0b9122558 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/GenericHandler.java @@ -0,0 +1,69 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import java.util.HashMap; +import java.util.Map; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.theme.Theme; + +public class GenericHandler implements ElementHandler +{ + private Map handlers = new HashMap(); + + public GenericHandler(Object... elements)//May throw IndexOutOfBoundsException or ClassCastException on bad data + { + for(int i = 0; i < elements.length; i += 2) + { + handlers.put(((String)elements[i]).toLowerCase(), elements[i + 1]); + } + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + Object handler = handlers.get(name.toLowerCase()); + + if(handler instanceof ElementHandler) + { + return (ElementHandler)handler; + } + else if(handler instanceof Class && ElementHandler.class.isAssignableFrom((Class)handler)) + { + try + { + return ((Class)handler).newInstance(); + } + catch(InstantiationException e) + { + e.printStackTrace(); + } + catch(IllegalAccessException e) + { + e.printStackTrace(); + } + } + + return NullElement.instance; + } + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + } + + @Override + public void endElement(Theme theme, String name) + { + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/ImageElement.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ImageElement.java new file mode 100644 index 000000000..524e17e30 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ImageElement.java @@ -0,0 +1,62 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import java.util.ArrayList; +import java.util.List; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.theme.Theme; + +public class ImageElement implements ElementHandler +{ + private String id; + private List sources = new ArrayList(); + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + for(int i = 0; i< attributes.getLength(); i++) + { + if(attributes.getLocalName(i).equalsIgnoreCase("id")) + { + id = attributes.getValue(i).toLowerCase().replaceAll("[^a-z0-9_-]", ""); + } + } + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + if(name.equalsIgnoreCase("source")) + { + return new ImageSourceElement(); + } + + return NullElement.instance; + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + } + + @Override + public void endElement(Theme theme, String name) + { + if(id == null || id.isEmpty()) + { + return; + } + + theme.addImage(id, sources); + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + if(handler instanceof ImageSourceElement) + { + sources.add(((ImageSourceElement)handler).getSource()); + } + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/ImageSourceElement.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ImageSourceElement.java new file mode 100644 index 000000000..c2fc2884e --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ImageSourceElement.java @@ -0,0 +1,50 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.theme.Theme; + +public class ImageSourceElement implements ElementHandler +{ + private String type = ""; /*file (relative to theme), jar, mcdir, image (other image already loaded)*/ + private String path = ""; + + public String getSource() + { + return type + ":" + path; + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + return NullElement.instance; + } + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + for(int i = 0; i < attributes.getLength(); i++) + { + if(attributes.getLocalName(i).equalsIgnoreCase("type")) + { + type = attributes.getValue(i); + } + } + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + path = String.valueOf(chars, start, length).trim(); + } + + @Override + public void endElement(Theme theme, String name) + { + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/IntegerElement.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/IntegerElement.java new file mode 100644 index 000000000..0eab62d5f --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/IntegerElement.java @@ -0,0 +1,56 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.theme.Theme; + +public class IntegerElement implements ValueTemplate +{ + Integer value = 0; + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + try + { + value = Integer.parseInt(String.valueOf(chars, start, length)); + } + catch(NumberFormatException e) + { + } + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + return NullElement.instance; + } + + @Override + public void endElement(Theme theme, String name) + { + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + } + + @Override + public Class valueType() + { + return Integer.class; + } + + @Override + public Object getValue() + { + return value; + } + +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/ListTemplate.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ListTemplate.java new file mode 100644 index 000000000..f85370dea --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ListTemplate.java @@ -0,0 +1,89 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import java.lang.reflect.Array; +import java.util.ArrayList; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.theme.Theme; + +public class ListTemplate implements ValueTemplate +{ + private int size = -1; + private ArrayList list = new ArrayList(); + private Class type; + public Object result; + + public ListTemplate(Class type) + { + this.type = type; + } + + public ListTemplate(Class type, int size) + { + this.type = type; + this.size = size; + } + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + ValueTemplate t = ValueType.getTemplate(type.getComponentType()); + + if(t != null) + { + return t; + } + else + { + return NullElement.instance; + } + } + + @Override + public void endElement(Theme theme, String name) + { + if(size == -1) + { + size = list.size(); + } + + result = Array.newInstance(type.getComponentType(), size); + + for(int i = 0; i < Math.min(size, list.size()); i++) + { + Array.set(result, i, list.get(i)); + } + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + if(handler instanceof ValueTemplate) + { + list.add(((ValueTemplate)handler).getValue()); + } + } + + @Override + public Class valueType() + { + return type; + } + + @Override + public Object getValue() + { + return result; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/MetadataProperty.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/MetadataProperty.java new file mode 100644 index 000000000..7e21de1c3 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/MetadataProperty.java @@ -0,0 +1,43 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.theme.Theme; + +public class MetadataProperty implements ElementHandler +{ + private String propertyName; + + public MetadataProperty(String property) + { + propertyName = property; + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + String value = String.valueOf(chars, start, length).trim(); + theme.setMetadata(propertyName, value); + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + return NullElement.instance; + } + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + } + + @Override + public void endElement(Theme theme, String name) + { + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/NullElement.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/NullElement.java new file mode 100644 index 000000000..966416def --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/NullElement.java @@ -0,0 +1,36 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.theme.Theme; + +public class NullElement implements ElementHandler +{ + public static NullElement instance = new NullElement(); + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + return this; + } + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + } + + @Override + public void endElement(Theme theme, String name) + { + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/RectTemplate.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/RectTemplate.java new file mode 100644 index 000000000..d1cd597b9 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/RectTemplate.java @@ -0,0 +1,80 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.Rect; +import uristqwerty.gui_craftguide.theme.Theme; + +public class RectTemplate implements ValueTemplate +{ + public int x, y, width, height; + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + for(int i = 0; i < attributes.getLength(); i++) + { + if(attributes.getLocalName(i).equalsIgnoreCase("x")) + { + x = num(attributes.getValue(i)); + } + else if(attributes.getLocalName(i).equalsIgnoreCase("y")) + { + y = num(attributes.getValue(i)); + } + else if(attributes.getLocalName(i).equalsIgnoreCase("width")) + { + width = num(attributes.getValue(i)); + } + else if(attributes.getLocalName(i).equalsIgnoreCase("height")) + { + height = num(attributes.getValue(i)); + } + } + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + return NullElement.instance; + } + + @Override + public void endElement(Theme theme, String name) + { + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + } + + private int num(String value) + { + try + { + return Integer.parseInt(value); + } + catch(NumberFormatException e) + { + return 0; + } + } + + @Override + public Class valueType() + { + return Rect.class; + } + + @Override + public Object getValue() + { + return new Rect(x, y, width, height); + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/TextureElement.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/TextureElement.java new file mode 100644 index 000000000..0b4ba40bd --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/TextureElement.java @@ -0,0 +1,145 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import java.lang.reflect.Field; + +import org.xml.sax.Attributes; + +import uristqwerty.CraftGuide.CraftGuideLog; +import uristqwerty.gui_craftguide.editor.TextureMeta.TextureParameter; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.Texture; +import uristqwerty.gui_craftguide.theme.Theme; +import uristqwerty.gui_craftguide.theme.ThemeManager; + +public class TextureElement implements ValueTemplate +{ + private String type; + private String id; + + private Texture texture = null; + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + for(int i = 0; i < attributes.getLength(); i++) + { + if(attributes.getLocalName(i).equalsIgnoreCase("type")) + { + type = attributes.getValue(i); + Class textureClass = ThemeManager.textureTypes.get(type.toLowerCase()); + + if(textureClass != null) + { + try + { + texture = textureClass.newInstance(); + } + catch(InstantiationException e) + { + CraftGuideLog.log(e); + } + catch(IllegalAccessException e) + { + CraftGuideLog.log(e); + } + } + } + else if(attributes.getLocalName(i).equalsIgnoreCase("id")) + { + id = attributes.getValue(i); + } + else if(attributes.getLocalName(i).equalsIgnoreCase("sourceid")) + { + texture = DynamicTexture.instance(attributes.getValue(i)); + } + } + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + if(texture != null) + { + for(Field field: texture.getClass().getFields()) + { + if(field.getName().equalsIgnoreCase(name)) + { + ValueTemplate template = ValueType.getTemplate(field); + + if(template != null) + { + return template; + } + } + } + } + + return NullElement.instance; + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + if(texture != null) + { + for(Field field: texture.getClass().getFields()) + { + if(field.getName().equalsIgnoreCase(name)) + { + if(field.isAnnotationPresent(TextureParameter.class)) + { + try + { + if(handler instanceof ValueTemplate) + { + ValueTemplate template = (ValueTemplate)handler; + + if(field.getType().isAssignableFrom(template.valueType()) || + (field.getType().equals(int.class) && template.valueType().equals(Integer.class))) + { + field.set(texture, template.getValue()); + } + } + } + catch(IllegalArgumentException e) + { + CraftGuideLog.log(e); + } + catch(IllegalAccessException e) + { + CraftGuideLog.log(e); + } + } + + break; + } + } + } + } + + @Override + public void endElement(Theme theme, String name) + { + if(id != null) + { + theme.addTexture(id, texture); + } + } + + @Override + public Class valueType() + { + return Texture.class; + } + + @Override + public Object getValue() + { + return texture; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/TextureSourceElement.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/TextureSourceElement.java new file mode 100644 index 000000000..9d70982b1 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/TextureSourceElement.java @@ -0,0 +1,50 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import org.xml.sax.Attributes; + +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.Texture; +import uristqwerty.gui_craftguide.theme.Theme; + +public class TextureSourceElement implements ElementHandler +{ + public boolean recursive = false; + public Texture source; + + @Override + public void startElement(Theme theme, String name, Attributes attributes) + { + // TODO Auto-generated method stub + + } + + @Override + public void characters(Theme theme, char[] chars, int start, int length) + { + if(!recursive) + { + source = DynamicTexture.instance(String.valueOf(chars, start, length)); + } + } + + @Override + public ElementHandler getSubElement(String name, Attributes attributes) + { + return NullElement.instance; + } + + @Override + public void endElement(Theme theme, String name) + { + // TODO Auto-generated method stub + + } + + @Override + public void endSubElement(Theme theme, ElementHandler handler, String name) + { + // TODO Auto-generated method stub + + } + +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/ThemeReader.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ThemeReader.java new file mode 100644 index 000000000..76431d9db --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ThemeReader.java @@ -0,0 +1,141 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import java.io.File; +import java.io.InputStream; +import java.util.LinkedList; + +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.XMLReaderFactory; + +import uristqwerty.CraftGuide.CraftGuideLog; +import uristqwerty.gui_craftguide.theme.Theme; + +public class ThemeReader implements ContentHandler +{ + private static ElementHandler metadataElement = new GenericHandler( + "id", new MetadataProperty("id"), + "name", new MetadataProperty("name"), + "description", new MetadataProperty("description"), + "dependency", DependencyElement.class); + + private static ElementHandler themeElement = new GenericHandler( + "metadata", metadataElement, + "image", ImageElement.class, + "texture", TextureElement.class); + + private static ElementHandler rootElement = new GenericHandler( + "theme", themeElement); + + private LinkedList handlerStack = new LinkedList(); + + private Theme theme; + + public Theme read(InputStream source, File themeDir) + { + theme = new Theme(themeDir); + handlerStack.add(rootElement); + + try + { + XMLReader reader = XMLReaderFactory.createXMLReader(); + reader.setContentHandler(this); + reader.parse(new InputSource(source)); + } + catch(Exception e) + { + e.printStackTrace(); + CraftGuideLog.log(e); + return null; + } + + handlerStack.clear(); + return theme; + } + + @Override + public void startDocument() throws SAXException + { + } + + @Override + public void endDocument() throws SAXException + { + } + + @Override + public void characters(char[] chars, int start, int length) throws SAXException + { + if(handlerStack.peek() != null) + { + handlerStack.peek().characters(theme, chars, start, length); + } + } + + @Override + public void startElement(String uri, String name, String qName, Attributes attributes) throws SAXException + { + if(handlerStack.peek() == null) + { + CraftGuideLog.log("CraftGuide: Error loading theme file. Stack is null at element '" + name + "'", true); + } + else + { + ElementHandler h = handlerStack.peek().getSubElement(name, attributes); + handlerStack.push(h != null? h : NullElement.instance); + handlerStack.peek().startElement(theme, name, attributes); + } + } + + @Override + public void endElement(String uri, String name, String qName) throws SAXException + { + ElementHandler handler = handlerStack.pop(); + handler.endElement(theme, name); + + if(handlerStack.peek() != null) + { + handlerStack.peek().endSubElement(theme, handler, name); + } + } + + @Override + public void processingInstruction(String arg0, String arg1) throws SAXException + { + // TODO Auto-generated method stub + } + + @Override + public void setDocumentLocator(Locator locator) + { + // TODO Auto-generated method stub + } + + @Override + public void skippedEntity(String name) throws SAXException + { + // TODO Auto-generated method stub + } + + @Override + public void ignorableWhitespace(char[] chars, int start, int length) throws SAXException + { + // TODO Auto-generated method stub + } + + @Override + public void startPrefixMapping(String prefix, String uri) throws SAXException + { + // TODO Auto-generated method stub + } + + @Override + public void endPrefixMapping(String prefix) throws SAXException + { + // TODO Auto-generated method stub + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/ValueTemplate.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ValueTemplate.java new file mode 100644 index 000000000..da1abf72b --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ValueTemplate.java @@ -0,0 +1,7 @@ +package uristqwerty.gui_craftguide.theme.reader; + +public interface ValueTemplate extends ElementHandler +{ + public Class valueType(); + public Object getValue(); +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/reader/ValueType.java b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ValueType.java new file mode 100644 index 000000000..eb2845304 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/reader/ValueType.java @@ -0,0 +1,48 @@ +package uristqwerty.gui_craftguide.theme.reader; + +import java.lang.reflect.Field; + +import uristqwerty.gui_craftguide.Color; +import uristqwerty.gui_craftguide.Rect; +import uristqwerty.gui_craftguide.editor.TextureMeta.ListSize; +import uristqwerty.gui_craftguide.texture.Texture; + +public class ValueType +{ + public static ValueTemplate getTemplate(Field field) + { + if(field.getType().isArray() && field.isAnnotationPresent(ListSize.class)) + { + ListSize size = field.getAnnotation(ListSize.class); + return new ListTemplate(field.getType(), size.value()); + } + + return getTemplate(field.getType()); + } + + public static ValueTemplate getTemplate(Class type) + { + if(type.equals(Color.class)) + { + return new ColorTemplate(); + } + else if(type.equals(Rect.class)) + { + return new RectTemplate(); + } + else if(type.equals(Texture.class)) + { + return new TextureElement(); + } + else if(type.equals(int.class) || type.equals(Integer.class)) + { + return new IntegerElement(); + } + else if(type.isArray()) + { + return new ListTemplate(type); + } + + return null; + } +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/writer/ThemeWriter.java b/src/api/java/uristqwerty/gui_craftguide/theme/writer/ThemeWriter.java new file mode 100644 index 000000000..a44beca8c --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/writer/ThemeWriter.java @@ -0,0 +1,19 @@ +package uristqwerty.gui_craftguide.theme.writer; + +import java.io.OutputStream; + +import uristqwerty.gui_craftguide.theme.Theme; + +public interface ThemeWriter +{ + /** + * Writes a Theme to the specified OutputStream. + *

    + * returns true on success, or false if there was any + * sort of failure. + * @param theme + * @param output + * @return + */ + public boolean write(Theme theme, OutputStream output); +} diff --git a/src/api/java/uristqwerty/gui_craftguide/theme/writer/XMLThemeWriter.java b/src/api/java/uristqwerty/gui_craftguide/theme/writer/XMLThemeWriter.java new file mode 100644 index 000000000..a2003dbf7 --- /dev/null +++ b/src/api/java/uristqwerty/gui_craftguide/theme/writer/XMLThemeWriter.java @@ -0,0 +1,184 @@ +package uristqwerty.gui_craftguide.theme.writer; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.util.LinkedList; + +import uristqwerty.gui_craftguide.Rect; +import uristqwerty.gui_craftguide.texture.DynamicTexture; +import uristqwerty.gui_craftguide.texture.TextureClip; +import uristqwerty.gui_craftguide.theme.Theme; + +public class XMLThemeWriter implements ThemeWriter +{ + private class ElementException extends Exception + { + private static final long serialVersionUID = -1106134229546685224L; + } + + private class ElementCloseMismatchException extends ElementException + { + private static final long serialVersionUID = 3826879376987706602L; + } + + private class ElementAttributeCountException extends ElementException + { + private static final long serialVersionUID = 5363934302886278365L; + } + + private LinkedList elementStack = new LinkedList(); + + private OutputStreamWriter output; + private int indentation = 0; + + @Override + public boolean write(Theme theme, OutputStream outputStream) + { + try + { + output = new OutputStreamWriter(outputStream); + + openElement("theme"); + openElement("metadata"); + writeElement("id", theme.id); + writeElement("name", theme.name); + writeElement("description", theme.description); + + for(String dependency: theme.dependencies) + { + writeElement("dependency", dependency); + } + + closeElement("metadata"); + + for(String image: theme.images.keySet()) + { + openElement("image", "id", image); + + for(Object[] source: theme.images.get(image)) + { + writeElement("source", (String)source[0], "type", (String)source[1]); + } + + closeElement("image"); + } + + for(String texture: theme.textures.keySet()) + { + if(theme.textures.get(texture) instanceof TextureClip) + { + TextureClip clip = (TextureClip)theme.textures.get(texture); + openElement("texture", "id", texture, "type", "clip"); + + if(clip.source instanceof DynamicTexture) + { + writeElement("source", ((DynamicTexture)clip.source).id); + } + else + { + //TODO + } + + writeRect(clip.rect); + + closeElement("texture"); + } + } + + closeElement("theme"); + + output.flush(); + + return true; + } + catch(ElementException e) + { + e.printStackTrace(); + } + catch(IOException e) + { + e.printStackTrace(); + } + + return false; + } + + private void writeRect(Rect rect) throws ElementAttributeCountException, IOException + { + writeElement("rect", "", + "x", Integer.toString(rect.x), + "y", Integer.toString(rect.y), + "width", Integer.toString(rect.width), + "height", Integer.toString(rect.height)); + } + + private void writeElement(String elementName, String contents, String... attributes) throws IOException, ElementAttributeCountException + { + indent(); + output.write("<" + elementName + attributes(attributes) + ">" + escape(contents) + "\n"); + } + + private String attributes(String[] attributes) throws ElementAttributeCountException + { + if((attributes.length & 0x1) != 0) + { + throw new ElementAttributeCountException(); + } + + String result = ""; + + for(int i = 0; i < attributes.length; i += 2) + { + result = result + " " + attributes[i] + "=\"" + escape(attributes[i + 1]) + "\""; + } + + return result; + } + + private void openElement(String elementName, String... attributes) throws IOException, ElementAttributeCountException + { + elementStack.push(elementName); + indent(); + output.write("<" + elementName + attributes(attributes) + ">\n"); + + indentation++; + } + + private void closeElement(String elementName) throws ElementCloseMismatchException, IOException + { + if(!elementName.equals(elementStack.pop())) + { + throw new ElementCloseMismatchException(); + } + + indentation--; + indent(); + output.write("\n"); + } + + private void indent() throws IOException + { + for(int i = 0; i < indentation; i++) + { + output.write("\t"); + } + } + + private String escape(String string) + { + if(string == null) + { + return ""; + } + else + { + return string + .replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("'", "'") + .replace("\"", """); + } + } +} diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info new file mode 100644 index 000000000..e6b9e71a7 --- /dev/null +++ b/src/main/resources/mcmod.info @@ -0,0 +1,19 @@ +[ + { + "modid":"appliedenergistics2", + "name":"Applied Energistics 2", + "description":"A Mod about Matter, Energy and using them to conquer the world..", + "version":"${version}", + "mcversion":"${mcversion}", + "url":"http://ae2.ae-mod.info", + "updateUrl":"", + "authorList":[ + "AlgorithmX2" + ], + "credits":"AlgorithmX2", + "logoFile":"", + "screenshots":[ + + ] + } +] diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 000000000..bc4d39f1a --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 1, + "description": "Resources used for Applied Energistics 2" + } +}
  • 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≪oUC5ed~{fC~le^9RA>3jZNOe)O( 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