mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
[CI skip] Updated changelog
This commit is contained in:
parent
d78e82cf05
commit
2085d9eeba
@ -32,6 +32,7 @@
|
||||
* (API) Added AsyncProfileLoadEvent
|
||||
* Added Talisman of the Wise
|
||||
* Added Book Binder
|
||||
* Added Tier 3 Electric Ore Grinder
|
||||
|
||||
#### Changes
|
||||
* Massive performance improvements to holograms/armorstands
|
||||
|
@ -388,7 +388,7 @@ public class PlayerProfile {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance(), () -> {
|
||||
AsyncProfileLoadEvent event = new AsyncProfileLoadEvent(new PlayerProfile(p));
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
|
||||
|
||||
SlimefunPlugin.getRegistry().getPlayerProfiles().put(uuid, event.getProfile());
|
||||
callback.accept(event.getProfile());
|
||||
});
|
||||
|
@ -23,10 +23,10 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||
|
||||
/**
|
||||
* Represents Book Binder, a machine that binds multiple enchantments books into one.
|
||||
*
|
||||
* @author ProfElements
|
||||
*/
|
||||
* Represents Book Binder, a machine that binds multiple enchantments books into one.
|
||||
*
|
||||
* @author ProfElements
|
||||
*/
|
||||
public class BookBinder extends AContainer {
|
||||
|
||||
private final ItemSetting<Boolean> bypassVanillaMaxLevel = new ItemSetting<>("bypass-vanilla-max-level", false);
|
||||
@ -36,36 +36,36 @@ public class BookBinder extends AContainer {
|
||||
@ParametersAreNonnullByDefault
|
||||
public BookBinder(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
|
||||
super(category, item, recipeType, recipe);
|
||||
|
||||
addItemSetting(bypassVanillaMaxLevel, hasCustomMaxLevel, customMaxLevel);
|
||||
|
||||
addItemSetting(bypassVanillaMaxLevel, hasCustomMaxLevel, customMaxLevel);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected MachineRecipe findNextRecipe(BlockMenu menu) {
|
||||
for (int slot : getInputSlots()) {
|
||||
ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1] : getInputSlots()[0]);
|
||||
|
||||
ItemStack item = menu.getItemInSlot(slot);
|
||||
if (isCompatible(item) && isCompatible(target)) {
|
||||
|
||||
|
||||
if (isCompatible(item) && isCompatible(target)) {
|
||||
EnchantmentStorageMeta itemMeta = (EnchantmentStorageMeta) item.getItemMeta();
|
||||
EnchantmentStorageMeta targetMeta = (EnchantmentStorageMeta) target.getItemMeta();
|
||||
|
||||
Map<Enchantment, Integer> storedItemEnchantments = itemMeta.getStoredEnchants();
|
||||
Map<Enchantment, Integer> storedTargetEnchantments = targetMeta.getStoredEnchants();
|
||||
Map<Enchantment, Integer> enchantments = combineEnchantments(storedItemEnchantments, storedTargetEnchantments);
|
||||
|
||||
|
||||
if (enchantments.size() > 0) {
|
||||
ItemStack book = new ItemStack(Material.ENCHANTED_BOOK);
|
||||
|
||||
EnchantmentStorageMeta enchantMeta = (EnchantmentStorageMeta) book.getItemMeta();
|
||||
|
||||
for (Map.Entry<Enchantment, Integer> entry : enchantments.entrySet()) {
|
||||
enchantMeta.addStoredEnchant(entry.getKey(), entry.getValue(), bypassVanillaMaxLevel.getValue());
|
||||
}
|
||||
|
||||
book.setItemMeta(enchantMeta);
|
||||
|
||||
MachineRecipe recipe = new MachineRecipe(25 * (enchantments.size() / this.getSpeed()), new ItemStack[] {target, item}, new ItemStack[] {book});
|
||||
|
||||
MachineRecipe recipe = new MachineRecipe(25 * (enchantments.size() / this.getSpeed()), new ItemStack[] { target, item }, new ItemStack[] { book });
|
||||
|
||||
if (!InvUtils.fitAll(menu.toInventory(), recipe.getOutput(), getOutputSlots())) {
|
||||
return null;
|
||||
@ -105,24 +105,23 @@ public class BookBinder extends AContainer {
|
||||
private Map<Enchantment, Integer> combineEnchantments(Map<Enchantment, Integer> ech1, Map<Enchantment, Integer> ech2) {
|
||||
Map<Enchantment, Integer> enchantments = new HashMap<>();
|
||||
boolean conflicts = false;
|
||||
|
||||
enchantments.putAll(ech1);
|
||||
|
||||
for (Map.Entry<Enchantment, Integer> entry : ech2.entrySet()) {
|
||||
for (Map.Entry<Enchantment, Integer> conflictsWith : enchantments.entrySet()) {
|
||||
if (entry.getKey().conflictsWith(conflictsWith.getKey())) {
|
||||
conflicts = true;
|
||||
conflicts = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!conflicts) {
|
||||
enchantments.merge(entry.getKey(), entry.getValue(), (a, b) -> {
|
||||
if (a == b) {
|
||||
if (a.intValue() == b.intValue()) {
|
||||
if (hasCustomMaxLevel.getValue()) {
|
||||
return a + 1 > customMaxLevel.getValue() ? customMaxLevel.getValue() : a + 1;
|
||||
} else {
|
||||
return a + 1;
|
||||
}
|
||||
|
||||
} else {
|
||||
int highestLevel = Math.max(a, b);
|
||||
|
||||
@ -131,13 +130,13 @@ public class BookBinder extends AContainer {
|
||||
} else {
|
||||
return highestLevel;
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return enchantments;
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return enchantments;
|
||||
|
||||
}
|
||||
}
|
@ -256,7 +256,7 @@ public class TalismanListener implements Listener {
|
||||
enchantments.put(Enchantment.LOOT_BONUS_BLOCKS, random.nextInt(3) + 3);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onExperienceReceive(PlayerExpChangeEvent e) {
|
||||
if (e.getAmount() > 0 && Talisman.checkFor(e, SlimefunItems.TALISMAN_WISE)) {
|
||||
|
@ -236,7 +236,7 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock,
|
||||
warn("The processing speed has not been configured correctly. The Item was disabled.");
|
||||
warn("Make sure to call '" + getClass().getSimpleName() + "#setProcessingSpeed(...)' before registering!");
|
||||
}
|
||||
|
||||
|
||||
registerDefaultRecipes();
|
||||
|
||||
if (getCapacity() > 0 && getEnergyConsumption() > 0 && getSpeed() > 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user