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

Merge branch 'master' into tags

This commit is contained in:
TheBusyBiscuit 2020-10-04 00:46:37 +02:00 committed by GitHub
commit 0e6fc92e28
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 131 additions and 13 deletions

View File

@ -31,6 +31,7 @@
* Added a config option for Grappling Hooks to not be consumed on use
* Added Talisman of the Caveman
* You can now convert any gold ingot into gold dust with slightly less returns
* (API) Added SlimefunGuideOpenEvent
* (API) Added custom tags for developers
#### Changes
@ -56,6 +57,8 @@
* Fixed #2360
* Fixed #2351
* Fixed #2357
* Fixed Auto Enchanters being unaffected by speed modifications from addons
* Fixed Auto Disenchanters being unaffected by speed modifications from addons
* Fixed #2238
## Release Candidate 16 (07 Sep 2020)

View File

@ -77,6 +77,7 @@
<build>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<defaultGoal>clean package</defaultGoal>
<finalName>${project.name} v${project.version}</finalName>
@ -213,7 +214,7 @@
<link>${spigot.javadocs}</link>
</links>
<!-- We can group pakages together in our Javadocs -->
<!-- We can group packages together in our Javadocs -->
<groups>
<group>
<title>Slimefun4 - API</title>

View File

@ -0,0 +1,104 @@
package io.github.thebusybiscuit.slimefun4.api.events;
import javax.annotation.Nonnull;
import org.apache.commons.lang.Validate;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.inventory.ItemStack;
import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout;
/**
* This {@link Event} is called whenever a {@link Player} tries to open the Slimefun Guide book.
*
* @author Linox
*
* @see SlimefunGuideLayout
*/
public class SlimefunGuideOpenEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private final Player player;
private final ItemStack guide;
private SlimefunGuideLayout layout;
private boolean cancelled;
public SlimefunGuideOpenEvent(@Nonnull Player p, @Nonnull ItemStack guide, @Nonnull SlimefunGuideLayout layout) {
Validate.notNull(p, "The Player cannot be null");
Validate.notNull(guide, "Guide cannot be null");
Validate.notNull(layout, "Layout cannot be null");
this.player = p;
this.guide = guide;
this.layout = layout;
}
/**
* This returns the {@link Player} that tries to open
* the Slimefun Guide.
*
* @return The {@link Player}
*/
@Nonnull
public Player getPlayer() {
return player;
}
/**
* This returns the {@link ItemStack} that {@link Player}
* tries to open the Slimefun Guide with.
*
* @return The {@link ItemStack}
*/
@Nonnull
public ItemStack getGuide() {
return guide;
}
/**
* This returns the {@link SlimefunGuideLayout} of the Slimefun Guide
* that {@link Player} tries to open.
*
* @return The {@link SlimefunGuideLayout}
*/
@Nonnull
public SlimefunGuideLayout getGuideLayout() {
return layout;
}
/**
* Changes the {@link SlimefunGuideLayout} that was tried to be opened with.
*
* @param layout
* The new {@link SlimefunGuideLayout}
*/
public void setGuideLayout(@Nonnull SlimefunGuideLayout layout) {
Validate.notNull(layout, "You must specify a layout that is not-null!");
this.layout = layout;
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancel) {
this.cancelled = cancel;
}
@Nonnull
public static HandlerList getHandlerList() {
return handlers;
}
@Nonnull
@Override
public HandlerList getHandlers() {
return getHandlerList();
}
}

View File

@ -108,7 +108,7 @@ public class AutoDisenchanter extends AContainer {
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(disenchantedItem, ench.getEnchantment(), 0);
}
MachineRecipe recipe = new MachineRecipe(90 * amount, new ItemStack[] { target, item }, new ItemStack[] { disenchantedItem, book });
MachineRecipe recipe = new MachineRecipe(90 * amount / this.getSpeed() , new ItemStack[] { target, item }, new ItemStack[] { disenchantedItem, book });
if (!InvUtils.fitAll(menu.toInventory(), recipe.getOutput(), getOutputSlots())) {
return null;

View File

@ -97,7 +97,7 @@ public class AutoEnchanter extends AContainer {
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(enchantedItem, ench.getEnchantment(), ench.getLevel());
}
MachineRecipe recipe = new MachineRecipe(75 * amount, new ItemStack[] { target, item }, new ItemStack[] { enchantedItem, new ItemStack(Material.BOOK) });
MachineRecipe recipe = new MachineRecipe(75 * amount / this.getSpeed(), new ItemStack[] { target, item }, new ItemStack[] { enchantedItem, new ItemStack(Material.BOOK) });
if (!InvUtils.fitAll(menu.toInventory(), recipe.getOutput(), getOutputSlots())) {
return null;

View File

@ -3,6 +3,7 @@ package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import javax.annotation.Nonnull;
import javax.annotation.ParametersAreNonnullByDefault;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Event.Result;
import org.bukkit.event.EventHandler;
@ -11,6 +12,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;
import io.github.thebusybiscuit.slimefun4.api.events.SlimefunGuideOpenEvent;
import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent;
import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuide;
import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout;
@ -45,23 +47,23 @@ public class SlimefunGuideListener implements Listener {
public void onInteract(PlayerRightClickEvent e) {
Player p = e.getPlayer();
if (openGuide(e, SlimefunGuideLayout.BOOK) == Result.ALLOW) {
if (tryOpenGuide(p, e, SlimefunGuideLayout.BOOK) == Result.ALLOW) {
if (p.isSneaking()) {
SlimefunGuideSettings.openSettings(p, e.getItem());
}
else {
SlimefunGuide.openGuide(p, SlimefunGuideLayout.BOOK);
openGuide(p, e, SlimefunGuideLayout.BOOK);
}
}
else if (openGuide(e, SlimefunGuideLayout.CHEST) == Result.ALLOW) {
else if (tryOpenGuide(p, e, SlimefunGuideLayout.CHEST) == Result.ALLOW) {
if (p.isSneaking()) {
SlimefunGuideSettings.openSettings(p, e.getItem());
}
else {
SlimefunGuide.openGuide(p, SlimefunGuideLayout.CHEST);
openGuide(p, e, SlimefunGuideLayout.CHEST);
}
}
else if (openGuide(e, SlimefunGuideLayout.CHEAT_SHEET) == Result.ALLOW) {
else if (tryOpenGuide(p, e, SlimefunGuideLayout.CHEAT_SHEET) == Result.ALLOW) {
if (p.isSneaking()) {
SlimefunGuideSettings.openSettings(p, e.getItem());
}
@ -72,16 +74,24 @@ public class SlimefunGuideListener implements Listener {
}
}
}
@ParametersAreNonnullByDefault
private void openGuide(Player p, PlayerRightClickEvent e, SlimefunGuideLayout layout) {
SlimefunGuideOpenEvent event = new SlimefunGuideOpenEvent(p, e.getItem(), layout);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
e.cancel();
SlimefunGuide.openGuide(p, event.getGuideLayout());
}
}
@Nonnull
@ParametersAreNonnullByDefault
private Result openGuide(PlayerRightClickEvent e, SlimefunGuideLayout layout) {
Player p = e.getPlayer();
private Result tryOpenGuide(Player p, PlayerRightClickEvent e, SlimefunGuideLayout layout) {
ItemStack item = e.getItem();
if (SlimefunUtils.isItemSimilar(item, SlimefunGuide.getItem(layout), true, false)) {
e.cancel();
if (!SlimefunPlugin.getWorldSettingsService().isWorldEnabled(p.getWorld())) {
SlimefunPlugin.getLocalization().sendMessage(p, "messages.disabled-item", true);
return Result.DENY;