Skip to content

Commit

Permalink
Merge pull request #53 from Mari023/remove-nbtcrafting
Browse files Browse the repository at this point in the history
Remove nbtcrafting and provide an alternative way to make a Wireless Universal Terminal
  • Loading branch information
Mari023 authored May 20, 2021
2 parents bf554dd + 5be60c2 commit 7d280cb
Show file tree
Hide file tree
Showing 29 changed files with 374 additions and 187 deletions.
1 change: 0 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ dependencies {
modImplementation "appeng:appliedenergistics2-fabric:${project.ae2_version}"
//modImplementation "top.theillusivec4.curios:curios-fabric:${project.curios_version}"
modImplementation "me.shedaniel:RoughlyEnoughItems:${project.rei_version}"
modImplementation "de.siphalor:nbtcrafting-1.16:${project.nbt_crafting_version}"
modImplementation "curse.maven:minemenufabric-478687:${project.minemenufabric_version}"
modImplementation "com.terraformersmc:modmenu:1.16.7"//dependency for minemenu
modApi("me.shedaniel.cloth:cloth-config-fabric:4.11.14")//dependency for minemenu
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/de/mari_023/fabric/ae2wtlib/ae2wtlib.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import de.mari_023.fabric.ae2wtlib.wpt.WPTContainer;
import de.mari_023.fabric.ae2wtlib.wut.ItemWUT;
import de.mari_023.fabric.ae2wtlib.wut.WUTHandler;
import de.mari_023.fabric.ae2wtlib.wut.recipe.CombineRecipeSerializer;
import de.mari_023.fabric.ae2wtlib.wut.recipe.UpgradeRecipeSerializer;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
Expand Down Expand Up @@ -84,6 +86,9 @@ public void onInitialize() {
Api.instance().registries().charger().addChargeRate(INTERFACE_TERMINAL, Config.getChargeRate());
Api.instance().registries().charger().addChargeRate(UNIVERSAL_TERMINAL, Config.getChargeRate() * Config.WUTChargeRateMultiplier());

Registry.register(Registry.RECIPE_SERIALIZER, CombineRecipeSerializer.ID, CombineRecipeSerializer.INSTANCE);
Registry.register(Registry.RECIPE_SERIALIZER, UpgradeRecipeSerializer.ID, UpgradeRecipeSerializer.INSTANCE);

ServerPlayNetworking.registerGlobalReceiver(new Identifier("ae2wtlib", "general"), (server, player, handler, buf, sender) -> {
buf.retain();
server.execute(() -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public static void open(final PlayerEntity player, final ContainerLocator locato
}

private static final HashMap<String, containerOpener> wirelessTerminals = new HashMap<>();
private static final List<String> terminalNames = new ArrayList<>();
public static final List<String> terminalNames = new ArrayList<>();

public static void addTerminal(String Name, containerOpener open) {
if(terminalNames.contains(Name)) return;
Expand Down
89 changes: 89 additions & 0 deletions src/main/java/de/mari_023/fabric/ae2wtlib/wut/recipe/Combine.java
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;
}
}
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;
}
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);
}
}
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 src/main/java/de/mari_023/fabric/ae2wtlib/wut/recipe/Upgrade.java
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;
}
}
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;
}
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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"ae2wtlib:wireless_universal_terminal_ci"
"ae2wtlib:ci"
]
},
"criteria": {
Expand All @@ -29,7 +29,7 @@
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "ae2wtlib:wireless_universal_terminal_ci"
"recipe": "ae2wtlib:ci"
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"ae2wtlib:wireless_universal_terminal_cp"
"ae2wtlib:cp"
]
},
"criteria": {
Expand All @@ -29,7 +29,7 @@
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "ae2wtlib:wireless_universal_terminal_cp"
"recipe": "ae2wtlib:cp"
}
}
},
Expand Down
Loading

0 comments on commit 7d280cb

Please sign in to comment.