1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00
breaking-changes/class-relocation

Conflicts:
	src/main/java/io/github/thebusybiscuit/slimefun4/core/categories/FlexCategory.java
	src/main/java/io/github/thebusybiscuit/slimefun4/core/categories/MultiCategory.java
	src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/CheatSheetSlimefunGuide.java
	src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java
This commit is contained in:
TheBusyBiscuit 2021-07-28 14:32:27 +02:00
commit 633a736016
19 changed files with 172 additions and 66 deletions

View File

@ -31,15 +31,18 @@
#### Additions #### Additions
* A couple more items have their wiki page linked ingame now * A couple more items have their wiki page linked ingame now
* Added Orebfuscator compatibility
#### Changes #### Changes
* Copper wire can no longer be placed down * Copper wire can no longer be placed down
* Slimefun chains can no longer be placed down * Slimefun chains can no longer be placed down
* (API) FlexCategories can now also appear in non-survival Slimefun guides
#### Fixes #### Fixes
* Fixed #3164 * Fixed #3164
* Fixed #3177 * Fixed #3177
* Fixed unbreakable Flint and Steel still being damaged in Ignition Chambers * Fixed unbreakable Flint and Steel still being damaged in Ignition Chambers
* Fixed #2677
## Release Candidate 26 (20 Jul 2021) ## Release Candidate 26 (20 Jul 2021)
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#26 https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#26

19
pom.xml
View File

@ -90,6 +90,11 @@
<id>walshy-public</id> <id>walshy-public</id>
<url>https://repo.walshy.dev/public</url> <url>https://repo.walshy.dev/public</url>
</repository> </repository>
<repository>
<!-- Orebfuscator -->
<id>imprex-repo</id>
<url>https://imprex.ingrim4.me/repository/maven-public/</url>
</repository>
</repositories> </repositories>
<build> <build>
@ -473,6 +478,20 @@
<version>2.4.6</version> <version>2.4.6</version>
<scope>provided</scope> <scope>provided</scope>
<exclusions>
<exclusion>
<!-- We don't need any of the dependencies -->
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.imprex</groupId>
<artifactId>orebfuscator-api</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>
<!-- We don't need any of the dependencies --> <!-- We don't need any of the dependencies -->

View File

@ -111,7 +111,7 @@ public class ItemGroup implements Keyed {
this.addon = addon; this.addon = addon;
Slimefun.getRegistry().getCategories().add(this); Slimefun.getRegistry().getAllItemGroups().add(this);
sortCategoriesByTier(); sortCategoriesByTier();
} }
@ -145,7 +145,7 @@ public class ItemGroup implements Keyed {
* This refreshes the {@link ItemGroup} order. * This refreshes the {@link ItemGroup} order.
*/ */
private void sortCategoriesByTier() { private void sortCategoriesByTier() {
List<ItemGroup> categories = Slimefun.getRegistry().getCategories(); List<ItemGroup> categories = Slimefun.getRegistry().getAllItemGroups();
Collections.sort(categories, Comparator.comparingInt(ItemGroup::getTier)); Collections.sort(categories, Comparator.comparingInt(ItemGroup::getTier));
} }
@ -316,7 +316,7 @@ public class ItemGroup implements Keyed {
* @return Whether this {@link ItemGroup} has been registered * @return Whether this {@link ItemGroup} has been registered
*/ */
public boolean isRegistered() { public boolean isRegistered() {
return Slimefun.getRegistry().getCategories().contains(this); return Slimefun.getRegistry().getAllItemGroups().contains(this);
} }
} }

View File

@ -77,12 +77,12 @@ public abstract class FlexItemGroup extends ItemGroup {
} }
@Override @Override
public final void add(SlimefunItem item) { public final void add(@Nonnull SlimefunItem item) {
throw new UnsupportedOperationException("You cannot add items to a FlexCategory!"); throw new UnsupportedOperationException("You cannot add items to a FlexCategory!");
} }
@Override @Override
public final List<SlimefunItem> getItems() { public final @Nonnull List<SlimefunItem> getItems() {
throw new UnsupportedOperationException("A FlexCategory has no items!"); throw new UnsupportedOperationException("A FlexCategory has no items!");
} }
@ -92,7 +92,7 @@ public abstract class FlexItemGroup extends ItemGroup {
} }
@Override @Override
public final void remove(SlimefunItem item) { public final void remove(@Nonnull SlimefunItem item) {
throw new UnsupportedOperationException("A FlexCategory has no items, so there is nothing remove!"); throw new UnsupportedOperationException("A FlexCategory has no items, so there is nothing remove!");
} }

View File

@ -87,7 +87,7 @@ public class LockedItemGroup extends ItemGroup {
} }
} }
for (ItemGroup category : Slimefun.getRegistry().getCategories()) { for (ItemGroup category : Slimefun.getRegistry().getAllItemGroups()) {
if (namespacedKeys.remove(category.getKey())) { if (namespacedKeys.remove(category.getKey())) {
addParent(category); addParent(category);
} }

View File

@ -65,7 +65,7 @@ public class NestedItemGroup extends FlexItemGroup {
@Override @Override
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public boolean isVisible(Player p, PlayerProfile profile, SlimefunGuideMode mode) { public boolean isVisible(Player p, PlayerProfile profile, SlimefunGuideMode mode) {
return true; return mode == SlimefunGuideMode.SURVIVAL_MODE;
} }
@Override @Override

View File

@ -210,14 +210,14 @@ public class Research implements Keyed {
public void unlockFromGuide(SlimefunGuideImplementation guide, Player player, PlayerProfile profile, SlimefunItem sfItem, ItemGroup category, int page) { public void unlockFromGuide(SlimefunGuideImplementation guide, Player player, PlayerProfile profile, SlimefunItem sfItem, ItemGroup category, int page) {
if (!Slimefun.getRegistry().getCurrentlyResearchingPlayers().contains(player.getUniqueId())) { if (!Slimefun.getRegistry().getCurrentlyResearchingPlayers().contains(player.getUniqueId())) {
if (profile.hasUnlocked(this)) { if (profile.hasUnlocked(this)) {
guide.openCategory(profile, category, page); guide.openItemGroup(profile, category, page);
} else { } else {
PlayerPreResearchEvent event = new PlayerPreResearchEvent(player, this, sfItem); PlayerPreResearchEvent event = new PlayerPreResearchEvent(player, this, sfItem);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) { if (!event.isCancelled()) {
if (this.canUnlock(player)) { if (this.canUnlock(player)) {
guide.unlockItem(player, sfItem, pl -> guide.openCategory(profile, category, page)); guide.unlockItem(player, sfItem, pl -> guide.openItemGroup(profile, category, page));
} else { } else {
Slimefun.getLocalization().sendMessage(player, "messages.not-enough-xp", true); Slimefun.getLocalization().sendMessage(player, "messages.not-enough-xp", true);
} }

View File

@ -169,8 +169,7 @@ public final class SlimefunRegistry {
* *
* @return {@link List} containing every enabled {@link ItemGroup} * @return {@link List} containing every enabled {@link ItemGroup}
*/ */
@Nonnull public @Nonnull List<ItemGroup> getAllItemGroups() {
public List<ItemGroup> getCategories() {
return categories; return categories;
} }
@ -179,8 +178,7 @@ public final class SlimefunRegistry {
* *
* @return A {@link List} containing every {@link SlimefunItem} * @return A {@link List} containing every {@link SlimefunItem}
*/ */
@Nonnull public @Nonnull List<SlimefunItem> getAllSlimefunItems() {
public List<SlimefunItem> getAllSlimefunItems() {
return slimefunItems; return slimefunItems;
} }

View File

@ -189,7 +189,7 @@ public class GuideHistory {
if (entry == null) { if (entry == null) {
guide.openMainMenu(profile, mainMenuPage); guide.openMainMenu(profile, mainMenuPage);
} else if (entry.getIndexedObject() instanceof ItemGroup) { } else if (entry.getIndexedObject() instanceof ItemGroup) {
guide.openCategory(profile, (ItemGroup) entry.getIndexedObject(), entry.getPage()); guide.openItemGroup(profile, (ItemGroup) entry.getIndexedObject(), entry.getPage());
} else if (entry.getIndexedObject() instanceof SlimefunItem) { } else if (entry.getIndexedObject() instanceof SlimefunItem) {
guide.displayItem(profile, (SlimefunItem) entry.getIndexedObject(), false); guide.displayItem(profile, (SlimefunItem) entry.getIndexedObject(), false);
} else if (entry.getIndexedObject() instanceof ItemStack) { } else if (entry.getIndexedObject() instanceof ItemStack) {

View File

@ -83,7 +83,7 @@ public final class SlimefunGuide {
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public static void openCategory(PlayerProfile profile, ItemGroup category, SlimefunGuideMode mode, int selectedPage) { public static void openCategory(PlayerProfile profile, ItemGroup category, SlimefunGuideMode mode, int selectedPage) {
Slimefun.getRegistry().getSlimefunGuide(mode).openCategory(profile, category, selectedPage); Slimefun.getRegistry().getSlimefunGuide(mode).openItemGroup(profile, category, selectedPage);
} }
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault

View File

@ -52,7 +52,7 @@ public interface SlimefunGuideImplementation {
void openMainMenu(PlayerProfile profile, int page); void openMainMenu(PlayerProfile profile, int page);
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
void openCategory(PlayerProfile profile, ItemGroup category, int page); void openItemGroup(PlayerProfile profile, ItemGroup group, int page);
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
void openSearch(PlayerProfile profile, String input, boolean addToHistory); void openSearch(PlayerProfile profile, String input, boolean addToHistory);

View File

@ -46,31 +46,29 @@ public class CheatSheetSlimefunGuide extends SurvivalSlimefunGuide {
* The {@link Player} who opened his {@link SlimefunGuide} * The {@link Player} who opened his {@link SlimefunGuide}
* @param profile * @param profile
* The {@link PlayerProfile} of the {@link Player} * The {@link PlayerProfile} of the {@link Player}
*
* @return a {@link List} of visible {@link ItemGroup} instances * @return a {@link List} of visible {@link ItemGroup} instances
*/ */
@Nonnull
@Override @Override
protected List<ItemGroup> getVisibleCategories(@Nonnull Player p, @Nonnull PlayerProfile profile) { protected List<ItemGroup> getVisibleItemGroups(@Nonnull Player p, @Nonnull PlayerProfile profile) {
List<ItemGroup> categories = new LinkedList<>(); List<ItemGroup> groups = new LinkedList<>();
for (ItemGroup category : Slimefun.getRegistry().getCategories()) { for (ItemGroup group : Slimefun.getRegistry().getAllItemGroups()) {
if (!(category instanceof FlexItemGroup)) { if (!(group instanceof FlexItemGroup) || ((FlexItemGroup) group).isVisible(p, profile, getMode())) {
categories.add(category); groups.add(group);
} }
} }
return categories; return groups;
} }
@Nonnull
@Override @Override
public SlimefunGuideMode getMode() { public @Nonnull SlimefunGuideMode getMode() {
return SlimefunGuideMode.CHEAT_MODE; return SlimefunGuideMode.CHEAT_MODE;
} }
@Nonnull
@Override @Override
public ItemStack getItem() { public @Nonnull ItemStack getItem() {
return item; return item;
} }

View File

@ -56,7 +56,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.MenuClickHan
/** /**
* The {@link SurvivalSlimefunGuide} is the standard version of our {@link SlimefunGuide}. * The {@link SurvivalSlimefunGuide} is the standard version of our {@link SlimefunGuide}.
* It uses an {@link Inventory} to display {@link SlimefunGuide} contents. * It uses an {@link Inventory} to display {@link SlimefunGuide} contents.
* *
* @author TheBusyBiscuit * @author TheBusyBiscuit
* *
* @see SlimefunGuide * @see SlimefunGuide
@ -84,18 +84,17 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
* *
* @return The {@link Sound} * @return The {@link Sound}
*/ */
@Nonnull public @Nonnull Sound getSound() {
public Sound getSound() {
return sound; return sound;
} }
@Override @Override
public SlimefunGuideMode getMode() { public @Nonnull SlimefunGuideMode getMode() {
return SlimefunGuideMode.SURVIVAL_MODE; return SlimefunGuideMode.SURVIVAL_MODE;
} }
@Override @Override
public ItemStack getItem() { public @Nonnull ItemStack getItem() {
return item; return item;
} }
@ -110,29 +109,33 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
* The {@link Player} who opened his {@link SlimefunGuide} * The {@link Player} who opened his {@link SlimefunGuide}
* @param profile * @param profile
* The {@link PlayerProfile} of the {@link Player} * The {@link PlayerProfile} of the {@link Player}
*
* @return a {@link List} of visible {@link ItemGroup} instances * @return a {@link List} of visible {@link ItemGroup} instances
*/ */
@Nonnull protected @Nonnull List<ItemGroup> getVisibleItemGroups(@Nonnull Player p, @Nonnull PlayerProfile profile) {
protected List<ItemGroup> getVisibleCategories(@Nonnull Player p, @Nonnull PlayerProfile profile) { List<ItemGroup> groups = new LinkedList<>();
List<ItemGroup> categories = new LinkedList<>();
for (ItemGroup category : Slimefun.getRegistry().getCategories()) { for (ItemGroup group : Slimefun.getRegistry().getAllItemGroups()) {
try { try {
if (!category.isHidden(p) && (!(category instanceof FlexItemGroup) || ((FlexItemGroup) category).isVisible(p, profile, getMode()))) { if (group instanceof FlexItemGroup) {
categories.add(category); if (((FlexItemGroup) group).isVisible(p, profile, getMode())) {
groups.add(group);
}
} else if (!group.isHidden(p)) {
groups.add(group);
} }
} catch (Exception | LinkageError x) { } catch (Exception | LinkageError x) {
SlimefunAddon addon = category.getAddon(); SlimefunAddon addon = group.getAddon();
if (addon != null) { if (addon != null) {
addon.getLogger().log(Level.SEVERE, x, () -> "Could not display Category: " + category); addon.getLogger().log(Level.SEVERE, x, () -> "Could not display Category: " + group);
} else { } else {
Slimefun.logger().log(Level.SEVERE, x, () -> "Could not display Category: " + category); Slimefun.logger().log(Level.SEVERE, x, () -> "Could not display Category: " + group);
} }
} }
} }
return categories; return groups;
} }
@Override @Override
@ -150,7 +153,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
} }
ChestMenu menu = create(p); ChestMenu menu = create(p);
List<ItemGroup> categories = getVisibleCategories(p, profile); List<ItemGroup> categories = getVisibleItemGroups(p, profile);
int index = 9; int index = 9;
createHeader(p, profile, menu); createHeader(p, profile, menu);
@ -161,7 +164,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
target++; target++;
ItemGroup category = categories.get(target); ItemGroup category = categories.get(target);
displayCategory(menu, p, profile, category, index); showItemGroup(menu, p, profile, category, index);
index++; index++;
} }
@ -193,11 +196,11 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
menu.open(p); menu.open(p);
} }
private void displayCategory(ChestMenu menu, Player p, PlayerProfile profile, ItemGroup category, int index) { private void showItemGroup(ChestMenu menu, Player p, PlayerProfile profile, ItemGroup group, int index) {
if (!(category instanceof LockedItemGroup) || !isSurvivalMode() || ((LockedItemGroup) category).hasUnlocked(p, profile)) { if (!(group instanceof LockedItemGroup) || !isSurvivalMode() || ((LockedItemGroup) group).hasUnlocked(p, profile)) {
menu.addItem(index, category.getItem(p)); menu.addItem(index, group.getItem(p));
menu.addMenuClickHandler(index, (pl, slot, item, action) -> { menu.addMenuClickHandler(index, (pl, slot, item, action) -> {
openCategory(profile, category, 1); openItemGroup(profile, group, 1);
return false; return false;
}); });
} else { } else {
@ -210,17 +213,18 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
lore.add(""); lore.add("");
for (ItemGroup parent : ((LockedItemGroup) category).getParents()) { for (ItemGroup parent : ((LockedItemGroup) group).getParents()) {
lore.add(parent.getItem(p).getItemMeta().getDisplayName()); lore.add(parent.getItem(p).getItemMeta().getDisplayName());
} }
menu.addItem(index, new CustomItemStack(Material.BARRIER, "&4" + Slimefun.getLocalization().getMessage(p, "guide.locked") + " &7- &f" + category.getItem(p).getItemMeta().getDisplayName(), lore.toArray(new String[0]))); menu.addItem(index, new CustomItemStack(Material.BARRIER, "&4" + Slimefun.getLocalization().getMessage(p, "guide.locked") + " &7- &f" + group.getItem(p).getItemMeta().getDisplayName(), lore.toArray(new String[0])));
menu.addMenuClickHandler(index, ChestMenuUtils.getEmptyClickHandler()); menu.addMenuClickHandler(index, ChestMenuUtils.getEmptyClickHandler());
} }
} }
@Override @Override
public void openCategory(PlayerProfile profile, ItemGroup category, int page) { @ParametersAreNonnullByDefault
public void openItemGroup(PlayerProfile profile, ItemGroup category, int page) {
Player p = profile.getPlayer(); Player p = profile.getPlayer();
if (p == null) { if (p == null) {
@ -248,7 +252,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
int next = page - 1; int next = page - 1;
if (next != page && next > 0) { if (next != page && next > 0) {
openCategory(profile, category, next); openItemGroup(profile, category, next);
} }
return false; return false;
@ -259,7 +263,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
int next = page + 1; int next = page + 1;
if (next != page && next <= pages) { if (next != page && next <= pages) {
openCategory(profile, category, next); openItemGroup(profile, category, next);
} }
return false; return false;
@ -384,6 +388,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
} }
@Override @Override
@ParametersAreNonnullByDefault
public void displayItem(PlayerProfile profile, ItemStack item, int index, boolean addToHistory) { public void displayItem(PlayerProfile profile, ItemStack item, int index, boolean addToHistory) {
Player p = profile.getPlayer(); Player p = profile.getPlayer();
@ -488,6 +493,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
} }
@Override @Override
@ParametersAreNonnullByDefault
public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToHistory) { public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToHistory) {
Player p = profile.getPlayer(); Player p = profile.getPlayer();
@ -621,9 +627,8 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
} }
} }
@Nonnull
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
private static ItemStack getDisplayItem(Player p, boolean isSlimefunRecipe, ItemStack item) { private static @Nonnull ItemStack getDisplayItem(Player p, boolean isSlimefunRecipe, ItemStack item) {
if (isSlimefunRecipe) { if (isSlimefunRecipe) {
SlimefunItem slimefunItem = SlimefunItem.getByItem(item); SlimefunItem slimefunItem = SlimefunItem.getByItem(item);
@ -724,8 +729,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
return Slimefun.getPermissionsService().hasPermission(p, item); return Slimefun.getPermissionsService().hasPermission(p, item);
} }
@Nonnull private @Nonnull ChestMenu create(@Nonnull Player p) {
private ChestMenu create(@Nonnull Player p) {
ChestMenu menu = new ChestMenu(Slimefun.getLocalization().getMessage(p, "guide.title.main")); ChestMenu menu = new ChestMenu(Slimefun.getLocalization().getMessage(p, "guide.title.main"));
menu.setEmptySlotsClickable(false); menu.setEmptySlotsClickable(false);

View File

@ -55,6 +55,7 @@ public class IntegrationsManager {
private boolean isMcMMOInstalled = false; private boolean isMcMMOInstalled = false;
private boolean isClearLagInstalled = false; private boolean isClearLagInstalled = false;
private boolean isItemsAdderInstalled = false; private boolean isItemsAdderInstalled = false;
private boolean isOrebfuscatorInstalled = false;
// Addon support // Addon support
private boolean isChestTerminalInstalled = false; private boolean isChestTerminalInstalled = false;
@ -141,6 +142,12 @@ public class IntegrationsManager {
Slimefun.logger().log(Level.WARNING, x, () -> "Failed to load Protection plugin integrations for Slimefun v" + Slimefun.getVersion()); Slimefun.logger().log(Level.WARNING, x, () -> "Failed to load Protection plugin integrations for Slimefun v" + Slimefun.getVersion());
} }
// Orebfuscator Integration
load("Orebfuscator", integration -> {
new OrebfuscatorIntegration(plugin).register();
isOrebfuscatorInstalled = true;
});
isChestTerminalInstalled = isAddonInstalled("ChestTerminal"); isChestTerminalInstalled = isAddonInstalled("ChestTerminal");
} }
@ -282,4 +289,7 @@ public class IntegrationsManager {
return isChestTerminalInstalled; return isChestTerminalInstalled;
} }
public boolean isOrebfuscatorInstalled() {
return isOrebfuscatorInstalled;
}
} }

View File

@ -0,0 +1,64 @@
package io.github.thebusybiscuit.slimefun4.integrations;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.annotation.Nonnull;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import io.github.thebusybiscuit.slimefun4.api.events.BlockPlacerPlaceEvent;
import io.github.thebusybiscuit.slimefun4.api.events.ExplosiveToolBreakBlocksEvent;
import io.github.thebusybiscuit.slimefun4.api.events.ReactorExplodeEvent;
import io.github.thebusybiscuit.slimefun4.implementation.Slimefun;
import net.imprex.orebfuscator.api.OrebfuscatorService;
/**
*
* This handles block breaks with orebfuscator
*
* @author NgLoader
*
*/
class OrebfuscatorIntegration implements Listener {
private final Slimefun plugin;
private OrebfuscatorService service;
OrebfuscatorIntegration(@Nonnull Slimefun plugin) {
this.plugin = plugin;
}
/**
* Init orebfuscation service and register listener
*/
public void register() {
this.service = Bukkit.getServer().getServicesManager().getRegistration(OrebfuscatorService.class).getProvider();
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlacerPlace(BlockPlacerPlaceEvent event) {
this.service.deobfuscate(Arrays.asList(event.getBlock(), event.getBlockPlacer()));
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onExplosiveToolBreakBlocks(ExplosiveToolBreakBlocksEvent event) {
Set<Block> blocks = new HashSet<>();
blocks.addAll(event.getAdditionalBlocks());
blocks.add(event.getPrimaryBlock());
this.service.deobfuscate(blocks);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onReactorExplode(ReactorExplodeEvent event) {
this.service.deobfuscate(Arrays.asList(event.getLocation().getBlock()));
}
}

View File

@ -21,6 +21,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
@ -316,13 +317,21 @@ public final class SlimefunUtils {
return false; return false;
} else if (itemMeta.hasDisplayName() && sfitemMeta.hasDisplayName() && !itemMeta.getDisplayName().equals(sfitemMeta.getDisplayName())) { } else if (itemMeta.hasDisplayName() && sfitemMeta.hasDisplayName() && !itemMeta.getDisplayName().equals(sfitemMeta.getDisplayName())) {
return false; return false;
} else if (!checkLore) { } else if (checkLore) {
return true; boolean hasItemMetaLore = itemMeta.hasLore();
} else if (itemMeta.hasLore() && sfitemMeta.hasLore()) { boolean hasSfItemMetaLore = sfitemMeta.hasLore();
return equalsLore(itemMeta.getLore(), sfitemMeta.getLore()); if (hasItemMetaLore && hasSfItemMetaLore && !equalsLore(itemMeta.getLore(), sfitemMeta.getLore())) {
} else { return false;
return !itemMeta.hasLore() && !sfitemMeta.hasLore(); } else if (hasItemMetaLore != hasSfItemMetaLore) {
return false;
}
} }
if (itemMeta instanceof PotionMeta && sfitemMeta instanceof PotionMeta) {
return ((PotionMeta) itemMeta).getBasePotionData().equals(((PotionMeta) sfitemMeta).getBasePotionData());
}
return true;
} }
/** /**

View File

@ -18,6 +18,7 @@ softdepend:
- ClearLag - ClearLag
- mcMMO - mcMMO
- ItemsAdder - ItemsAdder
- Orebfuscator
# We hook into these plugins too, but they depend on Slimefun. # We hook into these plugins too, but they depend on Slimefun.
loadBefore: loadBefore:

View File

@ -66,7 +66,7 @@ class TestGuideOpening {
SlimefunGuideImplementation guide = Mockito.mock(SlimefunGuideImplementation.class); SlimefunGuideImplementation guide = Mockito.mock(SlimefunGuideImplementation.class);
PlayerProfile profile = prepare(guide, history -> history.add(category, 1)); PlayerProfile profile = prepare(guide, history -> history.add(category, 1));
Mockito.verify(guide).openCategory(profile, category, 1); Mockito.verify(guide).openItemGroup(profile, category, 1);
} }
@Test @Test

View File

@ -77,7 +77,7 @@ class TestItemSetup {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/languages/en/categories.yml"), StandardCharsets.UTF_8))) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/languages/en/categories.yml"), StandardCharsets.UTF_8))) {
FileConfiguration config = YamlConfiguration.loadConfiguration(reader); FileConfiguration config = YamlConfiguration.loadConfiguration(reader);
for (ItemGroup category : Slimefun.getRegistry().getCategories()) { for (ItemGroup category : Slimefun.getRegistry().getAllItemGroups()) {
String path = category.getKey().getNamespace() + '.' + category.getKey().getKey(); String path = category.getKey().getNamespace() + '.' + category.getKey().getKey();
Assertions.assertTrue(config.contains(path)); Assertions.assertTrue(config.contains(path));
} }