Skip to content

Commit

Permalink
recipe manager sync works now
Browse files Browse the repository at this point in the history
  • Loading branch information
sakura-ryoko committed Oct 5, 2024
1 parent 4222d7e commit db5ae14
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 35 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ mod_version = 0.24.999-snap

# Required malilib version
malilib_version = 0.20.999-snap
malilib_id = ce95f6ade2
malilib_id = 67cc3ca61a

# Minecraft, Fabric Loader and API and mappings versions
minecraft_version_out = 24w40a
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/fi/dy/masa/itemscroller/Reference.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package fi.dy.masa.itemscroller;

import net.minecraft.MinecraftVersion;

import fi.dy.masa.malilib.util.StringUtils;

public class Reference
{
public static final String MOD_ID = "itemscroller";
public static final String MOD_NAME = "Item Scroller";
public static final String MOD_VERSION = StringUtils.getModVersionString(MOD_ID);
public static final String MC_VERSION = MinecraftVersion.CURRENT.getName();
public static final String MOD_TYPE = "fabric";
public static final String MOD_STRING = MOD_ID + "-" + MOD_TYPE + "-" + MC_VERSION + "-" + MOD_VERSION;
}
101 changes: 81 additions & 20 deletions src/main/java/fi/dy/masa/itemscroller/data/DataManager.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,30 @@
package fi.dy.masa.itemscroller.data;

import fi.dy.masa.itemscroller.ItemScroller;
import fi.dy.masa.itemscroller.network.ServuxScrollerHandler;
import fi.dy.masa.itemscroller.network.ServuxScrollerPacket;
import fi.dy.masa.malilib.network.ClientPlayHandler;
import fi.dy.masa.malilib.network.IPluginClientPlayHandler;
import io.netty.buffer.Unpooled;
import java.util.ArrayList;
import java.util.Collection;
import javax.annotation.Nullable;

import com.mojang.datafixers.util.Pair;
import net.minecraft.client.MinecraftClient;
import net.minecraft.nbt.NbtByteArray;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
import net.minecraft.nbt.NbtList;
import net.minecraft.network.RegistryByteBuf;
import net.minecraft.nbt.NbtOps;
import net.minecraft.recipe.PreparedRecipes;
import net.minecraft.recipe.Recipe;
import net.minecraft.recipe.RecipeEntry;
import net.minecraft.recipe.RecipeManager;
import net.minecraft.registry.DynamicRegistryManager;
import net.minecraft.registry.RegistryKey;
import net.minecraft.util.Identifier;

import java.util.ArrayList;
import java.util.Collection;
import fi.dy.masa.malilib.network.ClientPlayHandler;
import fi.dy.masa.malilib.network.IPluginClientPlayHandler;
import fi.dy.masa.malilib.util.Constants;
import fi.dy.masa.itemscroller.ItemScroller;
import fi.dy.masa.itemscroller.Reference;
import fi.dy.masa.itemscroller.network.ServuxScrollerHandler;
import fi.dy.masa.itemscroller.network.ServuxScrollerPacket;

public class DataManager
{
Expand All @@ -32,14 +38,17 @@ public class DataManager
private String servuxVersion;
private DynamicRegistryManager registryManager;

private PreparedRecipes preparedRecipes = PreparedRecipes.EMPTY;
private PreparedRecipes preparedRecipes;
private int recipeCount;

public DataManager()
{
this.servuxServer = false;
this.hasInValidServux = false;
this.servuxVersion = "";
this.registryManager = DynamicRegistryManager.EMPTY;
this.preparedRecipes = PreparedRecipes.EMPTY;
this.recipeCount = 0;
}

public static DataManager getInstance() { return INSTANCE; }
Expand All @@ -64,8 +73,10 @@ public void reset(boolean isLogout)

this.servuxServer = false;
this.hasInValidServux = false;
this.servuxVersion = "";
this.registryManager = DynamicRegistryManager.EMPTY;
this.preparedRecipes = PreparedRecipes.EMPTY;
this.recipeCount = 0;
}
}

Expand Down Expand Up @@ -156,9 +167,33 @@ public boolean hasRecipes()
return !this.preparedRecipes.equals(PreparedRecipes.EMPTY);
}

public PreparedRecipes getPreparedRecipes()
public @Nullable PreparedRecipes getPreparedRecipes()
{
if (!mc.isIntegratedServerRunning())
{
return this.preparedRecipes;
}

return null;
}

public int getRecipeCount()
{
return this.preparedRecipes;
return this.recipeCount;
}

public @Nullable RecipeManager getRecipeManager()
{
if (mc.isIntegratedServerRunning() && mc.getServer() != null)
{
return mc.getServer().getRecipeManager();
}
else if (mc.world != null)
{
return mc.world.getRecipeManager();
}

return null;
}

public boolean receiveMetadata(NbtCompound data)
Expand All @@ -174,29 +209,54 @@ public boolean receiveMetadata(NbtCompound data)

this.setServuxVersion(data.getString("servux"));
this.setIsServuxServer();
this.requestRecipeManager();

return true;
}

return false;
}

public void requestRecipeManager()
{
if (!mc.isIntegratedServerRunning() && this.hasServuxServer())
{
NbtCompound nbt = new NbtCompound();
nbt.putString("version", Reference.MOD_STRING);

HANDLER.encodeClientData(ServuxScrollerPacket.RecipeManagerRequest(nbt));
}
}

public void receiveRecipeManager(NbtCompound data)
{
if (!mc.isIntegratedServerRunning() && data.contains("RecipeManager"))
{
Collection<RecipeEntry<?>> recipes = new ArrayList<>();
NbtList list = data.getList("RecipeManager", NbtElement.BYTE_ARRAY_TYPE);
ItemScroller.printDebug("DataManager#receiveRecipeManager(): from Servux");
NbtList list = data.getList("RecipeManager", Constants.NBT.TAG_COMPOUND);
int count = 0;

this.preparedRecipes = PreparedRecipes.EMPTY;
this.recipeCount = 0;

for (int i = 0; i < list.size(); i++)
{
NbtCompound item = list.getCompound(i);
Identifier idReg = Identifier.tryParse(item.getString("id_reg"));
Identifier idValue = Identifier.tryParse(item.getString("id_value"));

if (idReg == null || idValue == null)
{
continue;
}

try
{
NbtByteArray byteArray = (NbtByteArray) list.get(i);
RegistryByteBuf buf = new RegistryByteBuf(Unpooled.buffer(), this.getWorldRegistryManager());
buf.writeByteArray(byteArray.getByteArray());
RecipeEntry<?> entry = RecipeEntry.PACKET_CODEC.decode(buf);
RegistryKey<Recipe<?>> key = RegistryKey.of(RegistryKey.ofRegistry(idReg), idValue);
Pair<Recipe<?>, NbtElement> pair = Recipe.CODEC.decode(this.getWorldRegistryManager().getOps(NbtOps.INSTANCE), item.getCompound("recipe")).getOrThrow();
RecipeEntry<?> entry = new RecipeEntry<>(key, pair.getFirst());
recipes.add(entry);
count++;
}
catch (Exception e)
{
Expand All @@ -207,7 +267,8 @@ public void receiveRecipeManager(NbtCompound data)
if (!recipes.isEmpty())
{
this.preparedRecipes = PreparedRecipes.of(recipes);
ItemScroller.printDebug("DataManager#receiveRecipeManager(): finished loading Recipe Manager -> Prepared Recipes from Servux");
this.recipeCount = count;
ItemScroller.printDebug("DataManager#receiveRecipeManager(): finished loading Recipe Manager: Read [{}] Recipes from Servux", count);
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public <P extends IClientPayloadData> void decodeClientData(Identifier channel,
this.readingSessionKey = Random.create(Util.getMeasuringTimeMs()).nextLong();
}

ItemScroller.printDebug("ServuxHudHandler#decodeClientData(): received Entity Data Packet Slice of size {} (in bytes) // reading session key [{}]", packet.getTotalSize(), this.readingSessionKey);
ItemScroller.printDebug("ServuxScrollerHandler#decodeClientData(): received Recipe Data Packet Slice of size {} (in bytes) // reading session key [{}]", packet.getTotalSize(), this.readingSessionKey);
PacketByteBuf fullPacket = PacketSplitter.receive(this, this.readingSessionKey, packet.getBuffer());

if (fullPacket != null)
Expand All @@ -98,11 +98,11 @@ public <P extends IClientPayloadData> void decodeClientData(Identifier channel,
}
catch (Exception e)
{
ItemScroller.logger.error("ServuxHudHandler#decodeClientData(): Entity Data: error reading fullBuffer [{}]", e.getLocalizedMessage());
ItemScroller.logger.error("ServuxScrollerHandler#decodeClientData(): Recipe Data: error reading fullBuffer [{}]", e.getLocalizedMessage());
}
}
}
default -> ItemScroller.logger.warn("ServuxHudHandler#decodeClientData(): received unhandled packetType {} of size {} bytes.", packet.getPacketType(), packet.getTotalSize());
default -> ItemScroller.logger.warn("ServuxScrollerHandler#decodeClientData(): received unhandled packetType {} of size {} bytes.", packet.getPacketType(), packet.getTotalSize());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ public void toPacket(PacketByteBuf output)
}
catch (Exception e)
{
ItemScroller.logger.error("ServuxHudPacket#toPacket: error writing buffer data to packet: [{}]", e.getLocalizedMessage());
ItemScroller.logger.error("ServuxScrollerPacket#toPacket: error writing buffer data to packet: [{}]", e.getLocalizedMessage());
}
}
case PACKET_C2S_METADATA_REQUEST, PACKET_S2C_METADATA, PACKET_C2S_MASS_CRAFT_REQUEST, PACKET_S2C_MASS_CRAFT_RESPONSE, PACKET_C2S_RECIPE_MANAGER_REQUEST ->
Expand All @@ -182,10 +182,10 @@ public void toPacket(PacketByteBuf output)
}
catch (Exception e)
{
ItemScroller.logger.error("ServuxHudPacket#toPacket: error writing NBT to packet: [{}]", e.getLocalizedMessage());
ItemScroller.logger.error("ServuxScrollerPacket#toPacket: error writing NBT to packet: [{}]", e.getLocalizedMessage());
}
}
default -> ItemScroller.logger.error("ServuxHudPacket#toPacket: Unknown packet type!");
default -> ItemScroller.logger.error("ServuxScrollerPacket#toPacket: Unknown packet type!");
}
}

Expand All @@ -198,7 +198,7 @@ public static ServuxScrollerPacket fromPacket(PacketByteBuf input)
if (type == null)
{
// Invalid Type
ItemScroller.logger.warn("ServuxHudPacket#fromPacket: invalid packet type received");
ItemScroller.logger.warn("ServuxScrollerPacket#fromPacket: invalid packet type received");
return null;
}
switch (type)
Expand All @@ -212,7 +212,7 @@ public static ServuxScrollerPacket fromPacket(PacketByteBuf input)
}
catch (Exception e)
{
ItemScroller.logger.error("ServuxHudPacket#fromPacket: error reading S2C Bulk Response Buffer from packet: [{}]", e.getLocalizedMessage());
ItemScroller.logger.error("ServuxScrollerPacket#fromPacket: error reading S2C Bulk Response Buffer from packet: [{}]", e.getLocalizedMessage());
}
}
case PACKET_C2S_METADATA_REQUEST ->
Expand All @@ -224,7 +224,7 @@ public static ServuxScrollerPacket fromPacket(PacketByteBuf input)
}
catch (Exception e)
{
ItemScroller.logger.error("ServuxHudPacket#fromPacket: error reading Metadata Request from packet: [{}]", e.getLocalizedMessage());
ItemScroller.logger.error("ServuxScrollerPacket#fromPacket: error reading Metadata Request from packet: [{}]", e.getLocalizedMessage());
}
}
case PACKET_S2C_METADATA ->
Expand All @@ -236,7 +236,7 @@ public static ServuxScrollerPacket fromPacket(PacketByteBuf input)
}
catch (Exception e)
{
ItemScroller.logger.error("ServuxHudPacket#fromPacket: error reading Metadata Response from packet: [{}]", e.getLocalizedMessage());
ItemScroller.logger.error("ServuxScrollerPacket#fromPacket: error reading Metadata Response from packet: [{}]", e.getLocalizedMessage());
}
}
case PACKET_C2S_MASS_CRAFT_REQUEST ->
Expand All @@ -248,7 +248,7 @@ public static ServuxScrollerPacket fromPacket(PacketByteBuf input)
}
catch (Exception e)
{
ItemScroller.logger.error("ServuxHudPacket#fromPacket: error reading Mass Craft Request from packet: [{}]", e.getLocalizedMessage());
ItemScroller.logger.error("ServuxScrollerPacket#fromPacket: error reading Mass Craft Request from packet: [{}]", e.getLocalizedMessage());
}
}
case PACKET_S2C_MASS_CRAFT_RESPONSE ->
Expand All @@ -260,7 +260,7 @@ public static ServuxScrollerPacket fromPacket(PacketByteBuf input)
}
catch (Exception e)
{
ItemScroller.logger.error("ServuxHudPacket#fromPacket: error reading Mass Craft Response from packet: [{}]", e.getLocalizedMessage());
ItemScroller.logger.error("ServuxScrollerPacket#fromPacket: error reading Mass Craft Response from packet: [{}]", e.getLocalizedMessage());
}
}
case PACKET_C2S_RECIPE_MANAGER_REQUEST ->
Expand All @@ -272,10 +272,10 @@ public static ServuxScrollerPacket fromPacket(PacketByteBuf input)
}
catch (Exception e)
{
ItemScroller.logger.error("ServuxHudPacket#fromPacket: error reading Recipe Request from packet: [{}]", e.getLocalizedMessage());
ItemScroller.logger.error("ServuxScrollerPacket#fromPacket: error reading Recipe Request from packet: [{}]", e.getLocalizedMessage());
}
}
default -> ItemScroller.logger.error("ServuxHudPacket#fromPacket: Unknown packet type!");
default -> ItemScroller.logger.error("ServuxScrollerPacket#fromPacket: Unknown packet type!");
}

return null;
Expand Down

0 comments on commit db5ae14

Please sign in to comment.