From 40c3b19b0b96364875038cda389db8aa3ca2411a Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Wed, 14 Aug 2024 20:58:57 -0400 Subject: [PATCH] refactor: various changes (#52) --- LOCALES.md | 2 +- README.md | 8 +- README.zh_CN.md | 3 +- pom.xml | 7 -- .../guizhanss/fastmachines/core/Registry.java | 3 +- .../fastmachines/core/recipes/IRecipe.java | 18 ++++ .../core/recipes/RandomRecipe.java | 16 +--- .../fastmachines/core/recipes/RawRecipe.java | 5 +- .../core/recipes/StandardRecipe.java | 14 +--- .../core/services/ConfigurationService.java | 5 +- .../core/services/IntegrationService.java | 1 + .../core/services/ListenerService.java | 1 + .../core/services/LocalizationService.java | 1 + .../fastmachines/items/FastMachinesItems.java | 1 + .../items/machines/generic/AFastMachine.java | 44 ---------- .../machines/generic/AbstractFastMachine.java | 53 ++++++------ .../machines/generic/BasicFastMachine.java | 22 +++++ .../machines/generic/FastMachineCache.java | 82 +++++++++---------- .../FastInfinityWorkbench.java | 24 +----- .../infinityexpansion/FastMobDataInfuser.java | 24 +----- .../slimeframe/FastSlimeFrameFoundry.java | 7 +- .../machines/slimefun/FastAncientAltar.java | 7 +- .../machines/slimefun/FastArmorForge.java | 7 +- .../machines/slimefun/FastComposter.java | 7 +- .../machines/slimefun/FastCompressor.java | 7 +- .../slimefun/FastEnhancedCraftingTable.java | 7 +- .../machines/slimefun/FastGrindStone.java | 7 +- .../items/machines/slimefun/FastJuicer.java | 7 +- .../machines/slimefun/FastMagicWorkbench.java | 7 +- .../machines/slimefun/FastOreCrusher.java | 7 +- .../machines/slimefun/FastOreWasher.java | 7 +- .../machines/slimefun/FastPanningMachine.java | 7 +- .../slimefun/FastPressureChamber.java | 7 +- .../items/machines/slimefun/FastSmeltery.java | 7 +- .../items/machines/slimefun/FastTableSaw.java | 7 +- .../machines/vanilla/FastCraftingTable.java | 7 +- .../items/machines/vanilla/FastFurnace.java | 7 +- .../items/materials/FastMaterial.java | 1 + .../materials/StackedAncientPedestal.java | 1 + .../SlimefunRegistryLoadedListener.java | 2 +- .../guizhanss/fastmachines/setup/Groups.java | 1 + .../guizhanss/fastmachines/setup/Items.java | 1 + .../fastmachines/setup/Researches.java | 1 + .../fastmachines/utils/BlockStorageUtils.java | 1 + .../fastmachines/utils/FileUtils.java | 1 + .../fastmachines/utils/ItemUtils.java | 1 + .../guizhanss/fastmachines/utils/Keys.java | 1 + .../fastmachines/utils/MachineUtils.java | 20 +++-- .../fastmachines/utils/RecipeUtils.java | 14 ++-- .../fastmachines/utils/SlimefunItemUtils.java | 1 + 50 files changed, 220 insertions(+), 279 deletions(-) delete mode 100644 src/main/java/net/guizhanss/fastmachines/items/machines/generic/AFastMachine.java create mode 100644 src/main/java/net/guizhanss/fastmachines/items/machines/generic/BasicFastMachine.java diff --git a/LOCALES.md b/LOCALES.md index 02dd8b2..5c33b48 100644 --- a/LOCALES.md +++ b/LOCALES.md @@ -11,7 +11,7 @@ This addon is available in the following languages: ## SlimefunTranslation -This plugin supports [SlimefunTranslation](https://github.com/ybw0014/SlimefunTranslation). +This plugin supports [SlimefunTranslation](https://github.com/ybw0014/SlimefunTranslation) for per-player localization. ## Contribution diff --git a/README.md b/README.md index 70ad69d..44b3d98 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ [English](README.md) | [中文](README.zh_CN.md) -This Slimefun addon extracts the manual machines from [FinalTECH](https://github.com/ecro-fun/FinalTECH) and made some changes to put them into a separate addon. -Fast machines are Slimefun basic machines, but they cost energy to run and can craft items without recipe to be in order. +This Slimefun addon extracts the manual machines from FinalTECH and made some changes to put them into a separate addon. +Fast machines are manual crafters that cost energy to run and can craft items without recipe to be in order. Also supports bulk crafting. Credit: Final_Root @@ -14,6 +14,8 @@ Download from: - [Blob builds](https://blob.build/project/FastMachines) - [Guizhan Builds![Build Status](https://builds.guizhanss.com/ybw0014/FastMachines/master/badge.svg)](https://builds.guizhanss.com/ybw0014/FastMachines/master) +This plugin supports [SlimefunTranslation](https://github.com/ybw0014/SlimefunTranslation) for per-player localization. + ## Configuration ### General Config (config.yml) @@ -26,7 +28,7 @@ Download from: ### Item-specific config (/plugins/Slimefun/Items.yml) -The following settings are available for each individual Fast Machines: +The following settings are available for each individual Fast Machines (default settings may vary due to the original crafter's energy consumption): - `energy-per-use`: The energy cost of each crafting operation. (default: `8`, range: `0` - `2,147,483,647` (2^31-1)) - `energy-capacity`: The energy capacity of the machine. (default: `1024`, range: `0` - `2,147,483,647` (2^31-1)) diff --git a/README.zh_CN.md b/README.zh_CN.md index 7589b79..d8ee3dd 100644 --- a/README.zh_CN.md +++ b/README.zh_CN.md @@ -3,6 +3,7 @@ [English](README.md) | [中文](README.zh_CN.md) 该粘液科技附属将快速机器的玩法从[乱序技艺](https://github.com/ecro-fun/FinalTECH)中提取出来,并进行了一些改动,使其作为一个单独的附属。 +快捷机器是手动的消耗电力来进行合成的机器,无需将配方按顺序摆放,支持批量合成。 鸣谢:Final_Root @@ -22,7 +23,7 @@ ### 物品特定配置(/plugins/Slimefun/Items.yml) -以下设置适用于每个独立的快速机器: +以下设置适用于每个独立的快捷机器(默认值可能因原合成机器的电力消耗而改变): - `energy-per-use`:每次制作操作的电力消耗(默认值:`8`,范围:`0` - `2,147,483,647` (2^31-1)) - `energy-capacity`:机器可存储的电力(默认值:`8`,范围:`0` - `2,147,483,647` (2^31-1)) diff --git a/pom.xml b/pom.xml index 2df2d64..925f69e 100644 --- a/pom.xml +++ b/pom.xml @@ -151,12 +151,5 @@ 8af2379a01 provided - - - net.guizhanss - GuizhanLibPlugin - 1.7.6 - provided - diff --git a/src/main/java/net/guizhanss/fastmachines/core/Registry.java b/src/main/java/net/guizhanss/fastmachines/core/Registry.java index 9a3be7f..4a915db 100644 --- a/src/main/java/net/guizhanss/fastmachines/core/Registry.java +++ b/src/main/java/net/guizhanss/fastmachines/core/Registry.java @@ -9,5 +9,6 @@ @Getter public final class Registry { - private final List allEnabledFastMachines = new ArrayList<>(); + + private final List enabledFastMachines = new ArrayList<>(); } diff --git a/src/main/java/net/guizhanss/fastmachines/core/recipes/IRecipe.java b/src/main/java/net/guizhanss/fastmachines/core/recipes/IRecipe.java index 52ed8b9..9d20bda 100644 --- a/src/main/java/net/guizhanss/fastmachines/core/recipes/IRecipe.java +++ b/src/main/java/net/guizhanss/fastmachines/core/recipes/IRecipe.java @@ -13,6 +13,7 @@ * This interface represents a recipe used by a {@link AbstractFastMachine}. */ public interface IRecipe { + /** * Get all the possible outputs. * @@ -21,11 +22,28 @@ public interface IRecipe { @Nonnull ItemStack[] getAllOutputs(); + /** + * Get the output for the given world. Can use `isDisabledIn` check. + * + * @param world The {@link World}. + * @return The output in the given world. + */ @Nonnull ItemStack getOutput(@Nonnull World world); + /** + * Check if every output is disabled in the given world. + * + * @param world The {@link World}. + * @return True if every output is disabled in the given world. + */ boolean isDisabledInWorld(@Nonnull World world); + /** + * Get the ingredients. + * + * @return A map of ingredients. The key {@link ItemStack} should always have the amount of 1, and the value {@link Integer} should be the amount of the ingredient. + */ @Nonnull Map getInput(); } diff --git a/src/main/java/net/guizhanss/fastmachines/core/recipes/RandomRecipe.java b/src/main/java/net/guizhanss/fastmachines/core/recipes/RandomRecipe.java index 3a87053..724e2b2 100644 --- a/src/main/java/net/guizhanss/fastmachines/core/recipes/RandomRecipe.java +++ b/src/main/java/net/guizhanss/fastmachines/core/recipes/RandomRecipe.java @@ -17,11 +17,12 @@ import net.guizhanss.fastmachines.utils.RecipeUtils; /** - * A {@link RandomRecipe} is a recipe that contains only one fixed output {@link ItemStack}. + * A {@link RandomRecipe} is a recipe that contains only one fixed input {@link ItemStack}. * * @author ybw0014 */ public class RandomRecipe implements IRecipe { + private final List outputs; private final ItemStack input; @@ -51,18 +52,9 @@ public int hashCode() { @Override public String toString() { - return "RandomRecipe{" + - "input=" + input + - ", outputs=" + outputs + - '}'; + return "RandomRecipe{input=" + input + ", outputs=" + outputs + '}'; } - /** - * Check whether all the output items are disabled in the given {@link World}. - * - * @param world The world to check. - * @return True if all the output items are disabled in the given {@link World}. - */ @Override public boolean isDisabledInWorld(@Nonnull World world) { for (ItemStack output : outputs) { @@ -90,7 +82,7 @@ public void addOutput(@Nonnull Collection output) { @Nonnull @Override public Map getInput() { - return RecipeUtils.calculateItems(input); + return RecipeUtils.countItems(input); } @Override diff --git a/src/main/java/net/guizhanss/fastmachines/core/recipes/RawRecipe.java b/src/main/java/net/guizhanss/fastmachines/core/recipes/RawRecipe.java index 049e27a..ffc5efd 100644 --- a/src/main/java/net/guizhanss/fastmachines/core/recipes/RawRecipe.java +++ b/src/main/java/net/guizhanss/fastmachines/core/recipes/RawRecipe.java @@ -27,9 +27,6 @@ public int hashCode() { @Override public String toString() { - return "RawRecipe{" + - "input=" + Arrays.toString(input) + - ", output=" + Arrays.toString(output) + - '}'; + return "RawRecipe{input=" + Arrays.toString(input) + ", output=" + Arrays.toString(output) + '}'; } } diff --git a/src/main/java/net/guizhanss/fastmachines/core/recipes/StandardRecipe.java b/src/main/java/net/guizhanss/fastmachines/core/recipes/StandardRecipe.java index 3be6e3c..174a881 100644 --- a/src/main/java/net/guizhanss/fastmachines/core/recipes/StandardRecipe.java +++ b/src/main/java/net/guizhanss/fastmachines/core/recipes/StandardRecipe.java @@ -20,13 +20,14 @@ * @author ybw0014 */ public class StandardRecipe implements IRecipe { + private final ItemStack output; @Getter private final Map input; public StandardRecipe(ItemStack output, ItemStack... input) { this.output = output; - this.input = RecipeUtils.calculateItems(input); + this.input = RecipeUtils.countItems(input); } public StandardRecipe(ItemStack output, List input) { @@ -50,18 +51,9 @@ public int hashCode() { @Override public String toString() { - return "StandardRecipe{" + - "output=" + output + - ", input=" + input + - '}'; + return "StandardRecipe{" + "output=" + output + ", input=" + input + '}'; } - /** - * Check whether the output item is disabled in the given {@link World}. - * - * @param world The world to check. - * @return True if output item is disabled in the given {@link World}. - */ @Override public boolean isDisabledInWorld(@Nonnull World world) { SlimefunItem sfItem = SlimefunItem.getByItem(output); diff --git a/src/main/java/net/guizhanss/fastmachines/core/services/ConfigurationService.java b/src/main/java/net/guizhanss/fastmachines/core/services/ConfigurationService.java index 2a5e1b8..7f649b6 100644 --- a/src/main/java/net/guizhanss/fastmachines/core/services/ConfigurationService.java +++ b/src/main/java/net/guizhanss/fastmachines/core/services/ConfigurationService.java @@ -1,13 +1,14 @@ package net.guizhanss.fastmachines.core.services; -import lombok.Getter; +import javax.annotation.Nonnull; import net.guizhanss.fastmachines.FastMachines; import net.guizhanss.guizhanlib.slimefun.addon.AddonConfig; -import javax.annotation.Nonnull; +import lombok.Getter; public final class ConfigurationService { + private final AddonConfig config; @Getter diff --git a/src/main/java/net/guizhanss/fastmachines/core/services/IntegrationService.java b/src/main/java/net/guizhanss/fastmachines/core/services/IntegrationService.java index 90a5c69..369e693 100644 --- a/src/main/java/net/guizhanss/fastmachines/core/services/IntegrationService.java +++ b/src/main/java/net/guizhanss/fastmachines/core/services/IntegrationService.java @@ -21,6 +21,7 @@ import lombok.Getter; public final class IntegrationService { + private final FastMachines plugin; @Getter diff --git a/src/main/java/net/guizhanss/fastmachines/core/services/ListenerService.java b/src/main/java/net/guizhanss/fastmachines/core/services/ListenerService.java index 3d6f8a0..0a8416a 100644 --- a/src/main/java/net/guizhanss/fastmachines/core/services/ListenerService.java +++ b/src/main/java/net/guizhanss/fastmachines/core/services/ListenerService.java @@ -6,6 +6,7 @@ import net.guizhanss.fastmachines.listeners.SlimefunRegistryLoadedListener; public final class ListenerService { + public ListenerService(@Nonnull FastMachines plugin) { new SlimefunRegistryLoadedListener(plugin); } diff --git a/src/main/java/net/guizhanss/fastmachines/core/services/LocalizationService.java b/src/main/java/net/guizhanss/fastmachines/core/services/LocalizationService.java index bee7134..41b8673 100644 --- a/src/main/java/net/guizhanss/fastmachines/core/services/LocalizationService.java +++ b/src/main/java/net/guizhanss/fastmachines/core/services/LocalizationService.java @@ -16,6 +16,7 @@ @SuppressWarnings("ConstantConditions") public final class LocalizationService extends SlimefunLocalization { + private static final String FOLDER_NAME = "lang"; private final FastMachines plugin; private final File jarFile; diff --git a/src/main/java/net/guizhanss/fastmachines/items/FastMachinesItems.java b/src/main/java/net/guizhanss/fastmachines/items/FastMachinesItems.java index 20b47c7..e189e74 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/FastMachinesItems.java +++ b/src/main/java/net/guizhanss/fastmachines/items/FastMachinesItems.java @@ -10,6 +10,7 @@ @UtilityClass public final class FastMachinesItems { + // public static final SlimefunItemStack ETERNAL_FIRE = FastMachines.getLocalization().getItem( "ETERNAL_FIRE", diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/generic/AFastMachine.java b/src/main/java/net/guizhanss/fastmachines/items/machines/generic/AFastMachine.java deleted file mode 100644 index 14c651f..0000000 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/generic/AFastMachine.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.guizhanss.fastmachines.items.machines.generic; - -import javax.annotation.ParametersAreNonnullByDefault; - -import org.bukkit.inventory.ItemStack; - -import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; -import io.github.thebusybiscuit.slimefun4.api.items.settings.IntRangeSetting; -import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; - -import net.guizhanss.fastmachines.FastMachines; - -/** - * General abstract class for Fast Machines. - * The default energy per use is 8 and the default capacity is 1024. - * - * @author ybw0014 - */ -public abstract class AFastMachine extends AbstractFastMachine { - - private final IntRangeSetting energyPerUse = new IntRangeSetting(this, "energy-per-use", 0, 8, - Integer.MAX_VALUE); - private final IntRangeSetting energyCapacity = new IntRangeSetting(this, "energy-capacity", 0, 1024, - Integer.MAX_VALUE); - - @ParametersAreNonnullByDefault - protected AFastMachine(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(item, recipeType, recipe); - - addItemSetting(energyPerUse, energyCapacity); - } - - @Override - public int getEnergyPerUse() { - return FastMachines.getConfigService().isFastMachinesUseEnergy() ? - energyPerUse.getValue() : 0; - } - - @Override - public int getCapacity() { - return FastMachines.getConfigService().isFastMachinesUseEnergy() ? - energyCapacity.getValue() : 0; - } -} diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/generic/AbstractFastMachine.java b/src/main/java/net/guizhanss/fastmachines/items/machines/generic/AbstractFastMachine.java index 4be10f5..1990750 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/generic/AbstractFastMachine.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/generic/AbstractFastMachine.java @@ -16,6 +16,7 @@ import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon; import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; +import io.github.thebusybiscuit.slimefun4.api.items.settings.IntRangeSetting; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent; import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType; @@ -37,16 +38,15 @@ import lombok.Getter; /** - * A fast machine is a basic machine but uses energy to fast craft from the given materials. - *

- * Idea from FinalTECH. + * A fast machine is a machine that craft items without putting ingredients in shape, and can bulk craft. * - * @author Final_ROOT * @author ybw0014 */ @SuppressWarnings("ConstantConditions") public abstract class AbstractFastMachine extends TickingMenuBlock implements EnergyNetComponent { + // slots + // @formatter:off static final int[] INPUT_SLOTS = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, @@ -63,6 +63,7 @@ public abstract class AbstractFastMachine extends TickingMenuBlock implements En 36, 37, 38, 39, 40, 41, 45, 46, 47, 48, 49, 50 }; + // @formatter:on static final int SCROLL_UP_SLOT = 42; static final int SCROLL_DOWN_SLOT = 51; static final int CHOICE_SLOT = 52; @@ -72,23 +73,26 @@ public abstract class AbstractFastMachine extends TickingMenuBlock implements En // constants static final int ITEMS_PER_PAGE = PREVIEW_SLOTS.length; // menu items - static final ItemStack NO_ITEM = FastMachines.getLocalization().getItem( - "NO_ITEM", Material.BARRIER); - static final ItemStack SCROLL_UP_ITEM = FastMachines.getLocalization().getItem( - "SCROLL_UP", Heads.ARROW_UP.getTexture()); - static final ItemStack SCROLL_DOWN_ITEM = FastMachines.getLocalization().getItem( - "SCROLL_DOWN", Heads.ARROW_DOWN.getTexture()); - static final ItemStack INFO_ITEM = FastMachines.getLocalization().getItem( - "INFO", Heads.INFO.getTexture()); + static final ItemStack NO_ITEM = FastMachines.getLocalization().getItem("NO_ITEM", Material.BARRIER); + static final ItemStack SCROLL_UP_ITEM = FastMachines.getLocalization().getItem("SCROLL_UP", Heads.ARROW_UP.getTexture()); + static final ItemStack SCROLL_DOWN_ITEM = FastMachines.getLocalization().getItem("SCROLL_DOWN", Heads.ARROW_DOWN.getTexture()); + static final ItemStack INFO_ITEM = FastMachines.getLocalization().getItem("INFO", Heads.INFO.getTexture()); @Getter protected final List recipes = new ArrayList<>(); + private final IntRangeSetting energyPerUseSetting; + private final IntRangeSetting energyCapacitySetting; private final Map caches = new HashMap<>(); @ParametersAreNonnullByDefault - protected AbstractFastMachine(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + protected AbstractFastMachine(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, int energyPerUse, int energyCapacity) { super(Groups.MACHINES, item, recipeType, recipe); + + energyPerUseSetting = new IntRangeSetting(this, "energy-per-use", 0, energyPerUse, Integer.MAX_VALUE); + energyCapacitySetting = new IntRangeSetting(this, "energy-capacity", 0, energyCapacity, Integer.MAX_VALUE); + + addItemSetting(energyPerUseSetting, energyCapacitySetting); } @Nonnull @@ -97,8 +101,14 @@ public EnergyNetComponentType getEnergyComponentType() { return EnergyNetComponentType.CONSUMER; } - // Also getCapacity() which is already defined. - public abstract int getEnergyPerUse(); + public int getEnergyPerUse() { + return FastMachines.getConfigService().isFastMachinesUseEnergy() ? energyPerUseSetting.getValue() : 0; + } + + @Override + public int getCapacity() { + return FastMachines.getConfigService().isFastMachinesUseEnergy() ? energyCapacitySetting.getValue() : 0; + } @Override protected void setup(@Nonnull BlockMenuPreset preset) { @@ -111,11 +121,7 @@ protected void setup(@Nonnull BlockMenuPreset preset) { preset.addItem(SCROLL_DOWN_SLOT, SCROLL_DOWN_ITEM, ChestMenuUtils.getEmptyClickHandler()); preset.addItem(CRAFT_SLOT, getCraftItem(), ChestMenuUtils.getEmptyClickHandler()); - preset.addItem(ENERGY_SLOT, new CustomItemStack( - HeadTexture.ENERGY_CONNECTOR.getAsItemStack(), - " ", - LoreBuilder.power(getEnergyPerUse(), FastMachines.getLocalization().getString("lores.per-craft")) - ), ChestMenuUtils.getEmptyClickHandler()); + preset.addItem(ENERGY_SLOT, new CustomItemStack(HeadTexture.ENERGY_CONNECTOR.getAsItemStack(), " ", LoreBuilder.power(getEnergyPerUse(), FastMachines.getLocalization().getString("lores.per-craft"))), ChestMenuUtils.getEmptyClickHandler()); } @Override @@ -141,7 +147,6 @@ public int[] getInputSlots() { @Override public int[] getOutputSlots() { - // Basic machines should not support cargo access return new int[0]; } @@ -149,7 +154,7 @@ public int[] getOutputSlots() { public void register(@Nonnull SlimefunAddon addon) { super.register(addon); if (!this.isDisabled()) { - FastMachines.getRegistry().getAllEnabledFastMachines().add(this); + FastMachines.getRegistry().getEnabledFastMachines().add(this); } } @@ -170,9 +175,9 @@ protected void onBreak(BlockBreakEvent e, BlockMenu menu) { public abstract void registerRecipes(); /** - * Get the item that shows the craft button of this machine. + * Get the item of the craft button of this machine. * - * @return the item that shows the craft button of this machine. + * @return the craft button item. */ protected abstract ItemStack getCraftItem(); } diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/generic/BasicFastMachine.java b/src/main/java/net/guizhanss/fastmachines/items/machines/generic/BasicFastMachine.java new file mode 100644 index 0000000..acd635e --- /dev/null +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/generic/BasicFastMachine.java @@ -0,0 +1,22 @@ +package net.guizhanss.fastmachines.items.machines.generic; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; +import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; + +/** + * The basic fast machine. + * The default energy per use is 8 and the default capacity is 1024. + * + * @author ybw0014 + */ +public abstract class BasicFastMachine extends AbstractFastMachine { + + @ParametersAreNonnullByDefault + protected BasicFastMachine(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(item, recipeType, recipe, 8, 1024); + } +} diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/generic/FastMachineCache.java b/src/main/java/net/guizhanss/fastmachines/items/machines/generic/FastMachineCache.java index c9e097b..2892d4a 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/generic/FastMachineCache.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/generic/FastMachineCache.java @@ -3,12 +3,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; -import com.google.common.base.Preconditions; - import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -37,23 +36,25 @@ import static net.guizhanss.fastmachines.items.machines.generic.AbstractFastMachine.SCROLL_UP_SLOT; /** - * A cache layer to store some of the data of a Fast Machine. + * A cache layer of Fast Machine. */ public final class FastMachineCache { + private final AbstractFastMachine machine; private final BlockMenu menu; private final BlockPosition blockPosition; - private int inputChecksum; - private Map outputs; + private final Map outputs; + private int invChecksum; private int page = -1; private ItemStack choice; - private boolean crafting = false; + private boolean processing = false; @ParametersAreNonnullByDefault public FastMachineCache(AbstractFastMachine machine, BlockMenu menu) { this.machine = machine; this.menu = menu; this.blockPosition = new BlockPosition(menu.getLocation()); + this.outputs = new ConcurrentHashMap<>(); init(); } @@ -81,19 +82,19 @@ private void init() { amount = 1; } } - if (crafting) { + if (processing) { return false; } - crafting = true; + processing = true; craft(player, amount); - crafting = false; + processing = false; return false; }); } public void tick() { if (FastMachines.getSlimefunTickCount() % 2 == 0) { - findAvailableOutputs(); + generateOutputs(); } if (outputs != null) { updateMenu(); @@ -103,21 +104,24 @@ public void tick() { /** * Find all the available outputs based on the given inputs. */ - private void findAvailableOutputs() { - Map machineInputs = MachineUtils.getMachineInputAmount(menu, INPUT_SLOTS); + private void generateOutputs() { + Map machineInputs = MachineUtils.countItems(menu, INPUT_SLOTS); if (machineInputs.isEmpty()) { return; } + + // check the checksum of the inputs int currentInputChecksum = MachineUtils.checksum(machineInputs); - if (currentInputChecksum == inputChecksum) { + if (currentInputChecksum == invChecksum) { return; } - inputChecksum = currentInputChecksum; - Map newOutputs = new LinkedHashMap<>(); + invChecksum = currentInputChecksum; FastMachines.debug("current machine: {0}, location: {1}", machine.getClass().getSimpleName(), blockPosition); FastMachines.debug("machine inputs: {0}", machineInputs); + outputs.clear(); + // Fetch available recipes based on inputs for (var recipe : machine.getRecipes()) { if (recipe.isDisabledInWorld(blockPosition.getWorld())) { @@ -152,12 +156,11 @@ private void findAvailableOutputs() { // this recipe is available if (outputAmount > 0) { FastMachines.debug("recipe is available, output amount: {0}", outputAmount); - newOutputs.put(recipe, outputAmount); + outputs.put(recipe, outputAmount); } } - FastMachines.debug("outputs: " + newOutputs); - outputs = newOutputs; + FastMachines.debug("outputs: " + outputs); } private void updateMenu() { @@ -213,24 +216,7 @@ private void updateChoice() { @ParametersAreNonnullByDefault private void craft(final Player p, final int amount) { - craft(p, amount, 0); - } - - @ParametersAreNonnullByDefault - private void craft(final Player p, final int amount, int tries) { - Preconditions.checkArgument(amount > 0, "amount must greater than 0"); - - List> outputRecipes; - try { - outputRecipes = new LinkedHashMap<>(outputs).entrySet().stream().toList(); - } catch (Exception e) { - // sometimes player crafts when the machine is calculating outputs, - // so we just delay this one tick and try again - if (tries < 5) { - FastMachines.getScheduler().run(() -> craft(p, amount, tries + 1)); - } - return; - } + var outputRecipes = new LinkedHashMap<>(outputs).entrySet().stream().toList(); // invalid choice, due to previous selection not available anymore if (choice == null) { @@ -249,6 +235,13 @@ private void craft(final Player p, final int amount, int tries) { // check if the machine has enough energy if (FastMachines.getConfigService().isFastMachinesUseEnergy()) { int energyNeeded = machine.getEnergyPerUse() * actualAmount; + + // more than the capacity, need to reduce the crafting amount + if (energyNeeded > machine.getCapacity()) { + actualAmount = (int) Math.floor(machine.getCapacity() * 1.0 / machine.getEnergyPerUse()); + energyNeeded = machine.getEnergyPerUse() * actualAmount; + } + int currentEnergy = machine.getCharge(blockPosition.toLocation()); if (currentEnergy < energyNeeded) { FastMachines.getLocalization().sendMessage(p, "not-enough-energy"); @@ -257,21 +250,24 @@ private void craft(final Player p, final int amount, int tries) { machine.setCharge(blockPosition.toLocation(), currentEnergy - energyNeeded); } - // remove recipe inputs + // check if there are enough ingredients for (var inputEntry : recipe.getKey().getInput().entrySet()) { int requiredAmount = inputEntry.getValue() * actualAmount; - var itemAmount = MachineUtils.getItemAmount(menu, INPUT_SLOTS, inputEntry.getKey()); - // total amount is less than required amount, usually shouldn't happen + var itemAmount = MachineUtils.countItem(menu, INPUT_SLOTS, inputEntry.getKey()); + if (itemAmount.getSecondValue() < requiredAmount) { FastMachines.getLocalization().sendMessage(p, "not-enough-materials"); return; } - // remove items from machine - MachineUtils.removeItems(menu, itemAmount.getFirstValue().stream().mapToInt(Integer::intValue).toArray(), - inputEntry.getKey(), requiredAmount); } - // push the product + // remove ingredients + for (var inputEntry : recipe.getKey().getInput().entrySet()) { + int requiredAmount = inputEntry.getValue() * actualAmount; + MachineUtils.removeItem(menu, INPUT_SLOTS, inputEntry.getKey(), requiredAmount); + } + + // add the product if (recipe.getKey() instanceof RandomRecipe randomRecipe) { boolean machineFull = false; for (int i = 0; i < actualAmount; i++) { diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/infinityexpansion/FastInfinityWorkbench.java b/src/main/java/net/guizhanss/fastmachines/items/machines/infinityexpansion/FastInfinityWorkbench.java index feacaa6..37138c2 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/infinityexpansion/FastInfinityWorkbench.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/infinityexpansion/FastInfinityWorkbench.java @@ -7,7 +7,6 @@ import io.github.mooy1.infinityexpansion.items.blocks.InfinityWorkbench; import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; -import io.github.thebusybiscuit.slimefun4.api.items.settings.IntRangeSetting; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import net.guizhanss.fastmachines.FastMachines; @@ -16,18 +15,11 @@ import net.guizhanss.fastmachines.utils.RecipeUtils; public final class FastInfinityWorkbench extends AbstractFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.RESPAWN_ANCHOR); - private final IntRangeSetting energyPerUse = new IntRangeSetting(this, "energy-per-use", 0, 10_000_000, - Integer.MAX_VALUE); - private final IntRangeSetting energyCapacity = new IntRangeSetting(this, "energy-capacity", 0, 100_000_000, - Integer.MAX_VALUE); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.RESPAWN_ANCHOR); public FastInfinityWorkbench(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(item, recipeType, recipe); - - addItemSetting(energyPerUse, energyCapacity); + super(item, recipeType, recipe, 10_000_000, 100_000_000); } @Override @@ -40,16 +32,4 @@ public void registerRecipes() { protected ItemStack getCraftItem() { return CRAFT_ITEM; } - - @Override - public int getEnergyPerUse() { - return FastMachines.getConfigService().isFastMachinesUseEnergy() ? - energyPerUse.getValue() : 0; - } - - @Override - public int getCapacity() { - return FastMachines.getConfigService().isFastMachinesUseEnergy() ? - energyCapacity.getValue() : 0; - } } diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/infinityexpansion/FastMobDataInfuser.java b/src/main/java/net/guizhanss/fastmachines/items/machines/infinityexpansion/FastMobDataInfuser.java index 7bf6bc4..4852c47 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/infinityexpansion/FastMobDataInfuser.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/infinityexpansion/FastMobDataInfuser.java @@ -7,7 +7,6 @@ import io.github.mooy1.infinityexpansion.items.mobdata.MobDataInfuser; import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; -import io.github.thebusybiscuit.slimefun4.api.items.settings.IntRangeSetting; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import net.guizhanss.fastmachines.FastMachines; @@ -16,18 +15,11 @@ import net.guizhanss.fastmachines.utils.RecipeUtils; public final class FastMobDataInfuser extends AbstractFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.LODESTONE); - private final IntRangeSetting energyPerUse = new IntRangeSetting(this, "energy-per-use", 0, 20_000, - Integer.MAX_VALUE); - private final IntRangeSetting energyCapacity = new IntRangeSetting(this, "energy-capacity", 0, 200_000, - Integer.MAX_VALUE); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.LODESTONE); public FastMobDataInfuser(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(item, recipeType, recipe); - - addItemSetting(energyPerUse, energyCapacity); + super(item, recipeType, recipe, 20_000, 200_000); } @Override @@ -40,16 +32,4 @@ public void registerRecipes() { protected ItemStack getCraftItem() { return CRAFT_ITEM; } - - @Override - public int getEnergyPerUse() { - return FastMachines.getConfigService().isFastMachinesUseEnergy() ? - energyPerUse.getValue() : 0; - } - - @Override - public int getCapacity() { - return FastMachines.getConfigService().isFastMachinesUseEnergy() ? - energyCapacity.getValue() : 0; - } } diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimeframe/FastSlimeFrameFoundry.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimeframe/FastSlimeFrameFoundry.java index fcf4210..58c3167 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimeframe/FastSlimeFrameFoundry.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimeframe/FastSlimeFrameFoundry.java @@ -9,13 +9,12 @@ import me.voper.slimeframe.implementation.SFrameStacks; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public class FastSlimeFrameFoundry extends AFastMachine { +public class FastSlimeFrameFoundry extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.ANVIL); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.ANVIL); public FastSlimeFrameFoundry(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastAncientAltar.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastAncientAltar.java index 7275b4f..3f2322b 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastAncientAltar.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastAncientAltar.java @@ -13,13 +13,12 @@ import net.guizhanss.fastmachines.FastMachines; import net.guizhanss.fastmachines.core.recipes.RawRecipe; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastAncientAltar extends AFastMachine { +public final class FastAncientAltar extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.ENCHANTING_TABLE); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.ENCHANTING_TABLE); public FastAncientAltar(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastArmorForge.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastArmorForge.java index 0d73c7a..86b6e35 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastArmorForge.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastArmorForge.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastArmorForge extends AFastMachine { +public final class FastArmorForge extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.ANVIL); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.ANVIL); public FastArmorForge(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastComposter.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastComposter.java index dc3fbc3..009c262 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastComposter.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastComposter.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastComposter extends AFastMachine { +public final class FastComposter extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.CAULDRON); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.CAULDRON); public FastComposter(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastCompressor.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastCompressor.java index dccb60d..156c48c 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastCompressor.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastCompressor.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastCompressor extends AFastMachine { +public final class FastCompressor extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.DISPENSER); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.DISPENSER); public FastCompressor(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastEnhancedCraftingTable.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastEnhancedCraftingTable.java index deac200..e1b7ed4 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastEnhancedCraftingTable.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastEnhancedCraftingTable.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastEnhancedCraftingTable extends AFastMachine { +public final class FastEnhancedCraftingTable extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.CRAFTING_TABLE); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.CRAFTING_TABLE); public FastEnhancedCraftingTable(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastGrindStone.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastGrindStone.java index 7a4260d..dd91d5c 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastGrindStone.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastGrindStone.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastGrindStone extends AFastMachine { +public final class FastGrindStone extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.DISPENSER); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.DISPENSER); public FastGrindStone(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastJuicer.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastJuicer.java index df8a989..94dfb86 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastJuicer.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastJuicer.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastJuicer extends AFastMachine { +public final class FastJuicer extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.STONECUTTER); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.STONECUTTER); public FastJuicer(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastMagicWorkbench.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastMagicWorkbench.java index e6a6f43..1ba57fe 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastMagicWorkbench.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastMagicWorkbench.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastMagicWorkbench extends AFastMachine { +public final class FastMagicWorkbench extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.CRAFTING_TABLE); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.CRAFTING_TABLE); public FastMagicWorkbench(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastOreCrusher.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastOreCrusher.java index 97c5999..a8fec17 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastOreCrusher.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastOreCrusher.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastOreCrusher extends AFastMachine { +public final class FastOreCrusher extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.DISPENSER); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.DISPENSER); public FastOreCrusher(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastOreWasher.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastOreWasher.java index bf3d9ed..71185a2 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastOreWasher.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastOreWasher.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastOreWasher extends AFastMachine { +public final class FastOreWasher extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.CAULDRON); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.CAULDRON); public FastOreWasher(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastPanningMachine.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastPanningMachine.java index 9f87b37..acdc6be 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastPanningMachine.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastPanningMachine.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastPanningMachine extends AFastMachine { +public final class FastPanningMachine extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.CAULDRON); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.CAULDRON); public FastPanningMachine(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastPressureChamber.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastPressureChamber.java index 52853d3..2f77b83 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastPressureChamber.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastPressureChamber.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastPressureChamber extends AFastMachine { +public final class FastPressureChamber extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.BLAST_FURNACE); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.BLAST_FURNACE); public FastPressureChamber(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastSmeltery.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastSmeltery.java index 7ccd402..523f4f9 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastSmeltery.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastSmeltery.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastSmeltery extends AFastMachine { +public final class FastSmeltery extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.FURNACE); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.FURNACE); public FastSmeltery(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastTableSaw.java b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastTableSaw.java index 434bc72..050b24b 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastTableSaw.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/slimefun/FastTableSaw.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastTableSaw extends AFastMachine { +public final class FastTableSaw extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.STONECUTTER); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.STONECUTTER); public FastTableSaw(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/vanilla/FastCraftingTable.java b/src/main/java/net/guizhanss/fastmachines/items/machines/vanilla/FastCraftingTable.java index 54eec8a..83f0cad 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/vanilla/FastCraftingTable.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/vanilla/FastCraftingTable.java @@ -9,13 +9,12 @@ import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastCraftingTable extends AFastMachine { +public final class FastCraftingTable extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.CRAFTING_TABLE); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.CRAFTING_TABLE); public FastCraftingTable(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/machines/vanilla/FastFurnace.java b/src/main/java/net/guizhanss/fastmachines/items/machines/vanilla/FastFurnace.java index a301c7b..d10f942 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/machines/vanilla/FastFurnace.java +++ b/src/main/java/net/guizhanss/fastmachines/items/machines/vanilla/FastFurnace.java @@ -8,13 +8,12 @@ import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import net.guizhanss.fastmachines.FastMachines; -import net.guizhanss.fastmachines.items.machines.generic.AFastMachine; +import net.guizhanss.fastmachines.items.machines.generic.BasicFastMachine; import net.guizhanss.fastmachines.utils.RecipeUtils; -public final class FastFurnace extends AFastMachine { +public final class FastFurnace extends BasicFastMachine { - private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem( - "CRAFT", Material.FURNACE); + private static final ItemStack CRAFT_ITEM = FastMachines.getLocalization().getItem("CRAFT", Material.FURNACE); public FastFurnace(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/materials/FastMaterial.java b/src/main/java/net/guizhanss/fastmachines/items/materials/FastMaterial.java index 3ecbc5a..f7149a9 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/materials/FastMaterial.java +++ b/src/main/java/net/guizhanss/fastmachines/items/materials/FastMaterial.java @@ -11,6 +11,7 @@ import net.guizhanss.fastmachines.setup.Groups; public class FastMaterial extends UnplaceableBlock { + @ParametersAreNonnullByDefault public FastMaterial(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(Groups.MATERIALS, item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/items/materials/StackedAncientPedestal.java b/src/main/java/net/guizhanss/fastmachines/items/materials/StackedAncientPedestal.java index 921d34e..23614d9 100644 --- a/src/main/java/net/guizhanss/fastmachines/items/materials/StackedAncientPedestal.java +++ b/src/main/java/net/guizhanss/fastmachines/items/materials/StackedAncientPedestal.java @@ -16,6 +16,7 @@ import net.guizhanss.guizhanlib.minecraft.utils.InventoryUtil; public final class StackedAncientPedestal extends FastMaterial { + @ParametersAreNonnullByDefault public StackedAncientPedestal(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(item, recipeType, recipe); diff --git a/src/main/java/net/guizhanss/fastmachines/listeners/SlimefunRegistryLoadedListener.java b/src/main/java/net/guizhanss/fastmachines/listeners/SlimefunRegistryLoadedListener.java index 0db47c5..0a52827 100644 --- a/src/main/java/net/guizhanss/fastmachines/listeners/SlimefunRegistryLoadedListener.java +++ b/src/main/java/net/guizhanss/fastmachines/listeners/SlimefunRegistryLoadedListener.java @@ -21,7 +21,7 @@ public SlimefunRegistryLoadedListener(@Nonnull FastMachines plugin) { @EventHandler public void onRegistryLoaded(@Nonnull SlimefunItemRegistryFinalizedEvent e) { - FastMachines.getRegistry().getAllEnabledFastMachines().forEach(machine -> { + FastMachines.getRegistry().getEnabledFastMachines().forEach(machine -> { FastMachines.debug("Registering recipes for {0}", machine.getClass().getSimpleName()); try { machine.registerRecipes(); diff --git a/src/main/java/net/guizhanss/fastmachines/setup/Groups.java b/src/main/java/net/guizhanss/fastmachines/setup/Groups.java index ec18c99..117d22a 100644 --- a/src/main/java/net/guizhanss/fastmachines/setup/Groups.java +++ b/src/main/java/net/guizhanss/fastmachines/setup/Groups.java @@ -13,6 +13,7 @@ @UtilityClass public final class Groups { + public static final NestedItemGroup MAIN = new NestedItemGroup( Keys.get("fast_machines"), FastMachines.getLocalization().getItem( diff --git a/src/main/java/net/guizhanss/fastmachines/setup/Items.java b/src/main/java/net/guizhanss/fastmachines/setup/Items.java index 1ce248c..5e28ef9 100644 --- a/src/main/java/net/guizhanss/fastmachines/setup/Items.java +++ b/src/main/java/net/guizhanss/fastmachines/setup/Items.java @@ -38,6 +38,7 @@ @UtilityClass public final class Items { + public static void setup(FastMachines plugin) { // new FastMaterial(FastMachinesItems.ETERNAL_FIRE, RecipeType.MAGIC_WORKBENCH, new ItemStack[] { diff --git a/src/main/java/net/guizhanss/fastmachines/setup/Researches.java b/src/main/java/net/guizhanss/fastmachines/setup/Researches.java index fb6b440..3ee2716 100644 --- a/src/main/java/net/guizhanss/fastmachines/setup/Researches.java +++ b/src/main/java/net/guizhanss/fastmachines/setup/Researches.java @@ -9,6 +9,7 @@ @UtilityClass public final class Researches { + public static final Research MATERIALS = new Research( Keys.get("materials"), Keys.get("materials").hashCode(), diff --git a/src/main/java/net/guizhanss/fastmachines/utils/BlockStorageUtils.java b/src/main/java/net/guizhanss/fastmachines/utils/BlockStorageUtils.java index 7609401..56e5bcd 100644 --- a/src/main/java/net/guizhanss/fastmachines/utils/BlockStorageUtils.java +++ b/src/main/java/net/guizhanss/fastmachines/utils/BlockStorageUtils.java @@ -18,6 +18,7 @@ */ @UtilityClass public final class BlockStorageUtils { + @ParametersAreNonnullByDefault public static int getInt(Location location, String key) { return getInt(location, key, 0); diff --git a/src/main/java/net/guizhanss/fastmachines/utils/FileUtils.java b/src/main/java/net/guizhanss/fastmachines/utils/FileUtils.java index beac0b6..f4e8027 100644 --- a/src/main/java/net/guizhanss/fastmachines/utils/FileUtils.java +++ b/src/main/java/net/guizhanss/fastmachines/utils/FileUtils.java @@ -16,6 +16,7 @@ @UtilityClass public final class FileUtils { + @Nonnull @ParametersAreNonnullByDefault public static List listYmlFilesInJar(File jarFile, String folderName) { diff --git a/src/main/java/net/guizhanss/fastmachines/utils/ItemUtils.java b/src/main/java/net/guizhanss/fastmachines/utils/ItemUtils.java index 96b05b7..1f310d2 100644 --- a/src/main/java/net/guizhanss/fastmachines/utils/ItemUtils.java +++ b/src/main/java/net/guizhanss/fastmachines/utils/ItemUtils.java @@ -17,6 +17,7 @@ @UtilityClass public final class ItemUtils { + /** * Compare two {@link ItemStack}s and check if they are similar. * diff --git a/src/main/java/net/guizhanss/fastmachines/utils/Keys.java b/src/main/java/net/guizhanss/fastmachines/utils/Keys.java index 13787d0..73bbdd1 100644 --- a/src/main/java/net/guizhanss/fastmachines/utils/Keys.java +++ b/src/main/java/net/guizhanss/fastmachines/utils/Keys.java @@ -13,6 +13,7 @@ @SuppressWarnings("ConstantConditions") @UtilityClass public final class Keys { + public static NamespacedKey get(@Nonnull String name) { Preconditions.checkArgument(name != null, "name cannot be null"); diff --git a/src/main/java/net/guizhanss/fastmachines/utils/MachineUtils.java b/src/main/java/net/guizhanss/fastmachines/utils/MachineUtils.java index f2d9705..c2a9983 100644 --- a/src/main/java/net/guizhanss/fastmachines/utils/MachineUtils.java +++ b/src/main/java/net/guizhanss/fastmachines/utils/MachineUtils.java @@ -23,8 +23,10 @@ @UtilityClass public final class MachineUtils { + /** - * Get the amount map of machine inputs. + * Get a map that contains the amount of each {@link ItemStack} in machine slots. + * The key is the {@link ItemStack} with amount of 1, and the value is the amount of the {@link ItemStack}. * * @param menu The {@link BlockMenu} of machine. * @param slots The slots of machine input. @@ -32,10 +34,16 @@ public final class MachineUtils { */ @Nonnull @ParametersAreNonnullByDefault - public static Map getMachineInputAmount(BlockMenu menu, int[] slots) { - return RecipeUtils.calculateItems(getItems(menu, slots)); + public static Map countItems(BlockMenu menu, int[] slots) { + return RecipeUtils.countItems(getItems(menu, slots)); } + /** + * Calculate the checksum of given item map. + * + * @param map The item map to calculate checksum. + * @return The checksum of given item map. + */ @ParametersAreNonnullByDefault public static int checksum(Map map) { int checksum = 0; @@ -46,7 +54,7 @@ public static int checksum(Map map) { } /** - * Retrive all the {@link ItemStack} inside given machine slots. + * Retrieve all the {@link ItemStack} inside given machine slots. * * @param menu The {@link BlockMenu} of machine. * @param slots The slots of machine. @@ -79,7 +87,7 @@ public static ItemStack[] getItems(BlockMenu menu, int[] slots) { */ @Nonnull @ParametersAreNonnullByDefault - public static Pair, Integer> getItemAmount(BlockMenu menu, int[] slots, ItemStack item) { + public static Pair, Integer> countItem(BlockMenu menu, int[] slots, ItemStack item) { int amount = 0; List slotList = new ArrayList<>(); for (int slot : slots) { @@ -104,7 +112,7 @@ public static Pair, Integer> getItemAmount(BlockMenu menu, int[] s * @param amount The amount of {@link ItemStack} to remove. * @return Whether the item is removed. */ - public static boolean removeItems(BlockMenu menu, int[] slots, ItemStack item, int amount) { + public static boolean removeItem(BlockMenu menu, int[] slots, ItemStack item, int amount) { for (int slot : slots) { ItemStack slotItem = menu.getItemInSlot(slot); if (slotItem == null || slotItem.getType().isAir()) { diff --git a/src/main/java/net/guizhanss/fastmachines/utils/RecipeUtils.java b/src/main/java/net/guizhanss/fastmachines/utils/RecipeUtils.java index dc2ef3d..773f196 100644 --- a/src/main/java/net/guizhanss/fastmachines/utils/RecipeUtils.java +++ b/src/main/java/net/guizhanss/fastmachines/utils/RecipeUtils.java @@ -47,6 +47,7 @@ @UtilityClass @SuppressWarnings("ConstantConditions") public final class RecipeUtils { + private static final String MSG_ID_NULL = "id cannot be null"; private static final String MSG_RECIPE_NULL = "recipes cannot be null"; // This comparator is just used to check if 2 ItemStacks are similar. @@ -78,14 +79,14 @@ private static boolean isItemSimilar(ItemStack aItem, ItemStack bItem) { } /** - * Calculate the amount of each item in the given array. + * Count the amount of each item in the given array. * Similar items will be merged by * {@link SlimefunUtils#isItemSimilar(ItemStack, ItemStack, boolean, boolean, boolean)}. * * @param items The array of {@link ItemStack}. * @return A {@link Map} that contains the amount of each item. */ - public static Map calculateItems(@Nonnull ItemStack... items) { + public static Map countItems(@Nonnull ItemStack... items) { Preconditions.checkArgument(items != null, "items cannot be null"); Map result = new HashMap<>(); for (var item : items) { @@ -110,8 +111,9 @@ public static Map calculateItems(@Nonnull ItemStack... items } /** - * Find a {@link RandomRecipe} in all the recipes, with the given {@link ItemStack} input. If such recipe is - * found, append output to it, then return true. Otherwise, nothing happens and return false. + * Find a {@link RandomRecipe} in all the recipes, with the given {@link ItemStack} input. + * If such recipe is found, append output to it, then return true. + * Otherwise, nothing happens and return false. * * @param recipes The {@link List} of {@link IRecipe}. * @param input The input {@link ItemStack} which will be used to find. @@ -144,7 +146,7 @@ public static void registerRecipes(List recipes, List pendin ItemStack[] lastInput = new ItemStack[0]; List storedOutput = new ArrayList<>(); - // put recipes that with same input together + // try to put recipes that with same input together int tries = 0; while (tries < 3) { try { @@ -161,7 +163,6 @@ public static void registerRecipes(List recipes, List pendin FastMachines.debug("raw recipes: {0}", pendingRecipes); - // shut up, sonar for (var recipe : pendingRecipes) { ItemStack[] input = recipe.input(); ItemStack[] output = recipe.output(); @@ -445,7 +446,6 @@ private static void registerVanillaRecipe(List recip * It must have a static MachineRecipeType field TYPE. * * @param clazz The class of the InfinityExpansion item. - * * @return The list of {@link RawRecipe}s parsed from the item. */ @Nonnull diff --git a/src/main/java/net/guizhanss/fastmachines/utils/SlimefunItemUtils.java b/src/main/java/net/guizhanss/fastmachines/utils/SlimefunItemUtils.java index f6c109f..922285f 100644 --- a/src/main/java/net/guizhanss/fastmachines/utils/SlimefunItemUtils.java +++ b/src/main/java/net/guizhanss/fastmachines/utils/SlimefunItemUtils.java @@ -11,6 +11,7 @@ @UtilityClass public final class SlimefunItemUtils { + public static boolean isDisabled(@Nullable ItemStack item) { SlimefunItem sfItem = SlimefunItem.getByItem(item); return sfItem != null && sfItem.isDisabled();