|
@@ -3,12 +3,14 @@ package me.km.snuviscript;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
+import java.util.Optional;
|
|
|
import java.util.function.Consumer;
|
|
|
import java.util.stream.Collectors;
|
|
|
import me.hammerle.snuviscript.code.Script;
|
|
|
import me.hammerle.snuviscript.code.SnuviUtils;
|
|
|
import me.hammerle.snuviscript.inputprovider.Variable;
|
|
|
import me.kcm.BlockHarvest;
|
|
|
+import me.kcm.Craft;
|
|
|
import me.km.utils.Utils;
|
|
|
import me.km.entities.EntityHuman;
|
|
|
import me.km.entities.EntityItemProjectile;
|
|
@@ -23,8 +25,13 @@ import net.minecraft.entity.Entity;
|
|
|
import net.minecraft.entity.LivingEntity;
|
|
|
import net.minecraft.entity.player.PlayerEntity;
|
|
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
|
|
+import net.minecraft.inventory.CraftResultInventory;
|
|
|
+import net.minecraft.inventory.CraftingInventory;
|
|
|
import net.minecraft.inventory.container.ClickType;
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
+import net.minecraft.item.crafting.ICraftingRecipe;
|
|
|
+import net.minecraft.item.crafting.IRecipeType;
|
|
|
+import net.minecraft.network.play.server.SSetSlotPacket;
|
|
|
import net.minecraft.server.MinecraftServer;
|
|
|
import net.minecraft.server.management.PlayerList;
|
|
|
import net.minecraft.tileentity.TileEntity;
|
|
@@ -32,6 +39,7 @@ import net.minecraft.util.math.*;
|
|
|
import net.minecraft.util.text.ITextComponent;
|
|
|
import net.minecraft.util.text.StringTextComponent;
|
|
|
import net.minecraft.world.GameRules;
|
|
|
+import net.minecraft.world.World;
|
|
|
import net.minecraft.world.server.ServerWorld;
|
|
|
import net.minecraft.world.storage.loot.LootContext;
|
|
|
import net.minecraft.world.storage.loot.LootParameters;
|
|
@@ -48,7 +56,7 @@ import net.minecraftforge.eventbus.api.*;
|
|
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
|
|
import net.minecraftforge.eventbus.api.Event.Result;
|
|
|
|
|
|
-public class ScriptEvents implements BlockHarvest {
|
|
|
+public class ScriptEvents implements BlockHarvest, Craft {
|
|
|
private static void setLivingEntity(Script sc, LivingEntity ent) {
|
|
|
sc.setVar("living_entity", ent);
|
|
|
}
|
|
@@ -550,7 +558,9 @@ public class ScriptEvents implements BlockHarvest {
|
|
|
}, (sc) -> {
|
|
|
handleVar(sc, "item_use_finish", "result", v -> {
|
|
|
ItemStack stack = (ItemStack) v.get(sc);
|
|
|
- if(stack != null) {
|
|
|
+ if(stack == null) {
|
|
|
+ e.setResultStack(ItemStack.EMPTY);
|
|
|
+ } else {
|
|
|
e.setResultStack(stack);
|
|
|
}
|
|
|
});
|
|
@@ -763,4 +773,35 @@ public class ScriptEvents implements BlockHarvest {
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onCraft(int id, World w, PlayerEntity p, CraftingInventory inv, CraftResultInventory result) {
|
|
|
+ if(w.isRemote) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ServerPlayerEntity serverplayerentity = (ServerPlayerEntity) p;
|
|
|
+ Wrapper<ItemStack> wrapper = new Wrapper(ItemStack.EMPTY);
|
|
|
+ Optional<ICraftingRecipe> optional = w.getServer().getRecipeManager().getRecipe(IRecipeType.CRAFTING, inv, w);
|
|
|
+ if(optional.isPresent()) {
|
|
|
+ ICraftingRecipe icraftingrecipe = optional.get();
|
|
|
+ if(result.canUseRecipe(w, serverplayerentity, icraftingrecipe)) {
|
|
|
+ wrapper.set(icraftingrecipe.getCraftingResult(inv));
|
|
|
+ scripts.getScriptManager().callEvent("craft", (sc) -> {
|
|
|
+ ScriptVars.setPlayerVars(sc, p);
|
|
|
+ sc.setVar("result", wrapper.get());
|
|
|
+ }, (sc) -> {
|
|
|
+ handleVar(sc, "craft", "result", (v) -> {
|
|
|
+ ItemStack stack = (ItemStack) v.get(sc);
|
|
|
+ if(stack == null) {
|
|
|
+ wrapper.set(ItemStack.EMPTY);
|
|
|
+ } else {
|
|
|
+ wrapper.set(stack);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ result.setInventorySlotContents(0, wrapper.get());
|
|
|
+ serverplayerentity.connection.sendPacket(new SSetSlotPacket(id, 0, wrapper.get()));
|
|
|
+ }
|
|
|
}
|