diff --git a/.github/workflows/auto-approve.yml b/.github/workflows/auto-approve.yml index a183eb596..55e0f5dc2 100644 --- a/.github/workflows/auto-approve.yml +++ b/.github/workflows/auto-approve.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Approve via actions - uses: hmarr/auto-approve-action@v2.2.1 + uses: hmarr/auto-approve-action@v2.4.0 if: github.actor == 'TheBusyBot' || github.actor == 'renovate[bot]' with: github-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/discord-webhook.yml b/.github/workflows/discord-webhook.yml index fce2d4657..3e874e993 100644 --- a/.github/workflows/discord-webhook.yml +++ b/.github/workflows/discord-webhook.yml @@ -24,7 +24,7 @@ jobs: uses: actions/checkout@v3.0.2 - name: Set up Java JDK 17 - uses: actions/setup-java@v3.4.1 + uses: actions/setup-java@v3.5.1 with: distribution: 'adopt' java-version: '17' diff --git a/.github/workflows/maven-compiler.yml b/.github/workflows/maven-compiler.yml index ee43ea34f..99aa5e949 100644 --- a/.github/workflows/maven-compiler.yml +++ b/.github/workflows/maven-compiler.yml @@ -27,7 +27,7 @@ jobs: uses: actions/checkout@v3 - name: Set up JDK 17 - uses: actions/setup-java@v3.4.1 + uses: actions/setup-java@v3.5.1 with: distribution: 'adopt' java-version: '17' diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index b7d75e8f5..54380d8ea 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -24,7 +24,7 @@ jobs: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3.4.1 + uses: actions/setup-java@v3.5.1 with: distribution: 'adopt' java-version: '17' diff --git a/CHANGELOG.md b/CHANGELOG.md index 462ee5fa2..e4a9a61a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,8 @@ * (API) Added a method for item groups to allow addons to choose if they want to allow items from other addons * Added a new option to Eletric Gold Pans: "override-output-limit" * Added "Mud -> Clay" recipe to the Auto Drier +* Added a third tier for Freezers +* Added Glow Berry Juice #### Changes * Tree Growth Accelerators can now actually cause the Tree to fully grow (1.17+ only) @@ -51,12 +53,15 @@ * "Connected / Not connected" messages for cargo nodes are now sent via the actionbar * "/sf stats" can no longer be used if researching is disabled * "/sf research" can no longer be used if researching is disabled +* Removed the Hercules Pickaxe from Slimefun #### Fixes * Fixed #3597 * Fixed an issue related to "Bee Wings" * Fixed #3573 * Fixed "round-robin" mode for cargo networks being very unreliable +* Fixed #3664 +* Fixed #3651 ## Release Candidate 32 (26 Jun 2022) https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#32 diff --git a/pom.xml b/pom.xml index e6e15e05b..3f005ab24 100644 --- a/pom.xml +++ b/pom.xml @@ -191,7 +191,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.3.0 + 3.4.0 @@ -239,7 +239,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.4.0 + 3.4.1 ${project.basedir} @@ -366,7 +366,7 @@ com.konghq unirest-java - 3.13.10 + 3.13.11 compile @@ -382,13 +382,13 @@ org.junit.jupiter junit-jupiter - 5.9.0 + 5.9.1 test org.mockito mockito-core - 4.6.1 + 4.8.0 test @@ -411,7 +411,7 @@ com.sk89q.worldedit worldedit-core - 7.2.11 + 7.2.12 provided @@ -425,7 +425,7 @@ com.sk89q.worldedit worldedit-bukkit - 7.2.11 + 7.2.12 provided @@ -439,7 +439,7 @@ com.gmail.nossr50.mcMMO mcMMO - 2.1.216 + 2.1.217 provided @@ -481,7 +481,7 @@ com.github.LoneDev6 itemsadder-api - 3.2.3c + 3.2.3-r8 provided @@ -495,7 +495,7 @@ net.imprex orebfuscator-api - 5.2.6 + 5.3.0 provided diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerBackpack.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerBackpack.java index 5d942114f..5af1f1fe7 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerBackpack.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerBackpack.java @@ -1,10 +1,13 @@ package io.github.thebusybiscuit.slimefun4.api.player; import java.io.File; +import java.util.ArrayList; +import java.util.Iterator; import javax.annotation.Nonnull; import org.bukkit.Bukkit; +import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -132,6 +135,20 @@ public class PlayerBackpack { }); } + /** + * This will close the {@link Inventory} of this backpack for every {@link Player} + * that has opened it. + */ + public void closeForAll() { + Slimefun.runSync(() -> { + Iterator iterator = new ArrayList<>(inventory.getViewers()).iterator(); + + while (iterator.hasNext()) { + iterator.next().closeInventory(); + } + }); + } + /** * This will change the current size of this Backpack to the specified size. * diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/recipes/RecipeType.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/recipes/RecipeType.java index 2e5cf928e..e22c947b6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/recipes/RecipeType.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/recipes/RecipeType.java @@ -55,6 +55,7 @@ public class RecipeType implements Keyed { public static final RecipeType MOB_DROP = new RecipeType(new NamespacedKey(Slimefun.instance(), "mob_drop"), new CustomItemStack(Material.IRON_SWORD, "&bMob Drop"), RecipeType::registerMobDrop, "", "&rKill the specified Mob to obtain this Item"); public static final RecipeType BARTER_DROP = new RecipeType(new NamespacedKey(Slimefun.instance(), "barter_drop"), new CustomItemStack(Material.GOLD_INGOT, "&bBarter Drop"), RecipeType::registerBarterDrop, "&aBarter with piglins for a chance", "&ato obtain this item"); + public static final RecipeType INTERACT = new RecipeType(new NamespacedKey(Slimefun.instance(), "interact"), new CustomItemStack(Material.PLAYER_HEAD, "&bInteract", "", "&a&oRight click with this item")); public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new NamespacedKey(Slimefun.instance(), "heated_pressure_chamber"), SlimefunItems.HEATED_PRESSURE_CHAMBER); public static final RecipeType FOOD_FABRICATOR = new RecipeType(new NamespacedKey(Slimefun.instance(), "food_fabricator"), SlimefunItems.FOOD_FABRICATOR); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/multiblocks/MultiBlock.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/multiblocks/MultiBlock.java index 19d1a000d..4175b2052 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/multiblocks/MultiBlock.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/multiblocks/MultiBlock.java @@ -149,7 +149,6 @@ public class MultiBlock { public boolean isSymmetric() { return isSymmetric; } - @Override public String toString() { return "MultiBlock (" + item.getId() + ") {" + Arrays.toString(blocks) + "}"; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunItems.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunItems.java index 7fba00349..f0bd20081 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunItems.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunItems.java @@ -148,6 +148,7 @@ public final class SlimefunItems { public static final SlimefunItemStack CARROT_JUICE = new SlimefunItemStack("CARROT_JUICE", Color.ORANGE, new PotionEffect(PotionEffectType.SATURATION, 5, 0), "&6Carrot Juice", "", LoreBuilder.hunger(3)); public static final SlimefunItemStack PUMPKIN_JUICE = new SlimefunItemStack("PUMPKIN_JUICE", Color.ORANGE, new PotionEffect(PotionEffectType.SATURATION, 5, 0), "&6Pumpkin Juice", "", LoreBuilder.hunger(3)); public static final SlimefunItemStack SWEET_BERRY_JUICE = new SlimefunItemStack("SWEET_BERRY_JUICE", Color.RED, new PotionEffect(PotionEffectType.SATURATION, 5, 0), "&cSweet Berry Juice", "", LoreBuilder.hunger(3)); + public static final SlimefunItemStack GLOW_BERRY_JUICE = new SlimefunItemStack("GLOW_BERRY_JUICE", Color.ORANGE, new PotionEffect(PotionEffectType.SATURATION, 5, 0), "&6Glow Berry Juice", "", LoreBuilder.hunger(3)); public static final SlimefunItemStack GOLDEN_APPLE_JUICE = new SlimefunItemStack("GOLDEN_APPLE_JUICE", Color.YELLOW, new PotionEffect(PotionEffectType.ABSORPTION, 20 * 20, 0), "&bGolden Apple Juice"); public static final SlimefunItemStack BEEF_JERKY = new SlimefunItemStack("BEEF_JERKY", Material.COOKED_BEEF, "&6Beef Jerky", "", "&fExtra saturating!"); @@ -203,7 +204,6 @@ public final class SlimefunItems { public static final SlimefunItemStack SMELTERS_PICKAXE = new SlimefunItemStack("SMELTERS_PICKAXE", Material.DIAMOND_PICKAXE, "&6Smelter's Pickaxe", "&c&lAuto-Smelting", "", "&9Works with Fortune"); public static final SlimefunItemStack LUMBER_AXE = new SlimefunItemStack("LUMBER_AXE", Material.DIAMOND_AXE, "&6Lumber Axe", "&a&oCuts down the whole Tree..."); public static final SlimefunItemStack PICKAXE_OF_CONTAINMENT = new SlimefunItemStack("PICKAXE_OF_CONTAINMENT", Material.IRON_PICKAXE, "&cPickaxe of Containment", "", "&9Can pickup Spawners"); - public static final SlimefunItemStack HERCULES_PICKAXE = new SlimefunItemStack("HERCULES_PICKAXE", Material.IRON_PICKAXE, "&9Hercules' Pickaxe", "", "&4DEPRECATED - Will be removed soon", "", "&fSo powerful that it", "&fcrushes all mined Ores", "&finto Dust..."); public static final SlimefunItemStack EXPLOSIVE_PICKAXE = new SlimefunItemStack("EXPLOSIVE_PICKAXE", Material.DIAMOND_PICKAXE, "&eExplosive Pickaxe", "", "&fAllows you to mine a good bit", "&fof Blocks at once...", "", "&9Works with Fortune"); public static final SlimefunItemStack EXPLOSIVE_SHOVEL = new SlimefunItemStack("EXPLOSIVE_SHOVEL", Material.DIAMOND_SHOVEL, "&eExplosive Shovel", "", "&fAllows you to mine a good bit", "&fof diggable Blocks at once..."); public static final SlimefunItemStack PICKAXE_OF_THE_SEEKER = new SlimefunItemStack("PICKAXE_OF_THE_SEEKER", Material.DIAMOND_PICKAXE, "&aPickaxe of the Seeker", "&fWill always point you to the nearest Ore", "&fbut might get damaged when doing it", "", "&7&eRight Click&7 to be pointed to the nearest Ore"); @@ -212,9 +212,6 @@ public final class SlimefunItems { public static final SlimefunItemStack CLIMBING_PICK = new SlimefunItemStack("CLIMBING_PICK", Material.IRON_PICKAXE, "&bClimbing Pick", "", "&fAllows you to climb certain surfaces", "&fby right-clicking.", "&fEnchant this pick with Efficiency to", "&fclimb even faster!"); static { - HERCULES_PICKAXE.addUnsafeEnchantment(Enchantment.DURABILITY, 5); - HERCULES_PICKAXE.addUnsafeEnchantment(Enchantment.DIG_SPEED, 3); - COBALT_PICKAXE.addUnsafeEnchantment(Enchantment.DURABILITY, 10); COBALT_PICKAXE.addUnsafeEnchantment(Enchantment.DIG_SPEED, 6); } @@ -831,6 +828,7 @@ public final class SlimefunItems { public static final SlimefunItemStack FREEZER = new SlimefunItemStack("FREEZER", Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer", "", LoreBuilder.machine(MachineTier.ADVANCED, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerBuffer(256), LoreBuilder.powerPerSecond(18)); public static final SlimefunItemStack FREEZER_2 = new SlimefunItemStack("FREEZER_2", Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer &7(&eII&7)", "", LoreBuilder.machine(MachineTier.END_GAME, MachineType.MACHINE), LoreBuilder.speed(2), LoreBuilder.powerBuffer(256), LoreBuilder.powerPerSecond(30)); + public static final SlimefunItemStack FREEZER_3 = new SlimefunItemStack("FREEZER_3", Material.LIGHT_GRAY_STAINED_GLASS, "&bFreezer &7(&eIII&7)", "", LoreBuilder.machine(MachineTier.END_GAME, MachineType.MACHINE), LoreBuilder.speed(3), LoreBuilder.powerBuffer(256), LoreBuilder.powerPerSecond(42)); public static final SlimefunItemStack ELECTRIC_GOLD_PAN = new SlimefunItemStack("ELECTRIC_GOLD_PAN", Material.BROWN_TERRACOTTA, "&6Electric Gold Pan", "", LoreBuilder.machine(MachineTier.BASIC, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerPerSecond(2)); public static final SlimefunItemStack ELECTRIC_GOLD_PAN_2 = new SlimefunItemStack("ELECTRIC_GOLD_PAN_2", Material.BROWN_TERRACOTTA, "&6Electric Gold Pan &7(&eII&7)", "", LoreBuilder.machine(MachineTier.BASIC, MachineType.MACHINE), LoreBuilder.speed(3), LoreBuilder.powerPerSecond(4)); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/HiddenItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/HiddenItem.java new file mode 100644 index 000000000..dcfaa8a10 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/HiddenItem.java @@ -0,0 +1,27 @@ +package io.github.thebusybiscuit.slimefun4.implementation.items; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup; +import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem; +import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; +import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; +import io.github.thebusybiscuit.slimefun4.core.attributes.NotConfigurable; + +/** + * The {@link HiddenItem} is a {@link NotConfigurable} {@link SlimefunItem} + * that is hidden from the Slimefun guide. + * + * @author char321 + * + */ +public class HiddenItem extends SlimefunItem implements NotConfigurable { + + @ParametersAreNonnullByDefault + public HiddenItem(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(itemGroup, item, recipeType, recipe); + this.setHidden(true); + } +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractCraftingTable.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractCraftingTable.java index c45a8c246..4adf57bc9 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractCraftingTable.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AbstractCraftingTable.java @@ -123,7 +123,11 @@ abstract class AbstractCraftingTable extends MultiBlockMachine { PlayerProfile.fromUUID(UUID.fromString(idSplit[0]), profile -> { Optional optional = profile.getBackpack(Integer.parseInt(idSplit[1])); - optional.ifPresent(playerBackpack -> playerBackpack.setSize(size)); + optional.ifPresent(playerBackpack -> { + // Safety feature for Issue #3664 + playerBackpack.closeForAll(); + playerBackpack.setSize(size); + }); }); return Optional.of(id); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/TableSaw.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/TableSaw.java index 7af545e01..0e920cbe0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/TableSaw.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/TableSaw.java @@ -44,7 +44,13 @@ public class TableSaw extends MultiBlockMachine { @ParametersAreNonnullByDefault public TableSaw(ItemGroup group, SlimefunItemStack item) { - super(group, item, new ItemStack[] { null, null, null, new ItemStack(Material.SMOOTH_STONE_SLAB), new ItemStack(Material.STONECUTTER), new ItemStack(Material.SMOOTH_STONE_SLAB), null, new ItemStack(Material.IRON_BLOCK), null }, BlockFace.SELF); + // @formatter:off + super(group, item, new ItemStack[] { + null, null, null, + new ItemStack(Material.SMOOTH_STONE_SLAB), new ItemStack(Material.STONECUTTER), new ItemStack(Material.SMOOTH_STONE_SLAB), + null, new ItemStack(Material.IRON_BLOCK), null + }, BlockFace.SELF); + // @formatter:on for (Material log : Tag.LOGS.getValues()) { Optional planks = getPlanks(log); @@ -61,10 +67,29 @@ public class TableSaw extends MultiBlockMachine { } } + /** + * This method returns the corresponding plank {@link Material} for a given wood {@link Material}. + * The result is wrapped by an {@link Optional}. + *

+ * {@literal Material.OAK_LOG} for example will return {@literal Material.OAK_PLANKS}. + * + * @param log + * The log type. + * + * @return An {@link Optional} containing the corresponding plank type (or an empty {@link Optional}) + */ private @Nonnull Optional getPlanks(@Nonnull Material log) { String materialName = log.name().replace("STRIPPED_", ""); - materialName = materialName.substring(0, materialName.lastIndexOf('_')) + "_PLANKS"; - return Optional.ofNullable(Material.getMaterial(materialName)); + int endIndex = materialName.lastIndexOf('_'); + + if (endIndex > 0) { + materialName = materialName.substring(0, endIndex) + "_PLANKS"; + return Optional.ofNullable(Material.getMaterial(materialName)); + } else { + // Fixed #3651 - Do not panic because of one weird wood type. + warn("Could not find a corresponding plank for wood type: '" + log.name() + "'"); + return Optional.empty(); + } } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/HerculesPickaxe.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/HerculesPickaxe.java deleted file mode 100644 index ddada272a..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/HerculesPickaxe.java +++ /dev/null @@ -1,71 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.implementation.items.tools; - -import javax.annotation.Nonnull; -import javax.annotation.ParametersAreNonnullByDefault; - -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; - -import io.github.bakedlibs.dough.items.CustomItemStack; -import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion; -import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup; -import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; -import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; -import io.github.thebusybiscuit.slimefun4.core.handlers.ToolUseHandler; -import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; -import io.github.thebusybiscuit.slimefun4.utils.tags.SlimefunTag; - -@Deprecated -public class HerculesPickaxe extends SimpleSlimefunItem { - - @ParametersAreNonnullByDefault - public HerculesPickaxe(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(itemGroup, item, recipeType, recipe); - } - - @Override - public @Nonnull ToolUseHandler getItemHandler() { - return (e, tool, fortune, drops) -> { - - sendDeprecationWarning(e.getPlayer()); - - Material mat = e.getBlock().getType(); - - if (SlimefunTag.ORES.isTagged(mat)) { - if (Slimefun.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_17)) { - switch (mat) { - case DEEPSLATE_IRON_ORE: - drops.add(new CustomItemStack(SlimefunItems.IRON_DUST, 2)); - break; - case DEEPSLATE_GOLD_ORE: - drops.add(new CustomItemStack(SlimefunItems.GOLD_DUST, 2)); - break; - case COPPER_ORE: - case DEEPSLATE_COPPER_ORE: - drops.add(new CustomItemStack(SlimefunItems.COPPER_DUST, 2)); - break; - default: - break; - } - } - - switch (mat) { - case IRON_ORE: - drops.add(new CustomItemStack(SlimefunItems.IRON_DUST, 2)); - break; - case GOLD_ORE: - drops.add(new CustomItemStack(SlimefunItems.GOLD_DUST, 2)); - break; - default: - for (ItemStack drop : e.getBlock().getDrops(tool)) { - drops.add(new CustomItemStack(drop, drop.getAmount() * 2)); - } - break; - } - } - }; - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BackpackListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BackpackListener.java index 796f6917b..1650b0b42 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BackpackListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BackpackListener.java @@ -96,6 +96,7 @@ public class BackpackListener implements Listener { if (backpack instanceof SlimefunBackpack slimefunBackpack) { if (e.getClick() == ClickType.NUMBER_KEY) { + // Prevent disallowed items from being moved using number keys. if (e.getClickedInventory().getType() != InventoryType.PLAYER) { ItemStack hotbarItem = e.getWhoClicked().getInventory().getItem(e.getHotbarButton()); @@ -103,12 +104,19 @@ public class BackpackListener implements Listener { e.setCancelled(true); } } - } else if (e.getClick() == ClickType.SWAP_OFFHAND && e.getClickedInventory().getType() != InventoryType.PLAYER) { - // Fixes #3265 - ItemStack offHandItem = e.getWhoClicked().getInventory().getItemInOffHand(); + } else if (e.getClick() == ClickType.SWAP_OFFHAND) { + if (e.getClickedInventory().getType() != InventoryType.PLAYER) { + // Fixes #3265 - Don't move disallowed items using the off hand. + ItemStack offHandItem = e.getWhoClicked().getInventory().getItemInOffHand(); - if (!isAllowed(slimefunBackpack, offHandItem)) { - e.setCancelled(true); + if (!isAllowed(slimefunBackpack, offHandItem)) { + e.setCancelled(true); + } + } else { + // Fixes #3664 - Do not swap the backpack to your off hand. + if (e.getCurrentItem() != null && e.getCurrentItem().isSimilar(item)) { + e.setCancelled(true); + } } } else if (!isAllowed(slimefunBackpack, e.getCurrentItem())) { e.setCancelled(true); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java index 4635c1b4d..7d28e044b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java @@ -113,7 +113,6 @@ public final class ResearchSetup { register("gold_armor", 87, "Shiny Armor", 13, SlimefunItems.GOLDEN_HELMET_12K, SlimefunItems.GOLDEN_CHESTPLATE_12K, SlimefunItems.GOLDEN_LEGGINGS_12K, SlimefunItems.GOLDEN_BOOTS_12K); register("night_vision_googles", 89, "Night Vision Goggles", 10, SlimefunItems.NIGHT_VISION_GOGGLES); register("pickaxe_of_containment", 90, "Pickaxe of Containment", 14, SlimefunItems.PICKAXE_OF_CONTAINMENT, SlimefunItems.BROKEN_SPAWNER); - register("hercules_pickaxe", 91, "Hercules Pickaxe", 28, SlimefunItems.HERCULES_PICKAXE); register("table_saw", 92, "Table Saw", 4, SlimefunItems.TABLE_SAW); register("slime_steel_armor", 93, "Slimy Steel Armor", 27, SlimefunItems.SLIME_HELMET_STEEL, SlimefunItems.SLIME_CHESTPLATE_STEEL, SlimefunItems.SLIME_LEGGINGS_STEEL, SlimefunItems.SLIME_BOOTS_STEEL); register("blade_of_vampires", 94, "Blade of Vampires", 26, SlimefunItems.BLADE_OF_VAMPIRES); @@ -144,7 +143,7 @@ public final class ResearchSetup { register("bound_weapons", 125, "Soulbound Weapons", 29, SlimefunItems.SOULBOUND_SWORD, SlimefunItems.SOULBOUND_BOW, SlimefunItems.SOULBOUND_TRIDENT); register("bound_tools", 126, "Soulbound Tools", 29, SlimefunItems.SOULBOUND_PICKAXE, SlimefunItems.SOULBOUND_AXE, SlimefunItems.SOULBOUND_SHOVEL, SlimefunItems.SOULBOUND_HOE); register("bound_armor", 127, "Soulbound Armor", 29, SlimefunItems.SOULBOUND_HELMET, SlimefunItems.SOULBOUND_CHESTPLATE, SlimefunItems.SOULBOUND_LEGGINGS, SlimefunItems.SOULBOUND_BOOTS); - register("juicer", 129, "Delicious Drinks", 29, SlimefunItems.JUICER, SlimefunItems.APPLE_JUICE, SlimefunItems.MELON_JUICE, SlimefunItems.CARROT_JUICE, SlimefunItems.PUMPKIN_JUICE, SlimefunItems.SWEET_BERRY_JUICE); + register("juicer", 129, "Delicious Drinks", 29, SlimefunItems.JUICER, SlimefunItems.APPLE_JUICE, SlimefunItems.MELON_JUICE, SlimefunItems.CARROT_JUICE, SlimefunItems.PUMPKIN_JUICE, SlimefunItems.SWEET_BERRY_JUICE, SlimefunItems.GLOW_BERRY_JUICE); register("repaired_spawner", 130, "Repairing Spawners", 15, SlimefunItems.REPAIRED_SPAWNER); register("enhanced_furnace", 132, "Enhanced Furnace", 7, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.ENHANCED_FURNACE_2); register("more_enhanced_furnaces", 133, "Better Furnaces", 18, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.ENHANCED_FURNACE_7); @@ -221,7 +220,7 @@ public final class ResearchSetup { register("better_food_fabricator", 211, "Upgraded Food Fabrication", 28, SlimefunItems.FOOD_FABRICATOR_2, SlimefunItems.FOOD_COMPOSTER_2); register("reactor_access_port", 212, "Reactor Interaction", 18, SlimefunItems.REACTOR_ACCESS_PORT); register("fluid_pump", 213, "Fluid Pump", 28, SlimefunItems.FLUID_PUMP); - register("better_freezer", 214, "Upgraded Freezer", 29, SlimefunItems.FREEZER_2); + register("better_freezer", 214, "Upgraded Freezer", 29, SlimefunItems.FREEZER_2, SlimefunItems.FREEZER_3); register("boosted_uranium", 215, "Never-Ending Circle", 30, SlimefunItems.BOOSTED_URANIUM); register("trash_can", 216, "Trash", 8, SlimefunItems.TRASH_CAN); register("advanced_output_node", 217, "Advanced Output Node", 24, SlimefunItems.CARGO_OUTPUT_NODE_2); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java index 2faf1ca36..f4c8fffc3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java @@ -26,6 +26,7 @@ import io.github.thebusybiscuit.slimefun4.core.attributes.Radioactivity; import io.github.thebusybiscuit.slimefun4.core.handlers.RainbowTickHandler; import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; +import io.github.thebusybiscuit.slimefun4.implementation.items.HiddenItem; import io.github.thebusybiscuit.slimefun4.implementation.items.RadioactiveItem; import io.github.thebusybiscuit.slimefun4.implementation.items.VanillaItem; import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientAltar; @@ -195,7 +196,6 @@ import io.github.thebusybiscuit.slimefun4.implementation.items.tools.ExplosivePi import io.github.thebusybiscuit.slimefun4.implementation.items.tools.ExplosiveShovel; import io.github.thebusybiscuit.slimefun4.implementation.items.tools.GoldPan; import io.github.thebusybiscuit.slimefun4.implementation.items.tools.GrapplingHook; -import io.github.thebusybiscuit.slimefun4.implementation.items.tools.HerculesPickaxe; import io.github.thebusybiscuit.slimefun4.implementation.items.tools.LumberAxe; import io.github.thebusybiscuit.slimefun4.implementation.items.tools.NetherGoldPan; import io.github.thebusybiscuit.slimefun4.implementation.items.tools.PickaxeOfContainment; @@ -532,11 +532,11 @@ public final class SlimefunItemSetup { new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(plugin); - new SlimefunItem(itemGroups.resources, SlimefunItems.LEAD_DUST, RecipeType.ORE_WASHER, + new SlimefunItem(itemGroups.resources, SlimefunItems.SILVER_DUST, RecipeType.ORE_WASHER, new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(plugin); - new SlimefunItem(itemGroups.resources, SlimefunItems.SILVER_DUST, RecipeType.ORE_WASHER, + new SlimefunItem(itemGroups.resources, SlimefunItems.LEAD_DUST, RecipeType.ORE_WASHER, new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(plugin); @@ -1031,10 +1031,6 @@ public final class SlimefunItemSetup { new PickaxeOfContainment(itemGroups.tools, SlimefunItems.PICKAXE_OF_CONTAINMENT, RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) .register(plugin); - - new HerculesPickaxe(itemGroups.tools, SlimefunItems.HERCULES_PICKAXE, RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) - .register(plugin); new TableSaw(itemGroups.basicMachines, SlimefunItems.TABLE_SAW).register(plugin); @@ -1376,6 +1372,10 @@ public final class SlimefunItemSetup { new SlimefunItemStack(SlimefunItems.FLASK_OF_KNOWLEDGE, 8)) .register(plugin); + new HiddenItem(itemGroups.magicalGadgets, SlimefunItems.FILLED_FLASK_OF_KNOWLEDGE, RecipeType.INTERACT, + new ItemStack[] {SlimefunItems.FLASK_OF_KNOWLEDGE, null, null, null, null, null, null, null, null}) + .register(plugin); + new BirthdayCake(itemGroups.birthday, new SlimefunItemStack("BIRTHDAY_CAKE", Material.CAKE, "&bBirthday Cake"), RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.TORCH), null, new ItemStack(Material.SUGAR), new ItemStack(Material.CAKE), new ItemStack(Material.SUGAR), null, null, null}) .register(plugin); @@ -2444,6 +2444,13 @@ public final class SlimefunItemSetup { .setProcessingSpeed(2) .register(plugin); + new Freezer(itemGroups.electricity, SlimefunItems.FREEZER_3, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.FREEZER_2, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COOLING_UNIT, SlimefunItems.COOLING_UNIT, SlimefunItems.COOLING_UNIT}) + .setCapacity(256) + .setEnergyConsumption(21) + .setProcessingSpeed(3) + .register(plugin); + new CoolantCell(itemGroups.technicalComponents, SlimefunItems.REACTOR_COOLANT_CELL, RecipeType.FREEZER, new ItemStack[] {new ItemStack(Material.BLUE_ICE), null, null, null, null, null, null, null, null}) .register(plugin); @@ -2610,6 +2617,12 @@ public final class SlimefunItemSetup { new ItemStack[] {null, null, null, null, new CustomItemStack(HeadTexture.PIGLIN_HEAD.getAsItemStack(), "&fPiglin"), null, null, null, null}) .register(plugin); + if (minecraftVersion.isAtLeast(MinecraftVersion.MINECRAFT_1_17)) { + new Juice(itemGroups.food, SlimefunItems.GLOW_BERRY_JUICE, RecipeType.JUICER, + new ItemStack[] {new ItemStack(Material.GLOW_BERRIES), null, null, null, null, null, null, null, null}) + .register(plugin); + } + new ElytraCap(itemGroups.magicalArmor, SlimefunItems.ELYTRA_CAP, RecipeType.ARMOR_FORGE, new ItemStack[] {new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA_SCALE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.LEATHER_HELMET), new ItemStack(Material.SLIME_BALL)}) .register(plugin); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ColoredFireworkStar.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ColoredFireworkStar.java index 48ad6d793..17a62c352 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ColoredFireworkStar.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ColoredFireworkStar.java @@ -9,6 +9,7 @@ import org.bukkit.Color; import org.bukkit.FireworkEffect; import org.bukkit.FireworkEffect.Type; import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.FireworkEffectMeta; @@ -42,6 +43,8 @@ public class ColoredFireworkStar extends CustomItemStack { im.setLore(lines); } + + im.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); }); } diff --git a/src/main/resources/languages/fa/messages.yml b/src/main/resources/languages/fa/messages.yml index 806159a96..99b3d1130 100644 --- a/src/main/resources/languages/fa/messages.yml +++ b/src/main/resources/languages/fa/messages.yml @@ -1,5 +1,7 @@ --- commands: + research: + reset-target: '&cدانش شما بازنشانی شده است' debug: description: 'ثبت اشکال زدایی را برای توسعه دهندگان اجرا کنید' disabled: '&7حالت اشکال زدایی غیرفعال شد.' @@ -8,6 +10,10 @@ placeholderapi: guide: locked: 'قفل شده است' work-in-progress: 'اين قابليت هنوز کامل نشده!' + locked-itemgroup: + - 'براي باز کردن اين گروه شما بايد' + - 'نیاز به باز کردن قفل همه موارد از' + - 'دسته های زیر' search: message: '&bدوست دارید دنبال چه چیزی بگردید?' name: '&7جست و جو...' @@ -16,6 +22,7 @@ guide: tooltips: open-itemgroup: 'براي باز کردن کليک کنيد' versions-notice: 'این موارد هنگام گزارش باگ بسیار مهم هستند!' + wiki: 'این آیتم را در ویکی رسمی Slimefun مشاهده کنید' pages: previous: 'صفحه ي قبل' next: 'صفحه ی بعد' @@ -23,7 +30,17 @@ guide: title: 'برگشت' settings: 'به صفحه تنظیمات بازگرد' languages: + selected-language: 'در حال حاضر انتخاب شده:' + select: 'برای انتخاب این زبان کلیک کنید' + select-default: 'برای انتخاب زبان پیش فرض کلیک کنید' + change: 'برای انتخاب زبان جدید کلیک کنید' + description: + - '&7اکنون این گزینه را دارید که تغییر دهید' + - '&7زبان در Slimefun' + - '&7به شما ارائه خواهد شد. آیتم ها' + - '&7فعلا قابل ترجمه نیست.' translations: + name: '&aچیزی فراموش شده است?' lore: 'برای افزودن ترجمه خود کلیک کنید' title: main: 'راهنمای Slimefun' @@ -32,16 +49,28 @@ guide: source: 'کد منبع' credits: roles: + developer: '&6توسعه دهندگان' wiki: '&3ویرایش کننده ویکی' + resourcepack: '&cهنرمند بسته منابع' translator: '&9مترجم' messages: + hungry: '&cشما برای انجام این کار زیادی گرسنه هستید! برای انجام آن نوار گرسنگی خود را پر کنید!' disabled-in-world: '&4&lاين آيتم در این جهان غير فعال شده است' + soulbound-rune: + fail: '&cشما نمی توانید چند وسیله را به طور همزمان به روح خود متصل کنید.' + success: '&aشما با موفقیت این مورد را به روح خود متصل کردید! در صورت مردن شما این وسیله را از دست نمی دهید.' + tape-measure: + distance: '&7اندازه گیری انجام شده. &eفاصله: %distance%' no-pvp: '&cشما نمی توانید در اینجا مبارزه کنید!' link-prompt: '&eاینجا کلیک کنید:' machines: + ELEVATOR: + no-destinations: '&4مقصدی پیدا نشد' TELEPORTER: teleporting: '&3درحال جا به جایی...' teleported: '&3جا به جا شدی!' + gui: + time: 'زمان تخمین زده شده' CARGO_NODES: connected: '&2وصل است!' not-connected: '&4وصل نیست!' @@ -61,9 +90,16 @@ languages: it: 'ایتالیایی' es: 'اسپانیایی' nl: 'هلندی' + cs: 'کشور چک' hu: 'مجارستانی' ru: 'روسی' + zh-TW: 'چینی (تایوان)' + vi: 'ویتنامی' + id: 'اندونزیایی' el: 'یونانی' + he: 'عبری' + pt: 'پرتغالی (پرتغال)' + pt-BR: 'پرتغالی (برزیل)' ar: 'عربی' da: 'دانمارکی' fi: 'فنلاندی' @@ -72,3 +108,6 @@ languages: 'no': 'نروژی' ja: 'ژاپنی' fa: 'فارسی' + th: 'تایلندی' + tl: 'تاگالوگی' + ro: 'رومانیایی' diff --git a/src/main/resources/languages/fa/researches.yml b/src/main/resources/languages/fa/researches.yml index 9a9a636ac..f83ffd2bb 100644 --- a/src/main/resources/languages/fa/researches.yml +++ b/src/main/resources/languages/fa/researches.yml @@ -18,7 +18,9 @@ slimefun: solar_panel_and_helmet: نیروی خورشیدی cactus_armor: کت و شلوار کاکتوس slimefun_metals: فلزات جدید + magic_workbench: میز کار جادویی gold_carats: طلای خالص + lava_crystal: موقعیت آتشین gilded_iron: آهن براق synthetic_emerald: جواهر تقلبی hazmat_suit: لباس ضد آتش @@ -28,6 +30,7 @@ slimefun: 24k_gold_block: شهر طلایی backpacks: کوله پشتی ها juicer: نوشیدنی های خوشمزه + more_enhanced_furnaces: کوره های بهتر carbonado_furnace: کوره لبه دار کربونادو block_placer: بلوک گذار scroll_of_dimensional_teleposition: چرخاندن چیزها @@ -44,12 +47,20 @@ slimefun: oil: نفت fuel: سوخت hologram_projector: هولوگرام ها + solar_generators: نیروگاه خورشیدی + electric_furnaces: کوره برقی electric_ore_grinding: خرد کردن و آسیاب کردن + bio_reactor: راکتور زیستی elevator: آسانسورها + nuclear_reactor: نیروگاه هسته ای trash_can: اشغال elytra: بال special_elytras: بال مخصوص trident: نیزه سه شاخه + lava_generator: مولد گدازه auto_drier: یک روز خشک + diet_cookie: کوکی رژیمی + tree_growth_accelerator: درختان سریعتر lead_clothing: لباس سرب tape_measure: نوار اندازه گیری + bee_armor: زره زنبوری diff --git a/src/main/resources/languages/he/messages.yml b/src/main/resources/languages/he/messages.yml index b659a3f56..a6294cdf1 100644 --- a/src/main/resources/languages/he/messages.yml +++ b/src/main/resources/languages/he/messages.yml @@ -146,6 +146,8 @@ messages: multimeter: '&bאחסון אנרגיה: &3%stored% &b/ &3%capacity%' piglin-barter: 'אתה לא יכול לסחור עם חזירונים באמצעות חפצי סליים פאן' bee-suit-slow-fall: '&eכנפי הדבורה שלך יעזרו לך להגיע לקרקע בצורה איטית ובטוחה' + deprecated-item: '&4פריט זה מיושן ויוסר מסליים פאן בקרוב.' + researching-is-disabled: '&cמחקר לא פעיל בשרת זה. לפי ברירת מחדל הכול פתוח!' multi-tool: mode-change: '&b%device% &9: המצב השתנה ל: %mode%' not-shears: '&c מולטי טול לא יכול לשמש כמזמרה!' @@ -256,6 +258,9 @@ machines: pick-a-floor: '&3- בחר קומה -' current-floor: '&e אתה נמצא כרגע על קומה:' click-to-teleport: '&eלחץ &7 כדי להשתגר לקומה:' + enter-name: '&7אנא הכנס את שם הרצפה הרצוי לצ''אט שלך. &f(קודי צבע נתמכים!)' + named: '&2 בהצלחה נקבע שם קומה זאת: &f%floor%' + editor-title: 'הגדר מעלית זו' TELEPORTER: teleporting: '&3משתגר....' teleported: '&3שוגר!' @@ -271,6 +276,8 @@ machines: waypoints: 'סקירת נקודות דרך' CARGO_NODES: must-be-placed: '&4חייב להיות מונח על תיבה או מכונה!' + connected: '&2מחובר!' + not-connected: '&4לא מחובר!' INDUSTRIAL_MINER: no-fuel: 'לכורה התעשייתית שלך אזל הדלק! שים את הדלק שלך בתיבה מעל.' piston-facing: '&cהכורה התעשייתי שלך דורש בוכנות מופנות כלפי מעלה!' @@ -300,6 +307,8 @@ cauldron: no-discoloring: '&4אתה לא יכול לשנות את הצבע של שריון סליים פאן' gps: deathpoint: "&4נקודת מוות\n&7%date%" + status-online: 'מקוון' + status-offline: 'לא מקוון' waypoint: new: '&eהקלד שם לנקודת הדרך החדשה שלך בצ''אט. (קודי צבע נתמכים!)' added: '&a נוסף בהצלחה נקודת דרך חדשה' @@ -399,3 +408,5 @@ languages: mk: 'מקדונית' sr: 'סרבית' be: 'בלארוסית' + si-LK: 'סינהאלית' + lt: 'ליטאית' diff --git a/src/main/resources/languages/ja/messages.yml b/src/main/resources/languages/ja/messages.yml index 93c5cacf2..43a343ae1 100644 --- a/src/main/resources/languages/ja/messages.yml +++ b/src/main/resources/languages/ja/messages.yml @@ -147,6 +147,7 @@ messages: piglin-barter: '&4Slimefunアイテムはピグリンとの物々交換に使用できません' bee-suit-slow-fall: '&e蜂の羽が着地を安全でゆっくりにした' deprecated-item: '&4このアイテムは廃止予定です。近日中にSlimefunから削除されます。' + researching-is-disabled: '%cこのサーバーではリサーチが無効化されていました。すべてがデフォルトでアンロックされました!' multi-tool: mode-change: '&b%device% モード変更: &9%mode%' not-shears: '&cMulti Toolはハサミとして利用できません!' @@ -257,6 +258,7 @@ machines: pick-a-floor: '&3- 行先の選択 -' current-floor: '&e現在の階:' click-to-teleport: '&eクリック&7でこの階に移動:' + editor-title: 'エレベーターの設定' TELEPORTER: teleporting: '&3テレポート中…' teleported: '&3テレポート完了!' @@ -272,6 +274,7 @@ machines: waypoints: 'ウェイポイント一覧' CARGO_NODES: must-be-placed: '&4チェストや機械に対して設置してください!' + not-connected: '&4接続されていません!' INDUSTRIAL_MINER: no-fuel: '&cIndustrial Minerは燃料切れです!上のチェストに燃料を補充してください。' piston-facing: '&cIndustrial Minerのピストンは上向きに設置してください!' @@ -301,6 +304,8 @@ cauldron: no-discoloring: '&4Slimefunアイテムの脱色はできません' gps: deathpoint: '&4死亡地点 &7%date%' + status-online: 'オンライン' + status-offline: 'オフライン' waypoint: new: '&eウェイポイント名をチャットで入力してください&7(カラーコード対応)' added: '&a新しいウェイポイントを登録しました' diff --git a/src/main/resources/languages/ja/researches.yml b/src/main/resources/languages/ja/researches.yml index 54fd472da..00b4bc8e7 100644 --- a/src/main/resources/languages/ja/researches.yml +++ b/src/main/resources/languages/ja/researches.yml @@ -153,10 +153,10 @@ slimefun: electric_ore_grinding: 粉砕粉砕 heated_pressure_chamber: 加熱圧力室Ⅰ coal_generator: 火力発電所 - bio_reactor: バイオマス発電所 + bio_reactor: バイオリアクター auto_enchanting: エンチャント操作術 - auto_anvil: 電動修理術 - multimeter: マルチメーター + auto_anvil: 自動金床 + multimeter: 電力計測 gps_setup: GPS時代の夜明け gps_emergency_transmitter: 緊急戦線復帰 programmable_androids: アンドロイド @@ -250,7 +250,7 @@ slimefun: iron_golem_assembler: 人造アイアンゴーレム villager_rune: 村人の初期化 elytra_cap: 衝撃緩和装備 - bee_armor: 蜂アーマー + bee_armor: 養蜂用防護服 book_binder: エンチャントの本の製本 auto_crafting: 自動クラフト produce_collector: 自動搾乳 diff --git a/src/main/resources/languages/pt/researches.yml b/src/main/resources/languages/pt/researches.yml index ed97d539c..e590cf417 100644 --- a/src/main/resources/languages/pt/researches.yml +++ b/src/main/resources/languages/pt/researches.yml @@ -1 +1,21 @@ --- +slimefun: + fortune_cookie: Bolinho da sorte + portable_dustbin: Caixote do Lixo Portátil + meat_jerky: Jerky de Carne + magic_sugar: Açúcar Mágico + monster_jerky: Jerky de Monstro + slime_armor: Armadura de Slime + sword_of_beheading: Espada da Decapitação + parachute: Pára-quedas + grappling_hook: Gancho-arpão + jetpacks: Jetpack + slimefun_metals: Metais Novos + carbonado: Diamantes Negros + synthetic_emerald: Jóia Falsa + chainmail_armor: Armadura de Malha + uranium: Radioativo + crushed_ore: Purificação de Minérios + first_aid: Primeiros socorros + gold_armor: Armadura Brilhante + backpacks: Mochilas diff --git a/src/main/resources/languages/ro/categories.yml b/src/main/resources/languages/ro/categories.yml index ed97d539c..2333e476e 100644 --- a/src/main/resources/languages/ro/categories.yml +++ b/src/main/resources/languages/ro/categories.yml @@ -1 +1,23 @@ --- +slimefun: + weapons: 'Arme' + food: 'Mâncare' + basic_machines: 'Maşinarii de bază' + electricity: 'Energie şi electricitate' + androids: 'Androizi programabili' + gps: 'Mașinarii GPS' + armor: 'Armură' + magical_items: 'Obiecte Magice' + magical_gadgets: 'Gadget-uri Magice' + misc: 'Obiecte Diverse' + technical_gadgets: 'Gadget-uri Tehnice' + resources: 'Resurse' + tech_misc: 'Componente Tehnice' + magical_armor: 'Armură Magică' + talismans: 'Talismane (nivelul I)' + ender_talismans: 'Talismane Ender (nivelul II)' + christmas: 'Crăciun (decembrie)' + valentines_day: 'Ziua Îndrăgostiților (14 februarie)' + easter: 'Paște (Aprilie)' + birthday: 'Ziua de naștere a lui TheBusyBiscuit (26 octombrie)' + halloween: 'Halloween (31 octombrie)' diff --git a/src/main/resources/languages/ro/messages.yml b/src/main/resources/languages/ro/messages.yml index 421d00e64..2990fecf4 100644 --- a/src/main/resources/languages/ro/messages.yml +++ b/src/main/resources/languages/ro/messages.yml @@ -1,4 +1,7 @@ --- +commands: + timings: + please-wait: '&eTe rugam sa astepti o secunda... Rezultatele se incarca!' placeholderapi: profile-loading: 'Se încarcă...' guide: @@ -8,38 +11,90 @@ guide: name: '&7Cauta...' tooltip: '&bClick pentru a căuta un obiect' inventory: 'Caută pentru: %item%' + tooltips: + versions-notice: 'Acestea sunt foarte importante atunci când raportezi problemele!' + wiki: 'Vezi acest articol pe Wiki-ul Slimefun Oficial' pages: previous: 'Pagina anterioară' next: 'Pagina următoare' back: guide: 'Inapoi la Ghidul Slimefun' languages: + selected-language: 'Selectare actuală:' + select: 'Click pentru a selecta această limbă' + select-default: 'Click pentru a selecta limba implicita' + change: 'Click pentru a selecta o nouă limbă' translations: name: '&aLipseste ceva?' + lore: 'Click pentru a adăuga propria ta traducere' title: main: 'Ghid Slimefun' settings: 'Setări și informații' + languages: 'Selectați limba preferată' + credits: 'Contribuitori Slimefun4' + wiki: 'Wiki Slimefun4' + addons: 'Addons pentru Slimefun4' bugs: 'Raportare Buguri' + source: 'Cod sursă' versions: 'Versiuni instalate' + credits: + commit: 'Commit' + commits: 'Commit-uri' + profile-link: 'Faceți clic pentru a le vizita profilul pe GitHub' + open: 'Click pentru a vedea contribuitorii noștri' + roles: + developer: '&6Dezvoltator' + wiki: '&3Editor Wiki' + resourcepack: '&cArtist Resurse' + translator: '&9Traducator' messages: + not-researched: '&4Nu ai suficiente cunostinte pentru a intelege acest obiect. &cVa trebui sa deblochezi &f"%item%&f"' + not-enough-xp: '&4Nu ai suficient XP pentru a debloca acest obiect' + unlocked: '&bAi deblocat &7"%research%"' + only-players: '&4Aceasta comanda este doar pentru jucatori' link-prompt: '&eClick aici:' +machines: + TELEPORTER: + teleporting: '&3Teleportare...' + teleported: '&3Teleportat!' + cancelled: '&4Teleportare anulata!' + invulnerability: '&b&lAi primit 30 de secunde de Invulnerabilitate!' + gui: + title: 'Punctele tale de referinta' + tooltip: 'Click pentru teleportare' + time: 'Timp estimat' languages: en: 'Engleză' de: 'Germană' fr: 'Franceză' it: 'Italiană' es: 'Spaniolă' + pl: 'Poloneză' sv: 'Suedeză' nl: 'Olandeză' cs: 'Cehă' hu: 'Maghiară' + lv: 'Letonă' ru: 'Rusă' sk: 'Slovacă' + zh-CN: 'Chineză (China)' + zh-TW: 'Chineză (Taiwan)' vi: 'Vietnameză' id: 'Indoneziană' el: 'Greacă' he: 'Ebraică' + pt: 'Portugheză (Portugalia)' ar: 'Arabă' fi: 'Finlandeză' uk: 'Ucraineană' + ja: 'Japoneză' + fa: 'Persiană' + th: 'Tailandeza' + tl: 'Tagalog' + ro: 'Română' + bg: 'Bulgară' + ko: 'Coreeană' + hr: 'Croată' + mk: 'Macedoneană' + sr: 'Sârbă' be: 'Belarusă' diff --git a/src/main/resources/languages/ro/researches.yml b/src/main/resources/languages/ro/researches.yml index ed97d539c..c285f2f0c 100644 --- a/src/main/resources/languages/ro/researches.yml +++ b/src/main/resources/languages/ro/researches.yml @@ -1 +1,7 @@ --- +slimefun: + walking_sticks: Baston + portable_crafter: Masă de fabricare portabilă + portable_dustbin: Dustbin portabil + meat_jerky: Bucati de carne uscata + armor_forge: Masa de fabricare Armuri diff --git a/src/main/resources/languages/sk/researches.yml b/src/main/resources/languages/sk/researches.yml index d2eb91478..a26260815 100644 --- a/src/main/resources/languages/sk/researches.yml +++ b/src/main/resources/languages/sk/researches.yml @@ -1,7 +1,7 @@ --- slimefun: walking_sticks: Vychádzkové paličky - portable_crafter: Prenosný crafter + portable_crafter: Prenosný pracovný stôl fortune_cookie: Koláčik šťastia portable_dustbin: Prenosný kôš meat_jerky: Sušené mäso @@ -13,14 +13,14 @@ slimefun: magic_eye_of_ender: Magiké Oko Endu magic_sugar: Magický cukor monster_jerky: Sušené mäso z monštier - slime_armor: Slime brnenie + slime_armor: Slizové brnenie sword_of_beheading: Meč popráv basic_circuit_board: Základná obvodová doska advanced_circuit_board: Pokročilá obvodová doska smeltery: Taviareň steel: Vek ocele misc_power_items: Dôležité veci súvisiace s energiou - battery: Tvoja prvá baterka + battery: Tvoja prvá batéria steel_plate: Oceľové pokovovanie steel_thruster: Oceľová tryska parachute: Padák diff --git a/src/main/resources/languages/zh-CN/recipes.yml b/src/main/resources/languages/zh-CN/recipes.yml index 57fe31d18..778c63d36 100644 --- a/src/main/resources/languages/zh-CN/recipes.yml +++ b/src/main/resources/languages/zh-CN/recipes.yml @@ -22,10 +22,10 @@ slimefun: - '如合成表所示' - '使用磨石制作' smeltery: - name: '冶炼机 (Smeltery)' + name: '冶炼炉 (Smeltery)' lore: - '如合成表所示' - - '用冶炼机合成' + - '用冶炼炉合成' ore_crusher: name: '矿石粉碎机 (Ore Crusher)' lore: diff --git a/src/main/resources/wiki.json b/src/main/resources/wiki.json index bf199037f..012e4615e 100644 --- a/src/main/resources/wiki.json +++ b/src/main/resources/wiki.json @@ -215,6 +215,7 @@ "GILDED_IRON_CHESTPLATE" : "Armor", "GILDED_IRON_HELMET" : "Armor", "GILDED_IRON_LEGGINGS" : "Armor", + "GLOW_BERRY_JUICE" : "Juices", "GLOWSTONE_BOOTS" : "Magical-Armor", "GLOWSTONE_CHESTPLATE" : "Magical-Armor", "GLOWSTONE_HELMET" : "Magical-Armor",