Browse Source

custom villager shops without villagers

Kajetan Johannes Hammerle 4 years ago
parent
commit
9ff6b384a5

+ 0 - 1
src/main/java/me/km/entities/EntityHuman.java

@@ -31,7 +31,6 @@ public class EntityHuman extends CreatureEntity {
     private static final DataParameter<Float> SCALE = EntityDataManager.createKey(EntityHuman.class, DataSerializers.FLOAT);
     private static final DataParameter<Boolean> SLIM = EntityDataManager.createKey(EntityHuman.class, DataSerializers.BOOLEAN);
 
-    private float lastScale = 1.0f;
     private final float originalWidth;
     private final float originalHeight;
     private EntitySize size;

+ 99 - 0
src/main/java/me/km/snuviscript/FakeMerchant.java

@@ -0,0 +1,99 @@
+package me.km.snuviscript;
+
+import me.km.entities.ModEntities;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.merchant.IMerchant;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.MerchantOffer;
+import net.minecraft.item.MerchantOffers;
+import net.minecraft.nbt.CompoundNBT;
+import net.minecraft.network.IPacket;
+import net.minecraft.util.SoundEvent;
+import net.minecraft.util.SoundEvents;
+import net.minecraft.world.World;
+import net.minecraftforge.api.distmarker.Dist;
+import net.minecraftforge.api.distmarker.OnlyIn;
+
+public class FakeMerchant extends Entity implements IMerchant {
+    private PlayerEntity customer = null;
+    private final MerchantOffers offers = new MerchantOffers();
+
+    public FakeMerchant() {
+        super(ModEntities.NOBODY, null);
+    }
+
+    @Override
+    public PlayerEntity getCustomer() {
+        return this.customer;
+    }
+
+    @Override
+    public void setCustomer(PlayerEntity p) {
+        if(p != null) {
+            world = p.world;
+            setPosition(p.getPosX(), p.getPosY(), p.getPosZ());
+        }
+        this.customer = p;
+    }
+
+    @Override
+    public MerchantOffers getOffers() {
+        return this.offers;
+    }
+
+    @OnlyIn(Dist.CLIENT)
+    @Override
+    public void setClientSideOffers(MerchantOffers offers) {
+    }
+
+    @Override
+    public void onTrade(MerchantOffer offer) {
+        offer.increaseUses();
+    }
+
+    @Override
+    public void verifySellingItem(ItemStack stack) {
+    }
+
+    @Override
+    public World getWorld() {
+        return world;
+    }
+
+    @Override
+    public int getXp() {
+        return 0;
+    }
+
+    @Override
+    public void setXP(int xp) {
+    }
+
+    @Override
+    public boolean func_213705_dZ() {
+        return false;
+    }
+
+    @Override
+    public SoundEvent getYesSound() {
+        return SoundEvents.ENTITY_VILLAGER_YES;
+    }
+
+    @Override
+    protected void registerData() {
+    }
+
+    @Override
+    protected void readAdditional(CompoundNBT cnbt) {
+    }
+
+    @Override
+    protected void writeAdditional(CompoundNBT cnbt) {
+    }
+
+    @Override
+    public IPacket<?> createSpawnPacket() {
+        return null;
+    }
+}

+ 1 - 0
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -45,6 +45,7 @@ public class MinecraftFunctions {
         ReadCommands.registerFunctions(sm, server);
         TextCommands.registerFunctions(sm);       
         BanCommands.registerFunctions(sm, server);
+        ShopCommands.registerFunctions(sm);
         Commands.registerFunctions(sm, scripts, perms, scheduler, server, commands);
     }
 }

+ 0 - 1
src/main/java/me/km/snuviscript/commands/Commands.java

@@ -14,7 +14,6 @@ import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.text.StringTextComponent;
 
 public class Commands {
-    @SuppressWarnings("")
     public static void registerFunctions(ScriptManager sm, Scripts scripts, Permissions perms, SnuviScheduler scheduler,
             MinecraftServer server, ModCommandManager commands) {
         sm.registerFunction("setmotd", (sc, in) -> {

+ 36 - 0
src/main/java/me/km/snuviscript/commands/ShopCommands.java

@@ -0,0 +1,36 @@
+package me.km.snuviscript.commands;
+
+import me.hammerle.snuviscript.code.ScriptManager;
+import me.km.snuviscript.FakeMerchant;
+import net.minecraft.entity.player.ServerPlayerEntity;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.MerchantOffer;
+import net.minecraft.util.text.StringTextComponent;
+
+public class ShopCommands {
+    public static void registerFunctions(ScriptManager sm) {
+        sm.registerFunction("shop.new", (sc, in) -> new FakeMerchant());
+        sm.registerConsumer("shop.addoffer", (sc, in) -> {
+            FakeMerchant npc = (FakeMerchant) in[0].get(sc);
+            ItemStack buy = (ItemStack) in[1].get(sc);
+            ItemStack sell = (ItemStack) in[2].get(sc);
+            int maxUses = (in.length >= 4) ? in[3].getInt(sc) : Integer.MAX_VALUE;
+            npc.getOffers().add(new MerchantOffer(buy, sell, maxUses, 0, 1.0f));
+        });
+        sm.registerConsumer("shop.adddoubleoffer", (sc, in) -> {
+            FakeMerchant npc = (FakeMerchant) in[0].get(sc);
+            ItemStack buyA = (ItemStack) in[1].get(sc);
+            ItemStack buyB = (ItemStack) in[2].get(sc);
+            ItemStack sell = (ItemStack) in[3].get(sc);
+            int maxUses = (in.length >= 5) ? in[4].getInt(sc) : Integer.MAX_VALUE;
+            npc.getOffers().add(new MerchantOffer(buyA, buyB, sell, maxUses, 0, 1.0f));
+        });
+        sm.registerConsumer("shop.open", (sc, in) -> {
+            FakeMerchant npc = (FakeMerchant) in[0].get(sc);
+            ServerPlayerEntity p = (ServerPlayerEntity) in[1].get(sc);
+            String name = in[2].getString(sc);
+            npc.setCustomer(p);
+            npc.openMerchantContainer(p, new StringTextComponent(name), 1);
+        });
+    }
+}

+ 0 - 52
src/main/java/me/km/utils/ItemStackUtils.java

@@ -143,9 +143,6 @@ public class ItemStackUtils {
         return (com.getInt("HideFlags") & b) == b;
     }
 
-    // -----------------------------------------------------------------------------------
-    // Converter
-    // -----------------------------------------------------------------------------------
     public static String getNbtString(ItemStack stack) {
         return stack.write(new CompoundNBT()).toString();
     }
@@ -155,55 +152,6 @@ public class ItemStackUtils {
         return ItemStack.read(c);
     }
 
-    // -----------------------------------------------------------------------------------
-    // Misc
-    // -----------------------------------------------------------------------------------
-
-    /*public ITextComponent getDisplayName() {
-      CompoundNBT compoundnbt = this.getChildTag("display");
-      if (compoundnbt != null && compoundnbt.contains("Name", 8)) {
-         try {
-            ITextComponent itextcomponent = ITextComponent.Serializer.fromJson(compoundnbt.getString("Name"));
-            if (itextcomponent != null) {
-               return itextcomponent;
-            }
-
-            compoundnbt.remove("Name");
-         } catch (JsonParseException var3) {
-            compoundnbt.remove("Name");
-         }
-      }
-
-      return this.getItem().getDisplayName(this);
-   }
-
-   public ItemStack setDisplayName(@Nullable ITextComponent name) {
-      CompoundNBT compoundnbt = this.getOrCreateChildTag("display");
-      if (name != null) {
-         compoundnbt.putString("Name", ITextComponent.Serializer.toJson(name));
-      } else {
-         compoundnbt.remove("Name");
-      }
-
-      return this;
-   }
-   
-   if (compoundnbt.getTagId("Lore") == 9) {
-               ListNBT listnbt = compoundnbt.getList("Lore", 8);
-
-               for(int j = 0; j < listnbt.size(); ++j) {
-                  String s = listnbt.getString(j);
-
-                  try {
-                     ITextComponent itextcomponent1 = ITextComponent.Serializer.fromJson(s);
-                     if (itextcomponent1 != null) {
-                        list.add(TextComponentUtils.mergeStyles(itextcomponent1, (new Style()).setColor(TextFormatting.DARK_PURPLE).setItalic(true)));
-                     }
-                  } catch (JsonParseException var19) {
-                     compoundnbt.remove("Lore");
-                  }
-               }
-            }*/
     public static void setLore(ItemStack stack, List<Object> list) {
         CompoundNBT com = stack.getOrCreateChildTag("display");
         ListNBT nbtList = new ListNBT();