Skip to content

Commit

Permalink
Update and fix shopkeepers integration (#412)
Browse files Browse the repository at this point in the history
* Update and fix shopkeepers integration

* `wrapTradingRecipe` -> `tradingRecipeToList`

* `onShopKeeperCreated` > `onPlayerCreateShopkeeper`

Also imports

* Improve `ShopKeeperTag` errors

* Implement `getJavaObject`

* `EntityTag.shopkeeper` meta fix
  • Loading branch information
tal5 committed Jun 20, 2023
1 parent 2d65e00 commit bf6a1cc
Show file tree
Hide file tree
Showing 7 changed files with 167 additions and 241 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -298,7 +298,7 @@
<dependency>
<groupId>com.nisovin.shopkeepers</groupId>
<artifactId>Shopkeepers</artifactId>
<version>2.8.1</version>
<version>2.16.6</version>
<scope>system</scope>
<systemPath>${basedir}/lib/Shopkeepers.jar</systemPath>
</dependency>
Expand Down
@@ -1,14 +1,15 @@
package com.denizenscript.depenizen.bukkit.bridges;

import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizencore.events.ScriptEvent;
import com.denizenscript.denizencore.objects.ObjectFetcher;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.depenizen.bukkit.Bridge;
import com.denizenscript.depenizen.bukkit.events.shopkeepers.ShopKeeperCreatedScriptEvent;
import com.denizenscript.depenizen.bukkit.events.shopkeepers.ShopKeeperTradeScriptEvent;
import com.denizenscript.depenizen.bukkit.properties.shopkeepers.ShopKeepersEntityProperties;
import com.denizenscript.depenizen.bukkit.objects.shopkeepers.ShopKeeperTag;
import com.denizenscript.depenizen.bukkit.Bridge;
import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizencore.events.ScriptEvent;
import com.denizenscript.denizencore.objects.ObjectFetcher;
import com.denizenscript.denizencore.objects.properties.PropertyParser;
import com.denizenscript.depenizen.bukkit.properties.shopkeepers.ShopKeepersEntityExtensions;
import com.nisovin.shopkeepers.api.shopkeeper.TradingRecipe;

public class ShopkeepersBridge extends Bridge {

Expand All @@ -17,9 +18,17 @@ public class ShopkeepersBridge extends Bridge {
@Override
public void init() {
instance = this;
ObjectFetcher.registerWithObjectFetcher(ShopKeeperTag.class);
ObjectFetcher.registerWithObjectFetcher(ShopKeeperTag.class, ShopKeeperTag.tagProcessor);
ScriptEvent.registerScriptEvent(ShopKeeperTradeScriptEvent.class);
ScriptEvent.registerScriptEvent(ShopKeeperCreatedScriptEvent.class);
PropertyParser.registerProperty(ShopKeepersEntityProperties.class, EntityTag.class);
ShopKeepersEntityExtensions.register();
}

public static ListTag tradingRecipeToList(TradingRecipe tradingRecipe) {
ListTag recipe = new ListTag(3);
recipe.addObject(new ItemTag(tradingRecipe.getItem1().asItemStack()));
recipe.addObject(new ItemTag(tradingRecipe.getItem2() != null ? tradingRecipe.getItem2().asItemStack() : null));
recipe.addObject(new ItemTag(tradingRecipe.getResultItem().asItemStack()));
return recipe;
}
}
Expand Up @@ -2,11 +2,9 @@

import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import com.nisovin.shopkeepers.api.events.PlayerCreatePlayerShopkeeperEvent;
import com.nisovin.shopkeepers.api.events.PlayerCreateShopkeeperEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
Expand All @@ -17,14 +15,12 @@ public class ShopKeeperCreatedScriptEvent extends BukkitScriptEvent implements L
// @Events
// player creates shopkeeper
//
// @Regex ^on player creates shopkeeper$
//
// @Cancellable true
//
// @Triggers when a player creates a shopkeeper.
//
// @Context
// <context.location> Returns the location of the shopkeeper being created.
// <context.location> Returns the LocationTag of the shopkeeper being created.
//
// @Plugin Depenizen, ShopKeepers
//
Expand All @@ -35,38 +31,27 @@ public class ShopKeeperCreatedScriptEvent extends BukkitScriptEvent implements L
// -->

public ShopKeeperCreatedScriptEvent() {
registerCouldMatcher("player creates shopkeeper");
}

public PlayerCreateShopkeeperEvent event;
public PlayerTag player;

@Override
public boolean couldMatch(ScriptPath path) {
return path.eventLower.startsWith("player creates shopkeeper");
}

@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(player, null);
return new BukkitScriptEntryData(event.getShopCreationData().getCreator());
}

@Override
public ObjectTag getContext(String name) {
if (name.startsWith("location")) {
return new LocationTag(event.getShopCreationData().getSpawnLocation());
}
return super.getContext(name);
return switch (name) {
case "location" -> new LocationTag(event.getShopCreationData().getSpawnLocation());
default -> super.getContext(name);
};
}

@EventHandler
public void onShopKeeperCreated(PlayerCreateShopkeeperEvent event) {
player = new PlayerTag(event.getShopCreationData().getCreator());
public void onPlayerCreateShopkeeper(PlayerCreateShopkeeperEvent event) {
this.event = event;
fire(event);
}

@EventHandler
public void onPlayerShopKeeperCreated(PlayerCreatePlayerShopkeeperEvent event) {
onShopKeeperCreated(event);
}
}
@@ -1,12 +1,12 @@
package com.denizenscript.depenizen.bukkit.events.shopkeepers;

import com.nisovin.shopkeepers.api.events.ShopkeeperTradeEvent;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import com.denizenscript.depenizen.bukkit.bridges.ShopkeepersBridge;
import com.denizenscript.depenizen.bukkit.objects.shopkeepers.ShopKeeperTag;
import com.nisovin.shopkeepers.api.events.ShopkeeperTradeEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

Expand All @@ -16,15 +16,13 @@ public class ShopKeeperTradeScriptEvent extends BukkitScriptEvent implements Lis
// @Events
// shopkeeper trade
//
// @Regex ^on shopkeeper trade$
//
// @Cancellable true
//
// @Triggers when a trade with a shopkeeper is completed.
//
// @Context
// <context.recipe> Returns the recipe for this trade.
// <context.shopkeeper> Returns the ShopKeeper that the trade occurred with.
// <context.recipe> Returns a ListTag(ItemTag) of the recipe for this trade.
// <context.shopkeeper> Returns the ShopKeeperTag of the ShopKeeper that the trade occurred with.
//
// @Plugin Depenizen, ShopKeepers
//
Expand All @@ -35,35 +33,27 @@ public class ShopKeeperTradeScriptEvent extends BukkitScriptEvent implements Lis
// -->

public ShopKeeperTradeScriptEvent() {
registerCouldMatcher("shopkeeper trade");
}

public ShopkeeperTradeEvent event;
public PlayerTag player;

@Override
public boolean couldMatch(ScriptPath path) {
return path.eventLower.startsWith("shopkeeper trade");
}

@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(player, null);
return new BukkitScriptEntryData(event.getPlayer());
}

@Override
public ObjectTag getContext(String name) {
if (name.startsWith("recipe")) {
return ShopKeeperTag.wrapTradingRecipe(event.getTradingRecipe());
}
else if (name.equals("shopkeeper")) {
return new ShopKeeperTag(event.getShopkeeper());
}
return super.getContext(name);
return switch (name) {
case "recipe" -> ShopkeepersBridge.tradingRecipeToList(event.getTradingRecipe());
case "shopkeeper" -> new ShopKeeperTag(event.getShopkeeper());
default -> super.getContext(name);
};
}

@EventHandler
public void onShopKeeperTrade(ShopkeeperTradeEvent event) {
player = new PlayerTag(event.getPlayer());
this.event = event;
fire(event);
}
Expand Down

0 comments on commit bf6a1cc

Please sign in to comment.