-
Notifications
You must be signed in to change notification settings - Fork 26
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #53 from Mari023/remove-nbtcrafting
Remove nbtcrafting and provide an alternative way to make a Wireless Universal Terminal
- Loading branch information
Showing
29 changed files
with
374 additions
and
187 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
src/main/java/de/mari_023/fabric/ae2wtlib/wut/recipe/Combine.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
package de.mari_023.fabric.ae2wtlib.wut.recipe; | ||
|
||
import de.mari_023.fabric.ae2wtlib.ae2wtlib; | ||
import net.fabricmc.api.EnvType; | ||
import net.fabricmc.api.Environment; | ||
import net.minecraft.inventory.CraftingInventory; | ||
import net.minecraft.item.ItemStack; | ||
import net.minecraft.nbt.CompoundTag; | ||
import net.minecraft.recipe.*; | ||
import net.minecraft.util.Identifier; | ||
import net.minecraft.world.World; | ||
|
||
public class Combine implements CraftingRecipe { | ||
private final Ingredient TerminalA; | ||
private final Ingredient TerminalB; | ||
private final String TerminalAName; | ||
private final String TerminalBName; | ||
private final ItemStack outputStack; | ||
private final Identifier id; | ||
|
||
public Combine(Ingredient TerminalA, Ingredient TerminalB, String TerminalAName, String TerminalBName, Identifier id) { | ||
this.TerminalA = TerminalA; | ||
this.TerminalB = TerminalB; | ||
this.TerminalAName = TerminalAName; | ||
this.TerminalBName = TerminalBName; | ||
this.outputStack = new ItemStack(ae2wtlib.UNIVERSAL_TERMINAL); | ||
if(!outputStack.hasTag()) outputStack.setTag(new CompoundTag()); | ||
outputStack.getTag().putBoolean(TerminalAName, true); | ||
outputStack.getTag().putBoolean(TerminalBName, true); | ||
this.id = id; | ||
} | ||
|
||
public Ingredient getTerminalA() { | ||
return TerminalA; | ||
} | ||
|
||
public Ingredient getTerminalB() { | ||
return TerminalB; | ||
} | ||
|
||
public String getTerminalAName() { | ||
return TerminalAName; | ||
} | ||
|
||
public String getTerminalBName() { | ||
return TerminalBName; | ||
} | ||
|
||
@Override | ||
public boolean matches(CraftingInventory inv, World world) { | ||
return !InputHelper.getInputStack(inv, TerminalA).isEmpty() && !InputHelper.getInputStack(inv, TerminalB).isEmpty() && InputHelper.getInputCount(inv) == 2; | ||
} | ||
|
||
@Override | ||
public ItemStack craft(CraftingInventory inv) { | ||
CompoundTag terminalA = InputHelper.getInputStack(inv, TerminalA).getTag(); | ||
if(terminalA == null) terminalA = new CompoundTag(); | ||
else terminalA = terminalA.copy(); | ||
|
||
CompoundTag terminalB = InputHelper.getInputStack(inv, TerminalB).getTag(); | ||
if(terminalB == null) terminalB = new CompoundTag(); | ||
else terminalB = terminalB.copy(); | ||
|
||
ItemStack wut = outputStack.copy(); | ||
wut.getTag().copyFrom(terminalB).copyFrom(terminalA); | ||
return wut; | ||
} | ||
|
||
@Environment(EnvType.CLIENT) | ||
@Override | ||
public boolean fits(int width, int height) { | ||
return width > 1 || height > 1; | ||
} | ||
|
||
@Override | ||
public ItemStack getOutput() { | ||
return outputStack; | ||
} | ||
|
||
@Override | ||
public Identifier getId() { | ||
return id; | ||
} | ||
|
||
@Override | ||
public RecipeSerializer<?> getSerializer() { | ||
return CombineRecipeSerializer.INSTANCE; | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/java/de/mari_023/fabric/ae2wtlib/wut/recipe/CombineJsonFormat.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package de.mari_023.fabric.ae2wtlib.wut.recipe; | ||
|
||
import com.google.gson.JsonObject; | ||
|
||
public class CombineJsonFormat { | ||
JsonObject TerminalA; | ||
JsonObject TerminalB; | ||
String TerminalAName; | ||
String TerminalBName; | ||
} |
52 changes: 52 additions & 0 deletions
52
src/main/java/de/mari_023/fabric/ae2wtlib/wut/recipe/CombineRecipeSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package de.mari_023.fabric.ae2wtlib.wut.recipe; | ||
|
||
import com.google.gson.Gson; | ||
import com.google.gson.JsonObject; | ||
import com.google.gson.JsonSyntaxException; | ||
import de.mari_023.fabric.ae2wtlib.wut.WUTHandler; | ||
import net.minecraft.network.PacketByteBuf; | ||
import net.minecraft.recipe.Ingredient; | ||
import net.minecraft.recipe.RecipeSerializer; | ||
import net.minecraft.util.Identifier; | ||
|
||
public class CombineRecipeSerializer implements RecipeSerializer<Combine> { | ||
private CombineRecipeSerializer() { } | ||
|
||
public static final CombineRecipeSerializer INSTANCE = new CombineRecipeSerializer(); | ||
|
||
public static final Identifier ID = new Identifier("ae2wtlib", "combine"); | ||
|
||
@Override | ||
public Combine read(Identifier id, JsonObject json) { | ||
CombineJsonFormat recipeJson = new Gson().fromJson(json, CombineJsonFormat.class); | ||
if(recipeJson.TerminalA == null || recipeJson.TerminalB == null || validateOutput(recipeJson.TerminalAName) || validateOutput(recipeJson.TerminalBName)) | ||
throw new JsonSyntaxException("A required attribute is missing or invalid!"); | ||
|
||
Ingredient TerminalA = Ingredient.fromJson(recipeJson.TerminalA); | ||
Ingredient TerminalB = Ingredient.fromJson(recipeJson.TerminalB); | ||
|
||
return new Combine(TerminalA, TerminalB, recipeJson.TerminalAName, recipeJson.TerminalBName, id); | ||
} | ||
|
||
@Override | ||
public void write(PacketByteBuf packetData, Combine recipe) { | ||
recipe.getTerminalA().write(packetData); | ||
recipe.getTerminalB().write(packetData); | ||
packetData.writeString(recipe.getTerminalAName()); | ||
packetData.writeString(recipe.getTerminalBName()); | ||
} | ||
|
||
@Override | ||
public Combine read(Identifier id, PacketByteBuf packetData) { | ||
Ingredient TerminalA = Ingredient.fromPacket(packetData); | ||
Ingredient TerminalB = Ingredient.fromPacket(packetData); | ||
String TerminalAName = packetData.readString(32767); | ||
String TerminalBName = packetData.readString(32767); | ||
return new Combine(TerminalA, TerminalB, TerminalAName, TerminalBName, id); | ||
} | ||
|
||
private boolean validateOutput(String s) { | ||
if(s == null) return true; | ||
return !WUTHandler.terminalNames.contains(s); | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
src/main/java/de/mari_023/fabric/ae2wtlib/wut/recipe/InputHelper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package de.mari_023.fabric.ae2wtlib.wut.recipe; | ||
|
||
import net.minecraft.inventory.CraftingInventory; | ||
import net.minecraft.item.ItemStack; | ||
import net.minecraft.recipe.Ingredient; | ||
|
||
public class InputHelper { | ||
|
||
public static ItemStack getInputStack(CraftingInventory inventory, Ingredient ingredient) { | ||
for(int i = 0; i < inventory.size(); i++) | ||
if(ingredient.test(inventory.getStack(i))) return inventory.getStack(i); | ||
return ItemStack.EMPTY; | ||
} | ||
|
||
public static int getInputCount(CraftingInventory inventory) { | ||
int count = 0; | ||
for(int i = 0; i < inventory.size(); i++) if(!inventory.getStack(i).isEmpty()) count++; | ||
return count; | ||
} | ||
} |
75 changes: 75 additions & 0 deletions
75
src/main/java/de/mari_023/fabric/ae2wtlib/wut/recipe/Upgrade.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package de.mari_023.fabric.ae2wtlib.wut.recipe; | ||
|
||
import de.mari_023.fabric.ae2wtlib.ae2wtlib; | ||
import de.mari_023.fabric.ae2wtlib.wut.WUTHandler; | ||
import net.fabricmc.api.EnvType; | ||
import net.fabricmc.api.Environment; | ||
import net.minecraft.inventory.CraftingInventory; | ||
import net.minecraft.item.ItemStack; | ||
import net.minecraft.nbt.CompoundTag; | ||
import net.minecraft.recipe.*; | ||
import net.minecraft.util.Identifier; | ||
import net.minecraft.world.World; | ||
|
||
public class Upgrade implements CraftingRecipe { | ||
private final Ingredient Terminal; | ||
private final String TerminalName; | ||
private final ItemStack outputStack; | ||
private final Identifier id; | ||
|
||
public Upgrade(Ingredient Terminal, String TerminalName, Identifier id) { | ||
this.Terminal = Terminal; | ||
this.TerminalName = TerminalName; | ||
this.outputStack = new ItemStack(ae2wtlib.UNIVERSAL_TERMINAL); | ||
if(!outputStack.hasTag()) outputStack.setTag(new CompoundTag()); | ||
outputStack.getTag().putBoolean(TerminalName, true); | ||
this.id = id; | ||
} | ||
|
||
public Ingredient getTerminal() { | ||
return Terminal; | ||
} | ||
|
||
public String getTerminalName() { | ||
return TerminalName; | ||
} | ||
|
||
@Override | ||
public boolean matches(CraftingInventory inv, World world) { | ||
ItemStack wut = InputHelper.getInputStack(inv, Ingredient.ofItems(ae2wtlib.UNIVERSAL_TERMINAL)); | ||
return !InputHelper.getInputStack(inv, Terminal).isEmpty() && !wut.isEmpty() | ||
&& InputHelper.getInputCount(inv) == 2 && !WUTHandler.hasTerminal(wut, TerminalName); | ||
} | ||
|
||
@Override | ||
public ItemStack craft(CraftingInventory inv) { | ||
ItemStack wut = InputHelper.getInputStack(inv, Ingredient.ofItems(ae2wtlib.UNIVERSAL_TERMINAL)).copy(); | ||
CompoundTag terminal = InputHelper.getInputStack(inv, Terminal).getTag().copy(); | ||
wut.getTag().putBoolean(TerminalName, true); | ||
terminal.copyFrom(wut.getTag()); | ||
wut.setTag(terminal); | ||
|
||
return wut; | ||
} | ||
|
||
@Environment(EnvType.CLIENT) | ||
@Override | ||
public boolean fits(int width, int height) { | ||
return width > 1 || height > 1; | ||
} | ||
|
||
@Override | ||
public ItemStack getOutput() { | ||
return outputStack; | ||
} | ||
|
||
@Override | ||
public Identifier getId() { | ||
return id; | ||
} | ||
|
||
@Override | ||
public RecipeSerializer<?> getSerializer() { | ||
return UpgradeRecipeSerializer.INSTANCE; | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
src/main/java/de/mari_023/fabric/ae2wtlib/wut/recipe/UpgradeJsonFormat.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package de.mari_023.fabric.ae2wtlib.wut.recipe; | ||
|
||
import com.google.gson.JsonObject; | ||
|
||
public class UpgradeJsonFormat { | ||
JsonObject Terminal; | ||
String TerminalName; | ||
} |
47 changes: 47 additions & 0 deletions
47
src/main/java/de/mari_023/fabric/ae2wtlib/wut/recipe/UpgradeRecipeSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package de.mari_023.fabric.ae2wtlib.wut.recipe; | ||
|
||
import com.google.gson.Gson; | ||
import com.google.gson.JsonObject; | ||
import com.google.gson.JsonSyntaxException; | ||
import de.mari_023.fabric.ae2wtlib.wut.WUTHandler; | ||
import net.minecraft.network.PacketByteBuf; | ||
import net.minecraft.recipe.Ingredient; | ||
import net.minecraft.recipe.RecipeSerializer; | ||
import net.minecraft.util.Identifier; | ||
|
||
public class UpgradeRecipeSerializer implements RecipeSerializer<Upgrade> { | ||
private UpgradeRecipeSerializer() { } | ||
|
||
public static final UpgradeRecipeSerializer INSTANCE = new UpgradeRecipeSerializer(); | ||
|
||
public static final Identifier ID = new Identifier("ae2wtlib", "upgrade"); | ||
|
||
@Override | ||
public Upgrade read(Identifier id, JsonObject json) { | ||
UpgradeJsonFormat recipeJson = new Gson().fromJson(json, UpgradeJsonFormat.class); | ||
if(recipeJson.Terminal == null || validateOutput(recipeJson.TerminalName)) | ||
throw new JsonSyntaxException("A required attribute is missing or invalid!"); | ||
|
||
Ingredient Terminal = Ingredient.fromJson(recipeJson.Terminal); | ||
|
||
return new Upgrade(Terminal, recipeJson.TerminalName, id); | ||
} | ||
|
||
@Override | ||
public void write(PacketByteBuf packetData, Upgrade recipe) { | ||
recipe.getTerminal().write(packetData); | ||
packetData.writeString(recipe.getTerminalName()); | ||
} | ||
|
||
@Override | ||
public Upgrade read(Identifier id, PacketByteBuf packetData) { | ||
Ingredient TerminalA = Ingredient.fromPacket(packetData); | ||
String TerminalAName = packetData.readString(32767); | ||
return new Upgrade(TerminalA, TerminalAName, id); | ||
} | ||
|
||
private boolean validateOutput(String s) { | ||
if(s == null) return true; | ||
return !WUTHandler.terminalNames.contains(s); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.