mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
Merge branch 'master' of https://github.com/Slimefun/Slimefun4.git into
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:
commit
633a736016
@ -31,15 +31,18 @@
|
||||
|
||||
#### Additions
|
||||
* A couple more items have their wiki page linked ingame now
|
||||
* Added Orebfuscator compatibility
|
||||
|
||||
#### Changes
|
||||
* Copper wire 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
|
||||
* Fixed #3164
|
||||
* Fixed #3177
|
||||
* Fixed unbreakable Flint and Steel still being damaged in Ignition Chambers
|
||||
* Fixed #2677
|
||||
|
||||
## Release Candidate 26 (20 Jul 2021)
|
||||
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#26
|
||||
|
19
pom.xml
19
pom.xml
@ -90,6 +90,11 @@
|
||||
<id>walshy-public</id>
|
||||
<url>https://repo.walshy.dev/public</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<!-- Orebfuscator -->
|
||||
<id>imprex-repo</id>
|
||||
<url>https://imprex.ingrim4.me/repository/maven-public/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<build>
|
||||
@ -473,6 +478,20 @@
|
||||
<version>2.4.6</version>
|
||||
<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>
|
||||
<exclusion>
|
||||
<!-- We don't need any of the dependencies -->
|
||||
|
@ -111,7 +111,7 @@ public class ItemGroup implements Keyed {
|
||||
|
||||
this.addon = addon;
|
||||
|
||||
Slimefun.getRegistry().getCategories().add(this);
|
||||
Slimefun.getRegistry().getAllItemGroups().add(this);
|
||||
sortCategoriesByTier();
|
||||
}
|
||||
|
||||
@ -145,7 +145,7 @@ public class ItemGroup implements Keyed {
|
||||
* This refreshes the {@link ItemGroup} order.
|
||||
*/
|
||||
private void sortCategoriesByTier() {
|
||||
List<ItemGroup> categories = Slimefun.getRegistry().getCategories();
|
||||
List<ItemGroup> categories = Slimefun.getRegistry().getAllItemGroups();
|
||||
Collections.sort(categories, Comparator.comparingInt(ItemGroup::getTier));
|
||||
}
|
||||
|
||||
@ -316,7 +316,7 @@ public class ItemGroup implements Keyed {
|
||||
* @return Whether this {@link ItemGroup} has been registered
|
||||
*/
|
||||
public boolean isRegistered() {
|
||||
return Slimefun.getRegistry().getCategories().contains(this);
|
||||
return Slimefun.getRegistry().getAllItemGroups().contains(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -77,12 +77,12 @@ public abstract class FlexItemGroup extends ItemGroup {
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void add(SlimefunItem item) {
|
||||
public final void add(@Nonnull SlimefunItem item) {
|
||||
throw new UnsupportedOperationException("You cannot add items to a FlexCategory!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public final List<SlimefunItem> getItems() {
|
||||
public final @Nonnull List<SlimefunItem> getItems() {
|
||||
throw new UnsupportedOperationException("A FlexCategory has no items!");
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ public abstract class FlexItemGroup extends ItemGroup {
|
||||
}
|
||||
|
||||
@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!");
|
||||
}
|
||||
|
||||
|
@ -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())) {
|
||||
addParent(category);
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ public class NestedItemGroup extends FlexItemGroup {
|
||||
@Override
|
||||
@ParametersAreNonnullByDefault
|
||||
public boolean isVisible(Player p, PlayerProfile profile, SlimefunGuideMode mode) {
|
||||
return true;
|
||||
return mode == SlimefunGuideMode.SURVIVAL_MODE;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -210,14 +210,14 @@ public class Research implements Keyed {
|
||||
public void unlockFromGuide(SlimefunGuideImplementation guide, Player player, PlayerProfile profile, SlimefunItem sfItem, ItemGroup category, int page) {
|
||||
if (!Slimefun.getRegistry().getCurrentlyResearchingPlayers().contains(player.getUniqueId())) {
|
||||
if (profile.hasUnlocked(this)) {
|
||||
guide.openCategory(profile, category, page);
|
||||
guide.openItemGroup(profile, category, page);
|
||||
} else {
|
||||
PlayerPreResearchEvent event = new PlayerPreResearchEvent(player, this, sfItem);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
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 {
|
||||
Slimefun.getLocalization().sendMessage(player, "messages.not-enough-xp", true);
|
||||
}
|
||||
|
@ -169,8 +169,7 @@ public final class SlimefunRegistry {
|
||||
*
|
||||
* @return {@link List} containing every enabled {@link ItemGroup}
|
||||
*/
|
||||
@Nonnull
|
||||
public List<ItemGroup> getCategories() {
|
||||
public @Nonnull List<ItemGroup> getAllItemGroups() {
|
||||
return categories;
|
||||
}
|
||||
|
||||
@ -179,8 +178,7 @@ public final class SlimefunRegistry {
|
||||
*
|
||||
* @return A {@link List} containing every {@link SlimefunItem}
|
||||
*/
|
||||
@Nonnull
|
||||
public List<SlimefunItem> getAllSlimefunItems() {
|
||||
public @Nonnull List<SlimefunItem> getAllSlimefunItems() {
|
||||
return slimefunItems;
|
||||
}
|
||||
|
||||
|
@ -189,7 +189,7 @@ public class GuideHistory {
|
||||
if (entry == null) {
|
||||
guide.openMainMenu(profile, mainMenuPage);
|
||||
} 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) {
|
||||
guide.displayItem(profile, (SlimefunItem) entry.getIndexedObject(), false);
|
||||
} else if (entry.getIndexedObject() instanceof ItemStack) {
|
||||
|
@ -83,7 +83,7 @@ public final class SlimefunGuide {
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
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
|
||||
|
@ -52,7 +52,7 @@ public interface SlimefunGuideImplementation {
|
||||
void openMainMenu(PlayerProfile profile, int page);
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
void openCategory(PlayerProfile profile, ItemGroup category, int page);
|
||||
void openItemGroup(PlayerProfile profile, ItemGroup group, int page);
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
void openSearch(PlayerProfile profile, String input, boolean addToHistory);
|
||||
|
@ -46,31 +46,29 @@ public class CheatSheetSlimefunGuide extends SurvivalSlimefunGuide {
|
||||
* The {@link Player} who opened his {@link SlimefunGuide}
|
||||
* @param profile
|
||||
* The {@link PlayerProfile} of the {@link Player}
|
||||
*
|
||||
* @return a {@link List} of visible {@link ItemGroup} instances
|
||||
*/
|
||||
@Nonnull
|
||||
@Override
|
||||
protected List<ItemGroup> getVisibleCategories(@Nonnull Player p, @Nonnull PlayerProfile profile) {
|
||||
List<ItemGroup> categories = new LinkedList<>();
|
||||
protected List<ItemGroup> getVisibleItemGroups(@Nonnull Player p, @Nonnull PlayerProfile profile) {
|
||||
List<ItemGroup> groups = new LinkedList<>();
|
||||
|
||||
for (ItemGroup category : Slimefun.getRegistry().getCategories()) {
|
||||
if (!(category instanceof FlexItemGroup)) {
|
||||
categories.add(category);
|
||||
for (ItemGroup group : Slimefun.getRegistry().getAllItemGroups()) {
|
||||
if (!(group instanceof FlexItemGroup) || ((FlexItemGroup) group).isVisible(p, profile, getMode())) {
|
||||
groups.add(group);
|
||||
}
|
||||
}
|
||||
|
||||
return categories;
|
||||
return groups;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public SlimefunGuideMode getMode() {
|
||||
public @Nonnull SlimefunGuideMode getMode() {
|
||||
return SlimefunGuideMode.CHEAT_MODE;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public ItemStack getItem() {
|
||||
public @Nonnull ItemStack getItem() {
|
||||
return item;
|
||||
}
|
||||
|
||||
|
@ -84,18 +84,17 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
*
|
||||
* @return The {@link Sound}
|
||||
*/
|
||||
@Nonnull
|
||||
public Sound getSound() {
|
||||
public @Nonnull Sound getSound() {
|
||||
return sound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SlimefunGuideMode getMode() {
|
||||
public @Nonnull SlimefunGuideMode getMode() {
|
||||
return SlimefunGuideMode.SURVIVAL_MODE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItem() {
|
||||
public @Nonnull ItemStack getItem() {
|
||||
return item;
|
||||
}
|
||||
|
||||
@ -110,29 +109,33 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
* The {@link Player} who opened his {@link SlimefunGuide}
|
||||
* @param profile
|
||||
* The {@link PlayerProfile} of the {@link Player}
|
||||
*
|
||||
* @return a {@link List} of visible {@link ItemGroup} instances
|
||||
*/
|
||||
@Nonnull
|
||||
protected List<ItemGroup> getVisibleCategories(@Nonnull Player p, @Nonnull PlayerProfile profile) {
|
||||
List<ItemGroup> categories = new LinkedList<>();
|
||||
protected @Nonnull List<ItemGroup> getVisibleItemGroups(@Nonnull Player p, @Nonnull PlayerProfile profile) {
|
||||
List<ItemGroup> groups = new LinkedList<>();
|
||||
|
||||
for (ItemGroup category : Slimefun.getRegistry().getCategories()) {
|
||||
for (ItemGroup group : Slimefun.getRegistry().getAllItemGroups()) {
|
||||
try {
|
||||
if (!category.isHidden(p) && (!(category instanceof FlexItemGroup) || ((FlexItemGroup) category).isVisible(p, profile, getMode()))) {
|
||||
categories.add(category);
|
||||
if (group instanceof FlexItemGroup) {
|
||||
if (((FlexItemGroup) group).isVisible(p, profile, getMode())) {
|
||||
groups.add(group);
|
||||
}
|
||||
} else if (!group.isHidden(p)) {
|
||||
groups.add(group);
|
||||
}
|
||||
} catch (Exception | LinkageError x) {
|
||||
SlimefunAddon addon = category.getAddon();
|
||||
SlimefunAddon addon = group.getAddon();
|
||||
|
||||
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 {
|
||||
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
|
||||
@ -150,7 +153,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
}
|
||||
|
||||
ChestMenu menu = create(p);
|
||||
List<ItemGroup> categories = getVisibleCategories(p, profile);
|
||||
List<ItemGroup> categories = getVisibleItemGroups(p, profile);
|
||||
|
||||
int index = 9;
|
||||
createHeader(p, profile, menu);
|
||||
@ -161,7 +164,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
target++;
|
||||
|
||||
ItemGroup category = categories.get(target);
|
||||
displayCategory(menu, p, profile, category, index);
|
||||
showItemGroup(menu, p, profile, category, index);
|
||||
|
||||
index++;
|
||||
}
|
||||
@ -193,11 +196,11 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
menu.open(p);
|
||||
}
|
||||
|
||||
private void displayCategory(ChestMenu menu, Player p, PlayerProfile profile, ItemGroup category, int index) {
|
||||
if (!(category instanceof LockedItemGroup) || !isSurvivalMode() || ((LockedItemGroup) category).hasUnlocked(p, profile)) {
|
||||
menu.addItem(index, category.getItem(p));
|
||||
private void showItemGroup(ChestMenu menu, Player p, PlayerProfile profile, ItemGroup group, int index) {
|
||||
if (!(group instanceof LockedItemGroup) || !isSurvivalMode() || ((LockedItemGroup) group).hasUnlocked(p, profile)) {
|
||||
menu.addItem(index, group.getItem(p));
|
||||
menu.addMenuClickHandler(index, (pl, slot, item, action) -> {
|
||||
openCategory(profile, category, 1);
|
||||
openItemGroup(profile, group, 1);
|
||||
return false;
|
||||
});
|
||||
} else {
|
||||
@ -210,17 +213,18 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
|
||||
lore.add("");
|
||||
|
||||
for (ItemGroup parent : ((LockedItemGroup) category).getParents()) {
|
||||
for (ItemGroup parent : ((LockedItemGroup) group).getParents()) {
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openCategory(PlayerProfile profile, ItemGroup category, int page) {
|
||||
@ParametersAreNonnullByDefault
|
||||
public void openItemGroup(PlayerProfile profile, ItemGroup category, int page) {
|
||||
Player p = profile.getPlayer();
|
||||
|
||||
if (p == null) {
|
||||
@ -248,7 +252,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
int next = page - 1;
|
||||
|
||||
if (next != page && next > 0) {
|
||||
openCategory(profile, category, next);
|
||||
openItemGroup(profile, category, next);
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -259,7 +263,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
int next = page + 1;
|
||||
|
||||
if (next != page && next <= pages) {
|
||||
openCategory(profile, category, next);
|
||||
openItemGroup(profile, category, next);
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -384,6 +388,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
}
|
||||
|
||||
@Override
|
||||
@ParametersAreNonnullByDefault
|
||||
public void displayItem(PlayerProfile profile, ItemStack item, int index, boolean addToHistory) {
|
||||
Player p = profile.getPlayer();
|
||||
|
||||
@ -488,6 +493,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
}
|
||||
|
||||
@Override
|
||||
@ParametersAreNonnullByDefault
|
||||
public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToHistory) {
|
||||
Player p = profile.getPlayer();
|
||||
|
||||
@ -621,9 +627,8 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@ParametersAreNonnullByDefault
|
||||
private static ItemStack getDisplayItem(Player p, boolean isSlimefunRecipe, ItemStack item) {
|
||||
private static @Nonnull ItemStack getDisplayItem(Player p, boolean isSlimefunRecipe, ItemStack item) {
|
||||
if (isSlimefunRecipe) {
|
||||
SlimefunItem slimefunItem = SlimefunItem.getByItem(item);
|
||||
|
||||
@ -724,8 +729,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation {
|
||||
return Slimefun.getPermissionsService().hasPermission(p, item);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
private ChestMenu create(@Nonnull Player p) {
|
||||
private @Nonnull ChestMenu create(@Nonnull Player p) {
|
||||
ChestMenu menu = new ChestMenu(Slimefun.getLocalization().getMessage(p, "guide.title.main"));
|
||||
|
||||
menu.setEmptySlotsClickable(false);
|
||||
|
@ -55,6 +55,7 @@ public class IntegrationsManager {
|
||||
private boolean isMcMMOInstalled = false;
|
||||
private boolean isClearLagInstalled = false;
|
||||
private boolean isItemsAdderInstalled = false;
|
||||
private boolean isOrebfuscatorInstalled = false;
|
||||
|
||||
// Addon support
|
||||
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());
|
||||
}
|
||||
|
||||
// Orebfuscator Integration
|
||||
load("Orebfuscator", integration -> {
|
||||
new OrebfuscatorIntegration(plugin).register();
|
||||
isOrebfuscatorInstalled = true;
|
||||
});
|
||||
|
||||
isChestTerminalInstalled = isAddonInstalled("ChestTerminal");
|
||||
}
|
||||
|
||||
@ -282,4 +289,7 @@ public class IntegrationsManager {
|
||||
return isChestTerminalInstalled;
|
||||
}
|
||||
|
||||
public boolean isOrebfuscatorInstalled() {
|
||||
return isOrebfuscatorInstalled;
|
||||
}
|
||||
}
|
||||
|
@ -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()));
|
||||
}
|
||||
}
|
@ -21,6 +21,7 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.persistence.PersistentDataContainer;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
@ -316,13 +317,21 @@ public final class SlimefunUtils {
|
||||
return false;
|
||||
} else if (itemMeta.hasDisplayName() && sfitemMeta.hasDisplayName() && !itemMeta.getDisplayName().equals(sfitemMeta.getDisplayName())) {
|
||||
return false;
|
||||
} else if (!checkLore) {
|
||||
return true;
|
||||
} else if (itemMeta.hasLore() && sfitemMeta.hasLore()) {
|
||||
return equalsLore(itemMeta.getLore(), sfitemMeta.getLore());
|
||||
} else {
|
||||
return !itemMeta.hasLore() && !sfitemMeta.hasLore();
|
||||
} else if (checkLore) {
|
||||
boolean hasItemMetaLore = itemMeta.hasLore();
|
||||
boolean hasSfItemMetaLore = sfitemMeta.hasLore();
|
||||
if (hasItemMetaLore && hasSfItemMetaLore && !equalsLore(itemMeta.getLore(), sfitemMeta.getLore())) {
|
||||
return false;
|
||||
} else if (hasItemMetaLore != hasSfItemMetaLore) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (itemMeta instanceof PotionMeta && sfitemMeta instanceof PotionMeta) {
|
||||
return ((PotionMeta) itemMeta).getBasePotionData().equals(((PotionMeta) sfitemMeta).getBasePotionData());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -18,6 +18,7 @@ softdepend:
|
||||
- ClearLag
|
||||
- mcMMO
|
||||
- ItemsAdder
|
||||
- Orebfuscator
|
||||
|
||||
# We hook into these plugins too, but they depend on Slimefun.
|
||||
loadBefore:
|
||||
|
@ -66,7 +66,7 @@ class TestGuideOpening {
|
||||
|
||||
SlimefunGuideImplementation guide = Mockito.mock(SlimefunGuideImplementation.class);
|
||||
PlayerProfile profile = prepare(guide, history -> history.add(category, 1));
|
||||
Mockito.verify(guide).openCategory(profile, category, 1);
|
||||
Mockito.verify(guide).openItemGroup(profile, category, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -77,7 +77,7 @@ class TestItemSetup {
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/languages/en/categories.yml"), StandardCharsets.UTF_8))) {
|
||||
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();
|
||||
Assertions.assertTrue(config.contains(path));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user