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

Added NotConfigurable attribute

This commit is contained in:
TheBusyBiscuit 2020-10-06 21:01:18 +02:00
parent f98d048b55
commit 07c84af3b5
3 changed files with 91 additions and 28 deletions

View File

@ -33,6 +33,7 @@
* You can now convert any gold ingot into gold dust with slightly less returns * You can now convert any gold ingot into gold dust with slightly less returns
* Magical Zombie Pills now also work on Zombified Piglins * Magical Zombie Pills now also work on Zombified Piglins
* (API) Added SlimefunGuideOpenEvent * (API) Added SlimefunGuideOpenEvent
* (API) Added "NotConfigurable" attribute to disable configurability
#### Changes #### Changes
* Improved Auto-Updater (Multi-Threading and more) * Improved Auto-Updater (Multi-Threading and more)
@ -59,6 +60,7 @@
* Fixed #2357 * Fixed #2357
* Fixed Auto Enchanters being unaffected by speed modifications from addons * Fixed Auto Enchanters being unaffected by speed modifications from addons
* Fixed Auto Disenchanters being unaffected by speed modifications from addons * Fixed Auto Disenchanters being unaffected by speed modifications from addons
* Fixed radioactive items still being radioactive when disabled
## Release Candidate 16 (07 Sep 2020) ## Release Candidate 16 (07 Sep 2020)
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#16 https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#16

View File

@ -0,0 +1,14 @@
package io.github.thebusybiscuit.slimefun4.core.attributes;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
/**
* Implement this interface for any {@link SlimefunItem} to prevent
* that {@link SlimefunItem} from showing up in the {@code Items.yml} config file.
*
* @author TheBusyBiscuit
*
*/
public interface NotConfigurable {
}

View File

@ -8,6 +8,7 @@ import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -30,6 +31,7 @@ import io.github.thebusybiscuit.slimefun4.api.exceptions.UnregisteredItemExcepti
import io.github.thebusybiscuit.slimefun4.api.exceptions.WrongItemStackException; import io.github.thebusybiscuit.slimefun4.api.exceptions.WrongItemStackException;
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
import io.github.thebusybiscuit.slimefun4.api.items.ItemState; import io.github.thebusybiscuit.slimefun4.api.items.ItemState;
import io.github.thebusybiscuit.slimefun4.core.attributes.NotConfigurable;
import io.github.thebusybiscuit.slimefun4.core.attributes.Placeable; import io.github.thebusybiscuit.slimefun4.core.attributes.Placeable;
import io.github.thebusybiscuit.slimefun4.core.attributes.Radioactive; import io.github.thebusybiscuit.slimefun4.core.attributes.Radioactive;
import io.github.thebusybiscuit.slimefun4.core.attributes.Rechargeable; import io.github.thebusybiscuit.slimefun4.core.attributes.Rechargeable;
@ -360,15 +362,18 @@ public class SlimefunItem implements Placeable {
SlimefunPlugin.getRegistry().getAllSlimefunItems().add(this); SlimefunPlugin.getRegistry().getAllSlimefunItems().add(this);
SlimefunPlugin.getRegistry().getSlimefunItemIds().put(id, this); SlimefunPlugin.getRegistry().getSlimefunItemIds().put(id, this);
SlimefunPlugin.getItemCfg().setDefaultValue(id + ".enabled", true); // Items that are "not-configurable" cannot be configured.
SlimefunPlugin.getItemCfg().setDefaultValue(id + ".can-be-used-in-workbenches", useableInWorkbench); if (!(this instanceof NotConfigurable)) {
SlimefunPlugin.getItemCfg().setDefaultValue(id + ".hide-in-guide", hidden); SlimefunPlugin.getItemCfg().setDefaultValue(id + ".enabled", true);
SlimefunPlugin.getItemCfg().setDefaultValue(id + ".allow-enchanting", enchantable); SlimefunPlugin.getItemCfg().setDefaultValue(id + ".can-be-used-in-workbenches", useableInWorkbench);
SlimefunPlugin.getItemCfg().setDefaultValue(id + ".allow-disenchanting", disenchantable); SlimefunPlugin.getItemCfg().setDefaultValue(id + ".hide-in-guide", hidden);
SlimefunPlugin.getItemCfg().setDefaultValue(id + ".allow-enchanting", enchantable);
SlimefunPlugin.getItemCfg().setDefaultValue(id + ".allow-disenchanting", disenchantable);
// Load all item settings // Load all item settings
for (ItemSetting<?> setting : itemSettings) { for (ItemSetting<?> setting : itemSettings) {
setting.load(this); setting.load(this);
}
} }
if (ticking && !SlimefunPlugin.getCfg().getBoolean("URID.enable-tickers")) { if (ticking && !SlimefunPlugin.getCfg().getBoolean("URID.enable-tickers")) {
@ -376,26 +381,17 @@ public class SlimefunItem implements Placeable {
return; return;
} }
if (this instanceof Radioactive) { if (this instanceof NotConfigurable) {
SlimefunPlugin.getRegistry().getRadioactiveItems().add(this); // Not-configurable items will be enabled.
} // Any other settings will remain as default.
state = ItemState.ENABLED;
if (SlimefunPlugin.getItemCfg().getBoolean(id + ".enabled")) { }
else if (SlimefunPlugin.getItemCfg().getBoolean(id + ".enabled")) {
if (!category.isRegistered()) {
category.register();
}
state = ItemState.ENABLED; state = ItemState.ENABLED;
checkForDeprecations(getClass());
useableInWorkbench = SlimefunPlugin.getItemCfg().getBoolean(id + ".can-be-used-in-workbenches"); useableInWorkbench = SlimefunPlugin.getItemCfg().getBoolean(id + ".can-be-used-in-workbenches");
hidden = SlimefunPlugin.getItemCfg().getBoolean(id + ".hide-in-guide"); hidden = SlimefunPlugin.getItemCfg().getBoolean(id + ".hide-in-guide");
enchantable = SlimefunPlugin.getItemCfg().getBoolean(id + ".allow-enchanting"); enchantable = SlimefunPlugin.getItemCfg().getBoolean(id + ".allow-enchanting");
disenchantable = SlimefunPlugin.getItemCfg().getBoolean(id + ".allow-disenchanting"); disenchantable = SlimefunPlugin.getItemCfg().getBoolean(id + ".allow-disenchanting");
SlimefunPlugin.getRegistry().getEnabledSlimefunItems().add(this);
loadItemHandlers();
} }
else if (this instanceof VanillaItem) { else if (this instanceof VanillaItem) {
state = ItemState.VANILLA_FALLBACK; state = ItemState.VANILLA_FALLBACK;
@ -404,19 +400,43 @@ public class SlimefunItem implements Placeable {
state = ItemState.DISABLED; state = ItemState.DISABLED;
} }
// Now we can be certain this item should be enabled
if (state == ItemState.ENABLED) {
// Register the Category too if it hasn't been registered yet
if (!category.isRegistered()) {
category.register();
}
// Send out deprecation warnings for any classes or intefaces
checkForDeprecations(getClass());
// Add it to the list of enabled items
SlimefunPlugin.getRegistry().getEnabledSlimefunItems().add(this);
// Load our Item Handlers
loadItemHandlers();
// Properly mark this Item as radioactive
if (this instanceof Radioactive) {
SlimefunPlugin.getRegistry().getRadioactiveItems().add(this);
}
}
// Lock the SlimefunItemStack from any accidental manipulations
if (item instanceof SlimefunItemStack && isItemStackImmutable()) { if (item instanceof SlimefunItemStack && isItemStackImmutable()) {
((SlimefunItemStack) item).lock(); ((SlimefunItemStack) item).lock();
} }
postRegister(); postRegister();
// handle runtime-registrations / auto-loading
if (SlimefunPlugin.getRegistry().isAutoLoadingEnabled() && state == ItemState.ENABLED) { if (SlimefunPlugin.getRegistry().isAutoLoadingEnabled() && state == ItemState.ENABLED) {
info("Item was registered during runtime."); info("Item was registered during runtime.");
load(); load();
} }
} }
catch (Exception x) { catch (Exception x) {
error("Registering " + toString() + " has failed", x); error("Registering " + toString() + " has failed!", x);
} }
} }
@ -464,7 +484,7 @@ public class SlimefunItem implements Placeable {
* @param c * @param c
* The {@link Class} from which to start this operation. * The {@link Class} from which to start this operation.
*/ */
private void checkForDeprecations(Class<?> c) { private void checkForDeprecations(@Nullable Class<?> c) {
if (SlimefunPlugin.getUpdater().getBranch() == SlimefunBranch.DEVELOPMENT) { if (SlimefunPlugin.getUpdater().getBranch() == SlimefunBranch.DEVELOPMENT) {
// This method is currently way too spammy with all the restructuring going on... // This method is currently way too spammy with all the restructuring going on...
// Since DEV builds are anyway under "development", things may be relocated. // Since DEV builds are anyway under "development", things may be relocated.
@ -526,6 +546,12 @@ public class SlimefunItem implements Placeable {
this.recipeType = type; this.recipeType = type;
} }
/**
* This sets the {@link Category} in which this {@link SlimefunItem} will be displayed.
*
* @param category
* The new {@link Category}
*/
public void setCategory(@Nonnull Category category) { public void setCategory(@Nonnull Category category) {
Validate.notNull(category, "The Category is not allowed to be null!"); Validate.notNull(category, "The Category is not allowed to be null!");
@ -590,6 +616,7 @@ public class SlimefunItem implements Placeable {
return false; return false;
} }
// If the given item is a SlimefunitemStack, simply compare the id
if (item instanceof SlimefunItemStack) { if (item instanceof SlimefunItemStack) {
return getID().equals(((SlimefunItemStack) item).getItemId()); return getID().equals(((SlimefunItemStack) item).getItemId());
} }
@ -670,6 +697,10 @@ public class SlimefunItem implements Placeable {
throw new UnsupportedOperationException("You cannot add an ItemSetting after the SlimefunItem was registered."); throw new UnsupportedOperationException("You cannot add an ItemSetting after the SlimefunItem was registered.");
} }
if (this instanceof NotConfigurable) {
throw new UnsupportedOperationException("This Item has been marked as NotConfigurable and cannot accept Item Settings!");
}
for (ItemSetting<?> setting : settings) { for (ItemSetting<?> setting : settings) {
if (setting != null) { if (setting != null) {
// Prevent two Item Settings with the same key // Prevent two Item Settings with the same key
@ -817,12 +848,28 @@ public class SlimefunItem implements Placeable {
return getDrops(); return getDrops();
} }
public void info(String message) { /**
* This will send an info message to the console and signal that this message came
* from this {@link SlimefunItem}, the message will be sent using the {@link Logger}
* of the {@link SlimefunAddon} which registered this {@link SlimefunItem}.
*
* @param message
* The message to send
*/
public void info(@Nonnull String message) {
String msg = toString() + ": " + message; String msg = toString() + ": " + message;
addon.getLogger().log(Level.INFO, msg); addon.getLogger().log(Level.INFO, msg);
} }
public void warn(String message) { /**
* This will send a warning to the console and signal that this warning came from
* this {@link SlimefunItem}, the warning will be sent using the {@link Logger}
* of the {@link SlimefunAddon} which registered this {@link SlimefunItem}.
*
* @param message
* The message to send
*/
public void warn(@Nonnull String message) {
String msg = toString() + ": " + message; String msg = toString() + ": " + message;
addon.getLogger().log(Level.WARNING, msg); addon.getLogger().log(Level.WARNING, msg);
@ -841,7 +888,7 @@ public class SlimefunItem implements Placeable {
* @param throwable * @param throwable
* The {@link Throwable} to throw as a stacktrace. * The {@link Throwable} to throw as a stacktrace.
*/ */
public void error(String message, Throwable throwable) { public void error(@Nonnull String message, @Nonnull Throwable throwable) {
addon.getLogger().log(Level.SEVERE, "Item \"{0}\" from {1} v{2} has caused an Error!", new Object[] { id, addon.getName(), addon.getPluginVersion() }); addon.getLogger().log(Level.SEVERE, "Item \"{0}\" from {1} v{2} has caused an Error!", new Object[] { id, addon.getName(), addon.getPluginVersion() });
if (addon.getBugTrackerURL() != null) { if (addon.getBugTrackerURL() != null) {