mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
Fixes #1394
This commit is contained in:
parent
d37b1504ba
commit
1f672905d2
@ -34,6 +34,7 @@
|
|||||||
* Added a config setting to limit how many Nodes a Network can have
|
* Added a config setting to limit how many Nodes a Network can have
|
||||||
* Added support for Furnaces and Brewing Stands to Cargo Networks
|
* Added support for Furnaces and Brewing Stands to Cargo Networks
|
||||||
* Added Organic Food/Fertilizer for Dried Kelp
|
* Added Organic Food/Fertilizer for Dried Kelp
|
||||||
|
* Added many more strings to the messages.yml
|
||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
* Removed Solar Array
|
* Removed Solar Array
|
||||||
@ -54,6 +55,8 @@
|
|||||||
* Fixed #1212
|
* Fixed #1212
|
||||||
* Fixed #114
|
* Fixed #114
|
||||||
* Fixed #1385
|
* Fixed #1385
|
||||||
|
* Fixed #1390
|
||||||
|
* Fixed #1394
|
||||||
|
|
||||||
## Release Candidate 4 (06 Jan 2020)
|
## Release Candidate 4 (06 Jan 2020)
|
||||||
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#4
|
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#4
|
||||||
|
@ -35,100 +35,100 @@ public class ItemUseEvent extends Event {
|
|||||||
private Result itemResult = Result.DEFAULT;
|
private Result itemResult = Result.DEFAULT;
|
||||||
private Result blockResult = Result.DEFAULT;
|
private Result blockResult = Result.DEFAULT;
|
||||||
|
|
||||||
public ItemUseEvent(PlayerInteractEvent e) {
|
public ItemUseEvent(PlayerInteractEvent e) {
|
||||||
event = e;
|
event = e;
|
||||||
player = e.getPlayer();
|
player = e.getPlayer();
|
||||||
clickedBlock = Optional.ofNullable(e.getClickedBlock());
|
clickedBlock = Optional.ofNullable(e.getClickedBlock());
|
||||||
face = e.getBlockFace();
|
face = e.getBlockFace();
|
||||||
hand = e.getHand();
|
hand = e.getHand();
|
||||||
|
|
||||||
if (e.getItem() == null || e.getItem().getType() == Material.AIR || e.getItem().getAmount() == 0) {
|
if (e.getItem() == null || e.getItem().getType() == Material.AIR || e.getItem().getAmount() == 0) {
|
||||||
itemStack = Optional.empty();
|
itemStack = Optional.empty();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
itemStack = Optional.of(e.getItem());
|
itemStack = Optional.of(e.getItem());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HandlerList getHandlerList() {
|
public static HandlerList getHandlerList() {
|
||||||
return handlers;
|
return handlers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
return handlers;
|
return handlers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerInteractEvent getInteractEvent() {
|
public PlayerInteractEvent getInteractEvent() {
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public Player getPlayer() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getItem() {
|
public ItemStack getItem() {
|
||||||
return itemStack.orElse(new ItemStack(Material.AIR));
|
return itemStack.orElse(new ItemStack(Material.AIR));
|
||||||
}
|
}
|
||||||
|
|
||||||
public EquipmentSlot getHand() {
|
public EquipmentSlot getHand() {
|
||||||
return hand;
|
return hand;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<Block> getClickedBlock() {
|
public Optional<Block> getClickedBlock() {
|
||||||
return clickedBlock;
|
return clickedBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockFace getClickedFace() {
|
public BlockFace getClickedFace() {
|
||||||
return face;
|
return face;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<SlimefunItem> getSlimefunItem() {
|
public Optional<SlimefunItem> getSlimefunItem() {
|
||||||
|
|
||||||
if (!slimefunItem.isComputed()) {
|
if (!slimefunItem.isComputed()) {
|
||||||
if (itemStack.isPresent()) {
|
if (itemStack.isPresent()) {
|
||||||
slimefunItem.compute(SlimefunItem.getByItem(itemStack.get()));
|
slimefunItem.compute(SlimefunItem.getByItem(itemStack.get()));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
slimefunItem = ComputedOptional.empty();
|
slimefunItem = ComputedOptional.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return slimefunItem.getAsOptional();
|
return slimefunItem.getAsOptional();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<SlimefunItem> getSlimefunBlock() {
|
public Optional<SlimefunItem> getSlimefunBlock() {
|
||||||
|
|
||||||
if (!slimefunBlock.isComputed()) {
|
if (!slimefunBlock.isComputed()) {
|
||||||
if (clickedBlock.isPresent()) {
|
if (clickedBlock.isPresent()) {
|
||||||
slimefunBlock.compute(BlockStorage.check(clickedBlock.get()));
|
slimefunBlock.compute(BlockStorage.check(clickedBlock.get()));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
slimefunBlock = ComputedOptional.empty();
|
slimefunBlock = ComputedOptional.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return slimefunBlock.getAsOptional();
|
return slimefunBlock.getAsOptional();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cancel() {
|
public void cancel() {
|
||||||
itemResult = Result.DENY;
|
itemResult = Result.DENY;
|
||||||
blockResult = Result.DENY;
|
blockResult = Result.DENY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Result useItem() {
|
public Result useItem() {
|
||||||
return itemResult;
|
return itemResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Result useBlock() {
|
public Result useBlock() {
|
||||||
return blockResult;
|
return blockResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUseItem(Result result) {
|
public void setUseItem(Result result) {
|
||||||
itemResult = result;
|
itemResult = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUseBlock(Result result) {
|
public void setUseBlock(Result result) {
|
||||||
blockResult = result;
|
blockResult = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide {
|
|||||||
profile.getGuideHistory().clear();
|
profile.getGuideHistory().clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
ChestMenu menu = create();
|
ChestMenu menu = create(p);
|
||||||
|
|
||||||
List<Category> categories = SlimefunPlugin.getUtilities().enabledCategories;
|
List<Category> categories = SlimefunPlugin.getUtilities().enabledCategories;
|
||||||
List<GuideHandler> handlers = SlimefunPlugin.getUtilities().guideHandlers.values().stream().flatMap(List::stream).collect(Collectors.toList());
|
List<GuideHandler> handlers = SlimefunPlugin.getUtilities().guideHandlers.values().stream().flatMap(List::stream).collect(Collectors.toList());
|
||||||
@ -173,7 +173,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide {
|
|||||||
profile.getGuideHistory().add(category);
|
profile.getGuideHistory().add(category);
|
||||||
}
|
}
|
||||||
|
|
||||||
ChestMenu menu = create();
|
ChestMenu menu = create(p);
|
||||||
fillInv(p, profile, menu, survival);
|
fillInv(p, profile, menu, survival);
|
||||||
|
|
||||||
menu.addItem(1, new CustomItem(ChestMenuUtils.getBackButton(), meta -> meta.setLore(Arrays.asList("", ChatColors.color("&rLeft Click: &7Go back to Main Menu")))));
|
menu.addItem(1, new CustomItem(ChestMenuUtils.getBackButton(), meta -> meta.setLore(Arrays.asList("", ChatColors.color("&rLeft Click: &7Go back to Main Menu")))));
|
||||||
@ -400,7 +400,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide {
|
|||||||
recipeItems = new ItemStack[] {null, null, null, null, new CustomItem(Material.BARRIER, "&4We are somehow unable to show you this Recipe :/"), null, null, null, null};
|
recipeItems = new ItemStack[] {null, null, null, null, new CustomItem(Material.BARRIER, "&4We are somehow unable to show you this Recipe :/"), null, null, null, null};
|
||||||
}
|
}
|
||||||
|
|
||||||
ChestMenu menu = create();
|
ChestMenu menu = create(p);
|
||||||
displayItem(menu, profile, p, item, result, recipeType, recipeItems, addToHistory);
|
displayItem(menu, profile, p, item, result, recipeType, recipeItems, addToHistory);
|
||||||
|
|
||||||
if (recipes.length > 1) {
|
if (recipes.length > 1) {
|
||||||
@ -441,7 +441,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide {
|
|||||||
RecipeType recipeType = item.getRecipeType();
|
RecipeType recipeType = item.getRecipeType();
|
||||||
ItemStack[] recipe = item.getRecipe();
|
ItemStack[] recipe = item.getRecipe();
|
||||||
|
|
||||||
ChestMenu menu = create();
|
ChestMenu menu = create(p);
|
||||||
|
|
||||||
if (item.hasWiki()) {
|
if (item.hasWiki()) {
|
||||||
menu.addItem(8, new CustomItem(Material.KNOWLEDGE_BOOK, "&rView this Item on our Wiki &7(Slimefun Wiki)", "", "&7\u21E8 Click to open"));
|
menu.addItem(8, new CustomItem(Material.KNOWLEDGE_BOOK, "&rView this Item on our Wiki &7(Slimefun Wiki)", "", "&7\u21E8 Click to open"));
|
||||||
@ -496,16 +496,6 @@ public class ChestSlimefunGuide implements ISlimefunGuide {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
// Stats
|
|
||||||
menu.addItem(4, new CustomItem(SkullItem.fromPlayer(p), "&7Player Stats: &e" + p.getName(), "", "&7Progress: &a" + Math.round(((profile.getResearches().size() * 100.0F) / Research.list().size()) * 100.0F) / 100.0F + "% &e(" + profile.getResearches().size() + " / " + Research.list().size() + ")", "", "&7\u21E8 Click for a full summary"));
|
|
||||||
menu.addMenuClickHandler(4, (player, i, itemStack, clickAction) -> {
|
|
||||||
player.closeInventory();
|
|
||||||
profile.sendStats(player);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Search feature!
|
// Search feature!
|
||||||
menu.addItem(7, new CustomItem(ChestMenuUtils.getSearchButton(), SlimefunPlugin.getLocal().getMessage(p, "guide.search.name"), SlimefunPlugin.getLocal().getMessages(p, "guide.search.lore").toArray(new String[0])));
|
menu.addItem(7, new CustomItem(ChestMenuUtils.getSearchButton(), SlimefunPlugin.getLocal().getMessage(p, "guide.search.name"), SlimefunPlugin.getLocal().getMessages(p, "guide.search.lore").toArray(new String[0])));
|
||||||
menu.addMenuClickHandler(7, (pl, slot, item, action) -> {
|
menu.addMenuClickHandler(7, (pl, slot, item, action) -> {
|
||||||
@ -630,8 +620,8 @@ public class ChestSlimefunGuide implements ISlimefunGuide {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ChestMenu create() {
|
private static ChestMenu create(Player p) {
|
||||||
ChestMenu menu = new ChestMenu("Slimefun Guide");
|
ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.main"));
|
||||||
|
|
||||||
menu.setEmptySlotsClickable(false);
|
menu.setEmptySlotsClickable(false);
|
||||||
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1));
|
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1));
|
||||||
|
@ -39,7 +39,7 @@ public final class GuideSettings {
|
|||||||
private GuideSettings() {}
|
private GuideSettings() {}
|
||||||
|
|
||||||
public static void openSettings(Player p, ItemStack guide) {
|
public static void openSettings(Player p, ItemStack guide) {
|
||||||
ChestMenu menu = new ChestMenu("Settings / Info");
|
ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.settings"));
|
||||||
|
|
||||||
menu.setEmptySlotsClickable(false);
|
menu.setEmptySlotsClickable(false);
|
||||||
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F));
|
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F));
|
||||||
@ -252,7 +252,7 @@ public final class GuideSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void openLanguages(Player p) {
|
private static void openLanguages(Player p) {
|
||||||
ChestMenu menu = new ChestMenu("Slimefun4 Language Selector");
|
ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.languages"));
|
||||||
|
|
||||||
menu.setEmptySlotsClickable(false);
|
menu.setEmptySlotsClickable(false);
|
||||||
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F));
|
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F));
|
||||||
@ -309,7 +309,7 @@ public final class GuideSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void openCredits(Player p, int page) {
|
private static void openCredits(Player p, int page) {
|
||||||
ChestMenu menu = new ChestMenu("Slimefun4's contributors");
|
ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.credits"));
|
||||||
|
|
||||||
menu.setEmptySlotsClickable(false);
|
menu.setEmptySlotsClickable(false);
|
||||||
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F));
|
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F));
|
||||||
@ -355,8 +355,14 @@ public final class GuideSettings {
|
|||||||
for (Map.Entry<String, Integer> entry : contributor.getContributions()) {
|
for (Map.Entry<String, Integer> entry : contributor.getContributions()) {
|
||||||
String info = entry.getKey();
|
String info = entry.getKey();
|
||||||
|
|
||||||
|
if (!info.startsWith("&")) {
|
||||||
|
info = SlimefunPlugin.getLocal().getMessage(p, "guide.credits.roles." + info);
|
||||||
|
}
|
||||||
|
|
||||||
if (entry.getValue() > 0) {
|
if (entry.getValue() > 0) {
|
||||||
info += " &7(" + entry.getValue() + " Commit" + (entry.getValue() > 1 ? "s": "") + ")";
|
String commits = SlimefunPlugin.getLocal().getMessage(p, "guide.credits." + (entry.getValue() > 1 ? "commits": "commit"));
|
||||||
|
|
||||||
|
info += " &7(" + entry.getValue() + " " + commits + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
lore.add(ChatColors.color(info));
|
lore.add(ChatColors.color(info));
|
||||||
|
@ -58,9 +58,9 @@ public class GitHubService {
|
|||||||
this.logging = logging;
|
this.logging = logging;
|
||||||
addDefaultContributors();
|
addDefaultContributors();
|
||||||
|
|
||||||
connectors.add(new ContributionsConnector(this, "code", repository, "&6Developer"));
|
connectors.add(new ContributionsConnector(this, "code", repository, "developer"));
|
||||||
connectors.add(new ContributionsConnector(this, "wiki", "TheBusyBiscuit/Slimefun4-wiki", "&3Wiki Editor"));
|
connectors.add(new ContributionsConnector(this, "wiki", "TheBusyBiscuit/Slimefun4-wiki", "wiki"));
|
||||||
connectors.add(new ContributionsConnector(this, "resourcepack", "TheBusyBiscuit/Slimefun4-Resourcepack", "&cResourcepack Artist"));
|
connectors.add(new ContributionsConnector(this, "resourcepack", "TheBusyBiscuit/Slimefun4-Resourcepack", "resourcepack"));
|
||||||
|
|
||||||
connectors.add(new GitHubConnector(this) {
|
connectors.add(new GitHubConnector(this) {
|
||||||
|
|
||||||
|
@ -29,8 +29,8 @@ import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
|
|||||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MultiTool;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler;
|
||||||
@ -107,33 +107,6 @@ public class SlimefunItemListener implements Listener {
|
|||||||
slimefunItem.callItemHandler(ItemInteractionHandler.class, handler ->
|
slimefunItem.callItemHandler(ItemInteractionHandler.class, handler ->
|
||||||
handler.onRightClick(e, p, item)
|
handler.onRightClick(e, p, item)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (slimefunItem instanceof MultiTool) {
|
|
||||||
e.setCancelled(true);
|
|
||||||
|
|
||||||
List<Integer> modes = ((MultiTool) slimefunItem).getModes();
|
|
||||||
int index = utilities.mode.getOrDefault(p.getUniqueId(), 0);
|
|
||||||
|
|
||||||
if (!p.isSneaking()) {
|
|
||||||
float charge = ItemEnergy.getStoredEnergy(item);
|
|
||||||
float cost = 0.3F;
|
|
||||||
|
|
||||||
if (charge >= cost) {
|
|
||||||
p.getEquipment().setItemInMainHand(ItemEnergy.chargeItem(item, -cost));
|
|
||||||
Bukkit.getPluginManager().callEvent(new ItemUseEvent(e.getParentEvent(), SlimefunItem.getByID((String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(index) + ".item")).getItem().clone(), e.getClickedBlock()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
index++;
|
|
||||||
if (index == modes.size()) index = 0;
|
|
||||||
|
|
||||||
SlimefunItem selectedItem = SlimefunItem.getByID((String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(index) + ".item"));
|
|
||||||
String itemName = selectedItem != null ? selectedItem.getItemName(): "Unknown";
|
|
||||||
SlimefunPlugin.getLocal().sendMessage(p, "messages.mode-change", true, msg -> msg.replace("%device%", "Multi Tool").replace("%mode%", ChatColor.stripColor(itemName)));
|
|
||||||
utilities.mode.put(p.getUniqueId(), index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.HEAVY_CREAM, true)) e.setCancelled(true);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
|
@ -1,21 +1,22 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
public class ChargableItem extends SlimefunItem {
|
public class ChargableItem extends SlimefunItem {
|
||||||
|
|
||||||
private String chargeType;
|
private String chargeType;
|
||||||
|
|
||||||
public ChargableItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
|
public ChargableItem(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
|
||||||
super(category, item, id, recipeType, recipe);
|
super(category, item, recipeType, recipe);
|
||||||
this.chargeType = chargeType;
|
this.chargeType = chargeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChargableItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType, String[] keys, Object[] values) {
|
public ChargableItem(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, String chargeType, String[] keys, Object[] values) {
|
||||||
super(category, item, id, recipeType, recipe, keys, values);
|
super(category, item, recipeType, recipe, keys, values);
|
||||||
this.chargeType = chargeType;
|
this.chargeType = chargeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
|
||||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
|
||||||
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
|
||||||
|
|
||||||
public class MultiTool extends DamagableChargableItem {
|
|
||||||
|
|
||||||
private static final String PREFIX = "mode.";
|
|
||||||
|
|
||||||
private List<Integer> modes;
|
|
||||||
|
|
||||||
public MultiTool(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, String... items) {
|
|
||||||
super(Categories.TECH, item, recipeType, recipe, "Multi Tool", getKeys(items), getValues(items));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String[] getKeys(String... items) {
|
|
||||||
String[] keys = new String[items.length * 2];
|
|
||||||
|
|
||||||
for (int i = 0; i < items.length; i++) {
|
|
||||||
keys[i * 2] = PREFIX + i + ".enabled";
|
|
||||||
keys[i * 2 + 1] = PREFIX + i + ".item";
|
|
||||||
}
|
|
||||||
|
|
||||||
return keys;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Object[] getValues(String... items) {
|
|
||||||
Object[] values = new Object[items.length * 2];
|
|
||||||
|
|
||||||
for (int i = 0; i < items.length; i++) {
|
|
||||||
values[i * 2] = true;
|
|
||||||
values[i * 2 + 1] = items[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postRegister() {
|
|
||||||
List<Integer> list = new ArrayList<>();
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
while (Slimefun.getItemValue(this.getID(), PREFIX + i + ".enabled") != null) {
|
|
||||||
if ((boolean) Slimefun.getItemValue(this.getID(), PREFIX + i + ".enabled")) {
|
|
||||||
list.add(i);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.modes = list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Integer> getModes() {
|
|
||||||
return this.modes;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,117 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ChargableItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy;
|
||||||
|
|
||||||
|
public class MultiTool extends ChargableItem {
|
||||||
|
|
||||||
|
private static final String PREFIX = "mode.";
|
||||||
|
private static final float COST = 0.3F;
|
||||||
|
|
||||||
|
private Map<UUID, Integer> selectedMode = new HashMap<>();
|
||||||
|
private List<Integer> modes;
|
||||||
|
|
||||||
|
public MultiTool(SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, String... items) {
|
||||||
|
super(Categories.TECH, item, recipeType, recipe, "Multi Tool", getKeys(items), getValues(items));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String[] getKeys(String... items) {
|
||||||
|
String[] keys = new String[items.length * 2];
|
||||||
|
|
||||||
|
for (int i = 0; i < items.length; i++) {
|
||||||
|
keys[i * 2] = PREFIX + i + ".enabled";
|
||||||
|
keys[i * 2 + 1] = PREFIX + i + ".item";
|
||||||
|
}
|
||||||
|
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Object[] getValues(String... items) {
|
||||||
|
Object[] values = new Object[items.length * 2];
|
||||||
|
|
||||||
|
for (int i = 0; i < items.length; i++) {
|
||||||
|
values[i * 2] = true;
|
||||||
|
values[i * 2 + 1] = items[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ItemUseHandler getItemUseHandler() {
|
||||||
|
return e -> {
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
ItemStack item = e.getItem();
|
||||||
|
e.cancel();
|
||||||
|
|
||||||
|
int index = selectedMode.getOrDefault(p.getUniqueId(), 0);
|
||||||
|
|
||||||
|
if (!p.isSneaking()) {
|
||||||
|
float charge = ItemEnergy.getStoredEnergy(item);
|
||||||
|
|
||||||
|
if (charge >= COST) {
|
||||||
|
ItemEnergy.chargeItem(item, -COST);
|
||||||
|
|
||||||
|
String itemID = (String) Slimefun.getItemValue(getID(), "mode." + modes.get(index) + ".item");
|
||||||
|
SlimefunItem sfItem = SlimefunItem.getByID(itemID);
|
||||||
|
|
||||||
|
if (sfItem != null) {
|
||||||
|
sfItem.callItemHandler(ItemUseHandler.class, handler -> handler.onRightClick(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
index++;
|
||||||
|
if (index == modes.size()) index = 0;
|
||||||
|
|
||||||
|
SlimefunItem selectedItem = SlimefunItem.getByID((String) Slimefun.getItemValue(getID(), "mode." + modes.get(index) + ".item"));
|
||||||
|
String itemName = selectedItem != null ? selectedItem.getItemName(): "Unknown";
|
||||||
|
SlimefunPlugin.getLocal().sendMessage(p, "messages.mode-change", true, msg -> msg.replace("%device%", "Multi Tool").replace("%mode%", ChatColor.stripColor(itemName)));
|
||||||
|
selectedMode.put(p.getUniqueId(), index);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preRegister() {
|
||||||
|
super.preRegister();
|
||||||
|
addItemHandler(getItemUseHandler());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postRegister() {
|
||||||
|
List<Integer> list = new ArrayList<>();
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
while (Slimefun.getItemValue(this.getID(), PREFIX + i + ".enabled") != null) {
|
||||||
|
if ((boolean) Slimefun.getItemValue(this.getID(), PREFIX + i + ".enabled")) {
|
||||||
|
list.add(i);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.modes = list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Integer> getModes() {
|
||||||
|
return this.modes;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -6,8 +6,8 @@ import org.bukkit.block.Block;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.thebusybiscuit.cscorelib2.chat.ChatColors;
|
|
||||||
import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler;
|
import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
@ -28,13 +28,16 @@ public class Multimeter extends SimpleSlimefunItem<ItemUseHandler> {
|
|||||||
|
|
||||||
if (block.isPresent()) {
|
if (block.isPresent()) {
|
||||||
Block b = block.get();
|
Block b = block.get();
|
||||||
|
|
||||||
if (ChargableBlock.isChargable(b)) {
|
if (ChargableBlock.isChargable(b)) {
|
||||||
e.cancel();
|
e.cancel();
|
||||||
|
|
||||||
|
String stored = DoubleHandler.getFancyDouble(ChargableBlock.getCharge(b)) + " J";
|
||||||
|
String capacity = DoubleHandler.getFancyDouble(ChargableBlock.getMaxCharge(b)) + " J";
|
||||||
|
|
||||||
Player p = e.getPlayer();
|
Player p = e.getPlayer();
|
||||||
p.sendMessage("");
|
p.sendMessage("");
|
||||||
p.sendMessage(ChatColors.color("&bStored Energy: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getCharge(b)) + " J"));
|
SlimefunPlugin.getLocal().sendMessage(p, "messages.multimeter", str -> str.replace("%stored%", stored).replace("%capacity%", capacity));
|
||||||
p.sendMessage(ChatColors.color("&bCapacity: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getMaxCharge(b)) + " J"));
|
|
||||||
p.sendMessage("");
|
p.sendMessage("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.HandledBlock;
|
|||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.JetBoots;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.JetBoots;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Jetpack;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Jetpack;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingItem;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
|
||||||
@ -84,6 +83,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicSugar;
|
|||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MeatJerky;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MeatJerky;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Medicine;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Medicine;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MultiTool;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Multimeter;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Multimeter;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.NetherGoldPan;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.NetherGoldPan;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfContainment;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfContainment;
|
||||||
|
@ -3,12 +3,13 @@ package me.mrCookieSlime.Slimefun.api.energy;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.cscorelib2.chat.ChatColors;
|
||||||
|
|
||||||
public final class ItemEnergy {
|
public final class ItemEnergy {
|
||||||
|
|
||||||
private ItemEnergy() {}
|
private ItemEnergy() {}
|
||||||
@ -20,8 +21,8 @@ public final class ItemEnergy {
|
|||||||
if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F;
|
if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F;
|
||||||
|
|
||||||
for (String line : item.getItemMeta().getLore()) {
|
for (String line : item.getItemMeta().getLore()) {
|
||||||
if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) {
|
if (line.startsWith(ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) {
|
||||||
return Float.valueOf(line.split(" / ")[0].replace(ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7"), ""));
|
return Float.valueOf(line.split(" / ")[0].replace(ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7"), ""));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ public final class ItemEnergy {
|
|||||||
if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F;
|
if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F;
|
||||||
|
|
||||||
for (String line: item.getItemMeta().getLore()) {
|
for (String line: item.getItemMeta().getLore()) {
|
||||||
if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) {
|
if (line.startsWith(ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) {
|
||||||
return Float.valueOf(line.split(" / ")[1].replace(" J", ""));
|
return Float.valueOf(line.split(" / ")[1].replace(" J", ""));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -71,7 +72,7 @@ public final class ItemEnergy {
|
|||||||
for (int i = 0; i < lore.size(); i++) {
|
for (int i = 0; i < lore.size(); i++) {
|
||||||
String line = lore.get(i);
|
String line = lore.get(i);
|
||||||
|
|
||||||
if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) {
|
if (line.startsWith(ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) {
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -79,7 +80,7 @@ public final class ItemEnergy {
|
|||||||
|
|
||||||
BigDecimal decimal = BigDecimal.valueOf(stored).setScale(2, BigDecimal.ROUND_HALF_UP);
|
BigDecimal decimal = BigDecimal.valueOf(stored).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
|
||||||
lore.set(index, ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7") + decimal.floatValue() + " / " + capacity + " J");
|
lore.set(index, ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7") + decimal.floatValue() + " / " + capacity + " J");
|
||||||
|
|
||||||
ItemMeta im = item.getItemMeta();
|
ItemMeta im = item.getItemMeta();
|
||||||
im.setLore(lore);
|
im.setLore(lore);
|
||||||
|
@ -104,7 +104,6 @@ public final class Utilities {
|
|||||||
public final Map<UUID, Boolean> jumpState = new HashMap<>();
|
public final Map<UUID, Boolean> jumpState = new HashMap<>();
|
||||||
public final Set<UUID> damage = new HashSet<>();
|
public final Set<UUID> damage = new HashSet<>();
|
||||||
public final Map<UUID, Entity[]> remove = new HashMap<>();
|
public final Map<UUID, Entity[]> remove = new HashMap<>();
|
||||||
public final Map<UUID, Integer> mode = new HashMap<>();
|
|
||||||
|
|
||||||
public final Map<UUID, Integer> enchanting = new HashMap<>();
|
public final Map<UUID, Integer> enchanting = new HashMap<>();
|
||||||
public final Map<UUID, ItemStack> backpack = new HashMap<>();
|
public final Map<UUID, ItemStack> backpack = new HashMap<>();
|
||||||
|
@ -29,6 +29,21 @@ guide:
|
|||||||
languages:
|
languages:
|
||||||
updated: '&aYour language was successfully set to: &b%lang%'
|
updated: '&aYour language was successfully set to: &b%lang%'
|
||||||
|
|
||||||
|
title:
|
||||||
|
main: 'Slimefun Guide'
|
||||||
|
settings: 'Settings & Info'
|
||||||
|
languages: 'Select your preferred language'
|
||||||
|
credits: 'Slimefun4 Contributors'
|
||||||
|
|
||||||
|
credits:
|
||||||
|
commit: 'Commit'
|
||||||
|
commits: 'Commits'
|
||||||
|
roles:
|
||||||
|
developer: '&6Developer'
|
||||||
|
wiki: '&3Wiki Editor'
|
||||||
|
resourcepack: '&cResourcepack Artist'
|
||||||
|
translator: '&9Translator'
|
||||||
|
|
||||||
messages:
|
messages:
|
||||||
not-researched: '&4You do not have enough knowledge to understand this'
|
not-researched: '&4You do not have enough knowledge to understand this'
|
||||||
not-enough-xp: '&4You do not have enough XP to unlock this'
|
not-enough-xp: '&4You do not have enough XP to unlock this'
|
||||||
@ -49,6 +64,7 @@ messages:
|
|||||||
disabled-in-world: '&4&lThis Item has been disabled in this world'
|
disabled-in-world: '&4&lThis Item has been disabled in this world'
|
||||||
disabled-item: '&4&lThis Item has been disabled! How did you even get that?'
|
disabled-item: '&4&lThis Item has been disabled! How did you even get that?'
|
||||||
no-tome-yourself: '&cYou cannot use the &4Tome of Knowledge &con yourself...'
|
no-tome-yourself: '&cYou cannot use the &4Tome of Knowledge &con yourself...'
|
||||||
|
multimeter: '&bStored Energy: &3%stored% &b/ &3%capacity%'
|
||||||
|
|
||||||
talisman:
|
talisman:
|
||||||
anvil: '&a&oYour Talisman saved your tool from breaking'
|
anvil: '&a&oYour Talisman saved your tool from breaking'
|
||||||
|
Loading…
Reference in New Issue
Block a user