Skip to content

Commit

Permalink
use data manipulator for id
Browse files Browse the repository at this point in the history
  • Loading branch information
Hugo Beaucamps committed Jan 16, 2020
1 parent cbcf774 commit 8e7fec3
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 26 deletions.
21 changes: 12 additions & 9 deletions src/main/java/com/onaple/itemizer/Itemizer.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,25 @@
import org.spongepowered.api.command.args.GenericArguments;
import org.spongepowered.api.command.spec.CommandSpec;
import org.spongepowered.api.data.DataRegistration;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.entity.living.humanoid.player.RespawnPlayerEvent;
import org.spongepowered.api.event.filter.cause.First;
import org.spongepowered.api.event.game.GameRegistryEvent;
import org.spongepowered.api.event.game.state.GameConstructionEvent;
import org.spongepowered.api.event.game.state.GamePreInitializationEvent;
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
import org.spongepowered.api.event.game.state.GameStoppedServerEvent;
import org.spongepowered.api.event.network.ClientConnectionEvent;
import org.spongepowered.api.item.recipe.crafting.CraftingRecipe;
import org.spongepowered.api.item.recipe.smelting.SmeltingRecipe;
import org.spongepowered.api.network.PlayerConnection;
import org.spongepowered.api.plugin.Plugin;
import org.spongepowered.api.plugin.PluginContainer;
import org.spongepowered.api.text.Text;

import javax.inject.Inject;
import javax.sql.ConnectionEvent;
import java.io.IOException;

@Plugin(id = "itemizer", name = "Itemizer", version = "3.0",
Expand Down Expand Up @@ -149,10 +155,9 @@ public void preInit1(GameRegistryEvent.Register<SmeltingRecipe> event) {
public void preInit(GamePreInitializationEvent event) {

logger.warn("This version use a new config file format for items.");
new ItemizerKeys();
DataRegistration.builder()
.name("itemizer id")
.id("item_id") // prefix is added for you and you can't add it yourself
.name("Itemizer id")
.id("item.id") // prefix is added for you and you can't add it yourself
.dataClass(IdDataManipulator.class)
.immutableClass(IdDataManipulator.Immutable.class)
.builder(new IdDataManipulator.Builder())
Expand Down Expand Up @@ -282,12 +287,9 @@ public void onServerStart(GameStartedServerEvent event) {
CommandSpec hasItemCommand = CommandSpec.builder()
.description(Text.of("Display if a player have an Item."))
.arguments(
GenericArguments.onlyOne(
GenericArguments.player(Text.of("Player"))),
GenericArguments.onlyOne(
GenericArguments.string(Text.of("Ref"))),
GenericArguments.optional(
GenericArguments.integer(Text.of("Quantity")))
GenericArguments.onlyOne(GenericArguments.player(Text.of("player"))),
GenericArguments.onlyOne(GenericArguments.string(Text.of("reference"))),
GenericArguments.optional(GenericArguments.integer(Text.of("quantity")))
)
.permission(HAS_ITEM_PERMISSION)
.executor(new HasItemCommand()).build();
Expand All @@ -297,6 +299,7 @@ public void onServerStart(GameStartedServerEvent event) {
logger.info("ITEMIZER initialized.");
}


@Listener
public void onServerStop(GameStoppedServerEvent event) {
Itemizer.getConfigurationHandler().saveItemConfig();
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/com/onaple/itemizer/ItemizerKeys.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,19 @@
import org.spongepowered.api.data.DataQuery;
import org.spongepowered.api.data.key.Key;
import org.spongepowered.api.data.value.mutable.Value;
import org.spongepowered.api.util.TypeTokens;

public class ItemizerKeys {

public static Key<Value<String>> ITEM_ID;
private ItemizerKeys() {}
public static final Key<Value<String>> ITEM_ID;

public ItemizerKeys() {
static {
ITEM_ID = Key.builder()
.id("itemid")
.id("item.id")
.name("Item ID")
.type(new TypeToken<Value<String>>() {
})
.query(DataQuery.of("id"))
.type(TypeTokens.STRING_VALUE_TOKEN)
.query(DataQuery.of(".","id"))
.build();
}

Expand Down
6 changes: 5 additions & 1 deletion src/main/java/com/onaple/itemizer/data/beans/ItemBean.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.onaple.itemizer.data.beans;

import com.onaple.itemizer.Itemizer;
import com.onaple.itemizer.ItemizerKeys;
import com.onaple.itemizer.data.manipulators.IdDataManipulator;
import lombok.Data;
import lombok.NoArgsConstructor;
import ninja.leaping.configurate.objectmapping.Setting;
Expand Down Expand Up @@ -131,8 +133,10 @@ public static String getId(ItemStack item){
public static ItemBean from(String itemId, ItemStack itemStack) {

ItemBean itemBean = new ItemBean();
itemStack = setId(itemStack,itemId);
//itemStack = setId(itemStack,itemId);
itemBean.setId(itemId);
itemStack.offer(itemStack.getOrCreate(IdDataManipulator.class).get());
itemStack.offer(ItemizerKeys.ITEM_ID, itemId);
//item type
itemBean.setItemStackSnapshot(itemStack.createSnapshot());
return itemBean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@

public class IdDataManipulator extends AbstractSingleData<String,IdDataManipulator, IdDataManipulator.Immutable> {

public static int CONTENT_VERSION = 1;

protected IdDataManipulator(Key<? extends Value<String>> usedKey, String value) {
public IdDataManipulator(Key<? extends Value<String>> usedKey, String value) {
super(usedKey, value);
}

Expand All @@ -40,9 +41,19 @@ public Optional<IdDataManipulator> fill(DataHolder dataHolder, MergeFunction ove
return Optional.of(this);
}


@Override
public Optional<IdDataManipulator> from(DataContainer container) {
return Optional.of(this);
return from((DataView) container);
}

public Optional<IdDataManipulator> from(DataView view) {
if (view.contains(ItemizerKeys.ITEM_ID.getQuery())) {
setValue(view.getString(ItemizerKeys.ITEM_ID.getQuery()).get());
return Optional.of(this);
} else {
return Optional.empty();
}
}

@Override
Expand All @@ -57,7 +68,7 @@ public Immutable asImmutable() {

@Override
public int getContentVersion() {
return 0;
return CONTENT_VERSION;
}

public static class Immutable extends AbstractImmutableSingleData<String, IdDataManipulator.Immutable, IdDataManipulator> {
Expand All @@ -78,7 +89,7 @@ public IdDataManipulator asMutable() {

@Override
public int getContentVersion() {
return 1;
return CONTENT_VERSION;
}
}
public static class Builder extends AbstractDataBuilder<IdDataManipulator> implements DataManipulatorBuilder<IdDataManipulator, Immutable> {
Expand Down
13 changes: 10 additions & 3 deletions src/main/java/com/onaple/itemizer/service/ItemService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.onaple.itemizer.service;

import com.flowpowered.math.vector.Vector3d;
import com.onaple.itemizer.ItemizerKeys;
import com.onaple.itemizer.data.access.ItemDAO;
import com.onaple.itemizer.data.access.PoolDAO;
import com.onaple.itemizer.data.beans.ItemBean;
Expand All @@ -15,6 +16,7 @@
import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.EntityTypes;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.item.inventory.Inventory;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.item.inventory.ItemStackSnapshot;
import org.spongepowered.api.item.inventory.query.QueryOperationTypes;
Expand Down Expand Up @@ -98,9 +100,14 @@ public ItemStack construct(ItemBean item) {
*/
@Override
public boolean hasItem(Player player, String id, int quantity) throws ItemNotPresentException {
ItemStack itemStack = retrieve(id).orElseThrow(() -> new ItemNotPresentException(id));
itemStack.setQuantity(quantity);
return player.getInventory().contains(itemStack);
Inventory query = player.getInventory().query(QueryOperationTypes.ITEM_STACK_CUSTOM.of(itemStack1 -> {
Optional<String> optionalId = itemStack1.get(ItemizerKeys.ITEM_ID);
if (optionalId.isPresent() && optionalId.get().equals(id)) {
return true;
}
return false;
}));
return query.capacity()>=quantity;
}

@Override
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/com/onaple/itemizer/utils/ItemBuilder.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.onaple.itemizer.utils;

import com.onaple.itemizer.Itemizer;
import com.onaple.itemizer.ItemizerKeys;
import com.onaple.itemizer.data.beans.ItemBean;
import com.onaple.itemizer.data.beans.ItemNbtFactory;
import org.spongepowered.api.item.inventory.ItemStack;

import javax.inject.Singleton;
import java.util.Optional;
import java.util.Set;

@Singleton
Expand All @@ -20,7 +22,8 @@ public class ItemBuilder {
public ItemStack buildItemStack(ItemBean itemBean) {

ItemStack item = itemBean.getItemStackSnapshot().createStack();
item.offer(ItemizerKeys.ITEM_ID,itemBean.getId());
Optional<String> stringOptional = item.get(ItemizerKeys.ITEM_ID);
Itemizer.getLogger().info("generateItem from bean {}, and is it supported {}", stringOptional, item.supports(ItemizerKeys.ITEM_ID));
setCustomDatamanipulators( item, itemBean.getThirdParties());
return item;
}
Expand Down
4 changes: 2 additions & 2 deletions version.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#Fri Dec 13 22:06:32 CET 2019
#Thu Jan 16 23:03:38 CET 2020
MAJOR=3
MINOR=0
PATCH=0
PRE_RELEASE=
BUILD=434
BUILD=460
CODE=0

0 comments on commit 8e7fec3

Please sign in to comment.