Compare commits

...
11 Commits
8 changed files with 97 additions and 83 deletions
+13 -12
View File
@@ -7,13 +7,13 @@ import net.minecrell.pluginyml.paper.PaperPluginDescription
plugins {
id("java")
id("java-library")
id("de.eldoria.plugin-yml.paper") version "0.8.0"
id("de.eldoria.plugin-yml.paper") version "0.9.0"
id("xyz.jpenilla.run-paper") version "1.0.6"
id("maven-publish")
}
group = "com.alttd.playershops"
version = System.getenv("BUILD_NUMBER") ?: "1.3-SNAPSHOT"
version = System.getenv("BUILD_NUMBER") ?: "1.4-SNAPSHOT"
description = "Player Shop plugin for Altitude."
apply<JavaLibraryPlugin>()
@@ -29,16 +29,17 @@ tasks {
}
runServer {
val fileName = "./run/cosmos.jar"
val file = File(fileName)
if (!file.parentFile.exists()) {
file.parentFile.mkdirs()
}
if (!file.exists()) {
// download("https://jenkins.destro.xyz/job/Cosmos/lastSuccessfulBuild/artifact/cosmos-server/build/libs/cosmos-bundler-1.21.11-R0.1-SNAPSHOT-mojmap.jar", fileName)
val dir = File(System.getProperty("user.home") + "/share/devserver/")
if (!dir.parentFile.exists()) {
dir.parentFile.mkdirs()
}
runDirectory.set(dir)
val fileName = "/cosmos.jar"
val file = File(dir.path + fileName)
serverJar(file)
minecraftVersion("1.21")
minecraftVersion("26.2")
}
jar {
@@ -73,8 +74,8 @@ dependencies {
}
compileOnly("com.github.TechFortress:GriefPrevention:16.17.1")
compileOnly("org.projectlombok:lombok:1.18.30")
annotationProcessor("org.projectlombok:lombok:1.18.30")
compileOnly("org.projectlombok:lombok:1.18.46")
annotationProcessor("org.projectlombok:lombok:1.18.46")
}
fun download(link: String, path: String) {
@@ -174,12 +174,14 @@ public class MessageConfig {
public static String GUI_HOME_TITLE = "<green>PlayerShops";
public static String GUI_LIST_PLAYERS_TITLE = "<green>Player shops";
public static String GUI_LIST_SHOPS_TITLE = "<green>Players shops by <playername>";
public static String GUI_LIST_SHOPS_ITEM_TITLE = "<green>Players shops by item";
public static String GUI_LIST_TRANSACTIONS_TITLE = "<green>Shop Transactions";
public static String GUI_MANAGE_TITLE = "<green>Shop Manager";
public static String GUI_PLAYER_SETTINGS_TITLE = "<green>Shop Settings Manager";
private static void guiTitles() {
GUI_HOME_TITLE = getString("gui.home-title", GUI_HOME_TITLE);
GUI_LIST_PLAYERS_TITLE = getString("gui.list-players-title", GUI_LIST_PLAYERS_TITLE);
GUI_LIST_SHOPS_ITEM_TITLE = getString("gui.list-items-title", GUI_LIST_SHOPS_ITEM_TITLE);
GUI_LIST_SHOPS_TITLE = getString("gui.list-shops-title", GUI_LIST_SHOPS_TITLE);
GUI_LIST_TRANSACTIONS_TITLE = getString("gui.list-transactions-title", GUI_LIST_TRANSACTIONS_TITLE);
GUI_MANAGE_TITLE = getString("gui.manage-title", GUI_MANAGE_TITLE);
@@ -4,29 +4,21 @@ import com.alttd.playershops.shop.PlayerShop;
import com.alttd.playershops.shop.ShopType;
import com.alttd.playershops.utils.EconomyUtils;
import com.alttd.playershops.utils.ShopUtil;
import com.alttd.playershops.utils.Util;
import io.papermc.paper.dialog.Dialog;
import io.papermc.paper.registry.data.dialog.ActionButton;
import io.papermc.paper.registry.data.dialog.DialogBase;
import io.papermc.paper.registry.data.dialog.action.DialogAction;
import io.papermc.paper.registry.data.dialog.body.DialogBody;
import io.papermc.paper.registry.data.dialog.input.DialogInput;
import io.papermc.paper.registry.data.dialog.input.SingleOptionDialogInput;
import io.papermc.paper.registry.data.dialog.type.DialogType;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickCallback;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
public class ManageShopDialog extends AbstractDialog {
@@ -85,9 +77,6 @@ public class ManageShopDialog extends AbstractDialog {
.initial(false)
.build()
);
inputs.add(
DialogInput.singleOption("item", MiniMessage.miniMessage().deserialize("<gold>Item</gold>"), itemEntries()).build()
);
int maxQty = (shop.isInitialized() && shop.getItemStack() != null ? shop.getItemStack().getMaxStackSize() : 64);
int initialQty = (shop.isInitialized() ? Math.min(shop.getAmount(), maxQty) : 1);
inputs.add(
@@ -148,19 +137,21 @@ public class ManageShopDialog extends AbstractDialog {
// Change Item
if (Boolean.TRUE.equals(view.getBoolean("changeitem"))) {
String selection = view.getText("item");
if (selection != null) {
if (selection.equalsIgnoreCase("reset")) {
shop.setItemStack(null);
} else {
int slot;
try {
slot = Integer.parseInt(selection);
shop.setItemStack(player.getInventory().getItem(slot));
} catch (NumberFormatException ignored) {
}
}
}
ItemStack itemStack = player.getInventory().getItemInMainHand().clone();
shop.setItemStack(itemStack);
// String selection = view.getText("item");
// if (selection != null) {
// if (selection.equalsIgnoreCase("reset")) {
// shop.setItemStack(null);
// } else {
// int slot;
// try {
// slot = Integer.parseInt(selection);
// shop.setItemStack(player.getInventory().getItem(slot));
// } catch (NumberFormatException ignored) {
// }
// }
// }
}
// Change Amount
@@ -188,27 +179,27 @@ public class ManageShopDialog extends AbstractDialog {
actions.add(saveButton);
}
List<SingleOptionDialogInput.OptionEntry> itemEntries() {
List<SingleOptionDialogInput.OptionEntry> optionEntries = new ArrayList<>();
if (getPlayer() == null) {
return optionEntries;
}
optionEntries.add(
SingleOptionDialogInput.OptionEntry.create("reset", MiniMessage.miniMessage().deserialize("<gold>Reset"), false)
);
for (int i = 0; i < getPlayer().getInventory().getSize() ; i++) {
ItemStack item = getPlayer().getInventory().getItem(i);
if (item == null || item.getType() == Material.AIR) continue;
ItemStack itemStack = item.clone();
optionEntries.add(
SingleOptionDialogInput.OptionEntry.create(String.valueOf(i), ShopUtil.spriteComponent(itemStack), shop.getItemStack() == itemStack)
);
}
return optionEntries;
}
// List<SingleOptionDialogInput.OptionEntry> itemEntries() {
// List<SingleOptionDialogInput.OptionEntry> optionEntries = new ArrayList<>();
//
// if (getPlayer() == null) {
// return optionEntries;
// }
//
// optionEntries.add(
// SingleOptionDialogInput.OptionEntry.create("reset", MiniMessage.miniMessage().deserialize("<gold>Reset"), false)
// );
//
// for (int i = 0; i < getPlayer().getInventory().getSize() ; i++) {
// ItemStack item = getPlayer().getInventory().getItem(i);
// if (item == null || item.getType() == Material.AIR) continue;
// ItemStack itemStack = item.clone();
// optionEntries.add(
// SingleOptionDialogInput.OptionEntry.create(String.valueOf(i), ShopUtil.spriteComponent(itemStack), shop.getItemStack() == itemStack)
// );
// }
//
// return optionEntries;
// }
}
@@ -44,7 +44,7 @@ public class SearchShopsDialog extends AbstractDialog {
closeButton,
5)
)
.base(DialogBase.builder(MiniMessage.miniMessage().deserialize(MessageConfig.GUI_LIST_SHOPS_TITLE))
.base(DialogBase.builder(MiniMessage.miniMessage().deserialize(MessageConfig.GUI_LIST_SHOPS_ITEM_TITLE))
.body(texts)
.inputs(inputs)
.afterAction(DialogBase.DialogAfterAction.CLOSE)
@@ -59,6 +59,11 @@ public class SearchShopsDialog extends AbstractDialog {
for (Map.Entry<Material, List<PlayerShop>> entry : PlayerShops.getInstance().getShopHandler().shopByMaterial().entrySet()) {
actions.add(ActionButton.builder(ShopUtil.spriteComponent(entry.getKey()))
.tooltip(
MiniMessage.miniMessage().deserialize(
entry.getValue().size() + "<green> Shops"
)
)
.action(
DialogAction.customClick((view, audience) -> {
if (!(audience instanceof Player player)) {
@@ -210,7 +210,7 @@ public class ShopHandler {
* @return TreeMap containing a list of PlayerShops per material.
*/
public TreeMap<Material, List<PlayerShop>> shopByMaterial() {
// TODO -- make this a cache. update cache on change, do not calc dynamicly
// TODO -- make this a cache. update cache on change, do not calc dynamically
TreeMap<Material, List<PlayerShop>> shopByMaterialTreeSet = new TreeMap<>();
for (PlayerShop shop : getShops()) {
@@ -218,7 +218,7 @@ public class ShopHandler {
continue;
}
Material material = shop.getItemStack().getType();
Material material = shop.getShopItemType();
List<PlayerShop> shopList = shopByMaterialTreeSet.computeIfAbsent(material, v -> new ArrayList<>());
shopList.add(shop);
}
@@ -148,9 +148,10 @@ public class PlayerShop {
}
public Inventory getInventory() {
// Could use a check if the block is still an InventoryHolder.
InventoryHolder container = (InventoryHolder) shopLocation.getBlock().getState();
return container.getInventory();
if (shopLocation.getBlock().getState() instanceof InventoryHolder inventoryHolder) {
return inventoryHolder.getInventory();
}
return null;
}
public boolean isInitialized() {
@@ -432,12 +433,15 @@ public class PlayerShop {
}
public ItemStack getItemStack() {
if (!isInitialized())
if (!isInitialized()) {
return null;
if (this.getType() != ShopType.RANDOM)
}
if (this.getType() != ShopType.RANDOM) {
return itemStack;
if (this.getInventory().isEmpty())
}
if (this.getInventory() == null) {
return null;
}
ArrayList<ItemStack> contents = new ArrayList<>();
for (ItemStack it : this.getInventory().getContents()) {
if (it != null) {
@@ -468,11 +472,13 @@ public class PlayerShop {
Component component = ShopUtil.itemNameComponent(getItemStack())
.append(Component.newline())
.append(Component.newline())
.append(Component.text("ShopOwner: " + getOwnerName()))
.append(Component.newline())
.append(Component.text("ShopType: " + type))
.append(Component.newline())
.append(Component.text("Price: " + price))
.append(Component.newline())
.append(Component.text("ShopType: " + amount))
.append(Component.text("Amount: " + amount))
.append(Component.newline())
.append(Component.text("World: " + shopLocation.getWorld().getName()))
.append(Component.newline())
@@ -484,4 +490,11 @@ public class PlayerShop {
return component;
}
public Material getShopItemType() {
if (this.type == ShopType.RANDOM) {
return Material.STRUCTURE_VOID; // TODO -- Load from config
}
return itemStack.getType();
}
}
@@ -109,17 +109,20 @@ public class InventoryUtils {
if (itemStack.getAmount() <= 0)
return true;
int overflow = addItem(inventory, itemStack);
int remaining = itemStack.getAmount();
//revert back if inventory cannot hold all of the items
if (overflow > 0) {
ItemStack revert = itemStack.clone();
revert.setAmount(revert.getAmount() - overflow);
InventoryUtils.removeItem(inventory, revert);
return false;
for (ItemStack stack : inventory.getStorageContents()) {
if (stack == null || stack.getType().isAir()) {
remaining -= itemStack.getMaxStackSize();
} else if (stack.isSimilar(itemStack)) {
remaining -= stack.getMaxStackSize() - stack.getAmount();
}
if (remaining <= 0)
return true;
}
removeItem(inventory, itemStack);
return true;
return false;
}
}
@@ -209,8 +209,7 @@ public class ItemMatcher {
if (mapView1 == null || mapView2 == null)
return false;
if (mapView1.getId() == mapView2.getId())
return true;
return mapView1.getId() == mapView2.getId();
}
return true;
}
@@ -267,8 +266,8 @@ public class ItemMatcher {
return false; // not the same color
// Do we need all of the above checks inside the shulker?
if (Arrays.equals(shulkerBox1.getInventory().getContents(), shulkerBox2.getInventory().getContents()))
return true; // same content
// same content if true
return Arrays.equals(shulkerBox1.getInventory().getContents(), shulkerBox2.getInventory().getContents());
}
}
return true;
@@ -296,7 +295,7 @@ public class ItemMatcher {
}
if (item1 == null || item2 == null) {
return true;
return false;
}
if (!item1.getType().equals(item2.getType())) {
@@ -311,7 +310,7 @@ public class ItemMatcher {
return metaMatches(item1, item2);
}
return !item1.hasItemMeta() && !item1.hasItemMeta();
return !item1.hasItemMeta() && !item2.hasItemMeta();
}
protected static boolean metaMatches(ItemStack item1, ItemStack item2) {