Skip to content

Commit

Permalink
Shopkeeper integration tested. does not work yet.
Browse files Browse the repository at this point in the history
  • Loading branch information
Rocologo committed Aug 17, 2022
1 parent 23deec1 commit 3487ea2
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 58 deletions.
107 changes: 57 additions & 50 deletions src/one/lindegaard/BagOfGold/compatibility/ProtocolLibHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,66 +27,73 @@ public class ProtocolLibHelper {
public static void enableProtocolLib() {
protocolManager = ProtocolLibrary.getProtocolManager();

ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(BagOfGold.getInstance(),
ListenerPriority.HIGHEST, PacketType.Play.Server.SET_SLOT, PacketType.Play.Server.WINDOW_ITEMS) {
@Override
public void onPacketSending(PacketEvent event) {
if (event.getPacketType() == PacketType.Play.Server.SET_SLOT) {
PacketContainer packet = event.getPacket().deepClone();
StructureModifier<ItemStack> sm = packet.getItemModifier();
for (int i = 0; i < sm.size(); i++) {
ItemStack is = sm.getValues().get(i);
if (is.hasItemMeta()) {
ItemMeta itemMeta = is.getItemMeta();
if (itemMeta.hasLore()) {
List<String> lore = itemMeta.getLore();
Iterator<String> itr = lore.iterator();
while (itr.hasNext()) {
String str = itr.next();
if (str.startsWith("Hidden("))
// if (event.getPlayer().getGameMode() == GameMode.SURVIVAL ||
// !Core.getConfigManager().rewardItemtype.equalsIgnoreCase("ITEM"))
if (event.getPlayer().getGameMode() == GameMode.SURVIVAL)
itr.remove();
ProtocolLibrary.getProtocolManager()
.addPacketListener(new PacketAdapter(BagOfGold.getInstance(), ListenerPriority.HIGHEST,
PacketType.Play.Server.SET_SLOT, PacketType.Play.Server.WINDOW_ITEMS,
PacketType.Play.Server.RECIPES, PacketType.Play.Server.RECIPE_UPDATE) {
@Override
public void onPacketSending(PacketEvent event) {
if (event.getPacketType() == PacketType.Play.Server.SET_SLOT) {
PacketContainer packet = event.getPacket().deepClone();
StructureModifier<ItemStack> sm = packet.getItemModifier();
for (int i = 0; i < sm.size(); i++) {
ItemStack is = sm.getValues().get(i);
if (is.hasItemMeta()) {
ItemMeta itemMeta = is.getItemMeta();
if (itemMeta.hasLore()) {
List<String> lore = itemMeta.getLore();
Iterator<String> itr = lore.iterator();
while (itr.hasNext()) {
String str = itr.next();
if (str.startsWith("Hidden("))
// if (event.getPlayer().getGameMode() == GameMode.SURVIVAL ||
// !Core.getConfigManager().rewardItemtype.equalsIgnoreCase("ITEM"))
if (event.getPlayer().getGameMode() == GameMode.SURVIVAL)
itr.remove();
}
itemMeta.setLore(lore);
is.setItemMeta(itemMeta);
}
}
itemMeta.setLore(lore);
is.setItemMeta(itemMeta);
}
event.setPacket(packet);
}
}
event.setPacket(packet);
}

else if (event.getPacketType() == PacketType.Play.Server.WINDOW_ITEMS) {
PacketContainer packet = event.getPacket().deepClone();
StructureModifier<List<ItemStack>> modifiers = packet.getItemListModifier();
for (int j = 0; j < modifiers.size(); j++) {
List<ItemStack> itemStackList = modifiers.getValues().get(j);
for (int i = 0; i < itemStackList.size(); i++) {
ItemStack is = itemStackList.get(i);
if (is.hasItemMeta()) {
ItemMeta itemMeta = is.getItemMeta();
if (itemMeta.hasLore()) {
List<String> lore = itemMeta.getLore();
Iterator<String> itr = lore.iterator();
while (itr.hasNext()) {
String str = itr.next();
if (str.startsWith("Hidden("))
// if (event.getPlayer().getGameMode() == GameMode.SURVIVAL ||
// !Core.getConfigManager().rewardItemtype.equalsIgnoreCase("ITEM"))
if (event.getPlayer().getGameMode() == GameMode.SURVIVAL)
itr.remove();
PacketContainer packet = event.getPacket().deepClone();
StructureModifier<List<ItemStack>> modifiers = packet.getItemListModifier();
for (int j = 0; j < modifiers.size(); j++) {
List<ItemStack> itemStackList = modifiers.getValues().get(j);
for (int i = 0; i < itemStackList.size(); i++) {
ItemStack is = itemStackList.get(i);
if (is.hasItemMeta()) {
ItemMeta itemMeta = is.getItemMeta();
if (itemMeta.hasLore()) {
List<String> lore = itemMeta.getLore();
Iterator<String> itr = lore.iterator();
while (itr.hasNext()) {
String str = itr.next();
if (str.startsWith("Hidden("))
// if (event.getPlayer().getGameMode() == GameMode.SURVIVAL ||
// !Core.getConfigManager().rewardItemtype.equalsIgnoreCase("ITEM"))

if (event.getPlayer().getGameMode() == GameMode.SURVIVAL) {
BagOfGold.getInstance().getMessages().debug("ProtocolLibHelper:ItemSlots=%s", event.getPacket().getItemSlots().toString());
itr.remove();
}
}
itemMeta.setLore(lore);
is.setItemMeta(itemMeta);
}
}
itemMeta.setLore(lore);
is.setItemMeta(itemMeta);
}
}
event.setPacket(packet);
}
}
event.setPacket(packet);
}
}
});


});
}

public static ProtocolManager getProtocolmanager() {
Expand Down
4 changes: 2 additions & 2 deletions src/one/lindegaard/BagOfGold/config/ConfigManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,8 @@ public ConfigManager(BagOfGold plugin, File file) {
@ConfigField(name = "enable-integration-citizens", category = "plugins", comment = "Enable integration with Citizens2")
public boolean enableIntegrationCitizens = true;

@ConfigField(name = "enable-integration-shopkeepers", category = "plugins", comment = "Enable integration with Shopkeepers")
public boolean enableIntegrationShopkeepers = true;
@ConfigField(name = "enable-integration-shopkeepers", category = "plugins", comment = "Enable integration with Shopkeepers. This is still in BETA TEST and you should not use the Shopkeeper integration.")
public boolean enableIntegrationShopkeepers = false;

@ConfigField(name = "enable-integration-essentials", category = "plugins", comment = "Enable integration with Essentials"
+ "\nhttp://dev.bukkit.org/bukkit-plugins/essentialsx/")
Expand Down
55 changes: 49 additions & 6 deletions src/one/lindegaard/BagOfGold/rewards/BagOfGoldItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.MerchantInventory;
import org.bukkit.inventory.MerchantRecipe;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.metadata.FixedMetadataValue;

Expand Down Expand Up @@ -638,7 +640,7 @@ private boolean isInventoryAllowed(Inventory inv) {
if (Servers.isMC114OrNewer())
allowedInventories = Arrays.asList(InventoryType.PLAYER, InventoryType.BARREL, InventoryType.ANVIL,
InventoryType.CHEST, InventoryType.DISPENSER, InventoryType.DROPPER, InventoryType.ENDER_CHEST,
InventoryType.HOPPER, InventoryType.SHULKER_BOX, InventoryType.CRAFTING);
InventoryType.HOPPER, InventoryType.SHULKER_BOX, InventoryType.CRAFTING, InventoryType.MERCHANT);
else if (Servers.isMC19OrNewer())
allowedInventories = Arrays.asList(InventoryType.PLAYER, InventoryType.ANVIL, InventoryType.CHEST,
InventoryType.DISPENSER, InventoryType.DROPPER, InventoryType.ENDER_CHEST, InventoryType.HOPPER,
Expand Down Expand Up @@ -775,7 +777,7 @@ public void onInventoryClickReward(InventoryClickEvent event) {
}
}

if (clickedInventory.getType()==InventoryType.MERCHANT) { // && slotType == SlotType.CRAFTING) {
if (inventory.getType() == InventoryType.MERCHANT) { // && slotType == SlotType.CRAFTING) {
if (ShopkeepersCompat.isSupported()) {
plugin.getMessages().debug(
"action=%s, InvType=%s, clickedInvType=%s, slottype=%s, slotno=%s, current=%s, cursor=%s, view=%s, key=%s",
Expand All @@ -786,8 +788,12 @@ public void onInventoryClickReward(InventoryClickEvent event) {
}
}

List<SlotType> allowedSlots = Arrays.asList(SlotType.CONTAINER, SlotType.QUICKBAR, SlotType.OUTSIDE,
SlotType.ARMOR);
List<SlotType> allowedSlots;
if (ShopkeepersCompat.isSupported())
allowedSlots = Arrays.asList(SlotType.CONTAINER, SlotType.QUICKBAR, SlotType.OUTSIDE, SlotType.ARMOR,
SlotType.CRAFTING, SlotType.RESULT);
else
allowedSlots = Arrays.asList(SlotType.CONTAINER, SlotType.QUICKBAR, SlotType.OUTSIDE, SlotType.ARMOR);

if (allowedSlots.contains(slotType)) {
if (isInventoryAllowed(clickedInventory)) {
Expand Down Expand Up @@ -1011,6 +1017,7 @@ public void onInventoryClickReward(InventoryClickEvent event) {
Reward reward = Reward.getReward(isCursor);
if (reward.isMoney()) {
event.setCancelled(true);
double added_money = reward.getMoney()*amount_of_cursor;
reward.setMoney(reward.getMoney() * (amount_of_cursor + amount_of_currentslot));

isCurrentSlot = Reward.setDisplayNameAndHiddenLores(isCursor.clone(), reward);
Expand All @@ -1019,9 +1026,13 @@ public void onInventoryClickReward(InventoryClickEvent event) {
isCursor.setType(Material.AIR);
isCursor.setAmount(0);
event.setCursor(isCursor);
if (clickedInventory.getType()==InventoryType.PLAYER) {
plugin.getRewardManager().addMoneyToPlayerBalance(player, added_money);
}
plugin.getMessages().debug("(2a)%s moved %s (%s) into Inventory:%s", player.getName(),
reward.getDisplayName(), added_money, clickedInventory.getType());
}
plugin.getMessages().debug("%s moved %s (%s) into Inventory", player.getName(),
reward.getDisplayName(), reward.getMoney());

}

} else { // GameMode!=Survival
Expand Down Expand Up @@ -1103,6 +1114,8 @@ public void onInventoryClickReward(InventoryClickEvent event) {
event.setCursor(isCurrentSlot);
plugin.getMessages().debug("%s merged two rewards(1)", player.getName());
if (clickedInventory.getType() == InventoryType.PLAYER) {
//plugin.getRewardManager().removeMoneyFromPlayerBalance(player, )
//plugin.getRewardManager().addMoneyToPlayerBalance(player, reward2.getMoney() * amount_reward2- reward1.getMoney() * amount_reward1);
plugin.getRewardManager().addMoneyToPlayerBalance(player, added_money);
}
} else {
Expand Down Expand Up @@ -1172,5 +1185,35 @@ public void onInventoryClickReward(InventoryClickEvent event) {
return;
}
}

@EventHandler
public void onVillagerTradeEvent(InventoryClickEvent event) {
if (event.getClickedInventory() instanceof MerchantInventory inventory) {
Integer slotClick = event.getSlot();
//plugin.getMessages().debug("onVillagetTradeEvent: slot=%s",slotClick.toString());
MerchantInventory villagerMerchantInventory = inventory;
ItemStack slotItem = villagerMerchantInventory.getItem(slotClick);
//plugin.getMessages().debug("onVillagetTradeEvent: slotItem=%s",slotItem.toString());
MerchantRecipe villagerMerchantRecipe = villagerMerchantInventory.getSelectedRecipe();
//plugin.getMessages().debug("onVillagetTradeEvent: Ingredients=%s", villagerMerchantRecipe.getIngredients().toString());
if (slotClick != 2){return;}
//if (slotItem != null || slotItem.getType() != Material.AIR){
// Merchant entity = villagerMerchantInventory.getMerchant();
//TradeEvent villagerTradeEvent = new TradeEvent(
// (Player) entity.getTrader(),
// entity,
// villagerMerchantInventory,
// villagerMerchantRecipe,
// slotItem,
// slotClick,
// villagerMerchantRecipe.getAdjustedIngredient1(),
// villagerMerchantRecipe.getMaxUses(),
// villagerMerchantRecipe.getVillagerExperience()
//);
//Bukkit.getServer().getPluginManager().callEvent(villagerTradeEvent);
//if (villagerTradeEvent.isCancelled()){ event.setCancelled(true); }
//}
}
}

}

0 comments on commit 3487ea2

Please sign in to comment.