Jump to content

Recommended Posts

Posted

Hello, Im working on a mod called OrangeSunshine, I have run into an issue where the Mr.CrayFish mod trys to cast my "PlayerDrugs" class to its "SyncedPlayerData" class. I'm unsure if this is somthing I can fix, or somthing they will have to.

Below is my stacktrace and both of the classes that cause the issue.

 

also these are the sources of both of our mods.

 

https://github.com/MrCrayfish/Obfuscate

https://github.com/Moriz82/OrangeSunshine

 

Here is the stack trace:

[13Jan2022 16:58:42.645] [Server thread/ERROR] [net.minecraftforge.eventbus.EventBus/EVENTBUS]: Exception caught during firing event: com.BrotherHoodOfDiethylamide.OrangeSunshine.capabilities.PlayerDrugs$Implementation cannot be cast to com.mrcrayfish.obfuscate.common.data.SyncedPlayerData$DataHolder
	Index: 3
	Listeners:
		0: HIGHEST
		1: ASM: net.minecraftforge.common.ForgeInternalHandler@2af1cde2 onEntityJoinWorld(Lnet/minecraftforge/event/entity/EntityJoinWorldEvent;)V
		2: NORMAL
		3: ASM: com.mrcrayfish.obfuscate.common.data.SyncedPlayerData@1649d454 onPlayerJoinWorld(Lnet/minecraftforge/event/entity/EntityJoinWorldEvent;)V
java.lang.ClassCastException: com.BrotherHoodOfDiethylamide.OrangeSunshine.capabilities.PlayerDrugs$Implementation cannot be cast to com.mrcrayfish.obfuscate.common.data.SyncedPlayerData$DataHolder
	at com.mrcrayfish.obfuscate.common.data.SyncedPlayerData.getDataHolder(SyncedPlayerData.java:174)
	at com.mrcrayfish.obfuscate.common.data.SyncedPlayerData.onPlayerJoinWorld(SyncedPlayerData.java:212)
	at net.minecraftforge.eventbus.ASMEventHandler_27_SyncedPlayerData_onPlayerJoinWorld_EntityJoinWorldEvent.invoke(.dynamic)
	at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85)
	at net.minecraftforge.eventbus.EventBus$$Lambda$2554/57696956.invoke(Unknown Source)
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302)
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283)
	at net.minecraft.world.server.ServerWorld.func_217448_f(ServerWorld.java:788)
	at net.minecraft.world.server.ServerWorld.func_217435_c(ServerWorld.java:780)
	at net.minecraft.server.management.PlayerList.func_72355_a(PlayerList.java:185)
	at net.minecraft.network.login.ServerLoginNetHandler.func_147326_c(ServerLoginNetHandler.java:118)
	at net.minecraft.network.login.ServerLoginNetHandler.func_73660_a(ServerLoginNetHandler.java:65)
	at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:222)
	at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:134)
	at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:865)
	at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:787)
	at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:78)
	at net.minecraft.server.MinecraftServer.func_240802_v_(MinecraftServer.java:642)
	at net.minecraft.server.MinecraftServer.func_240783_a_(MinecraftServer.java:232)
	at net.minecraft.server.MinecraftServer$$Lambda$5300/334348732.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:745)

 

Here is my PlayerDrugs class :

 

package com.BrotherHoodOfDiethylamide.OrangeSunshine.capabilities;

import com.BrotherHoodOfDiethylamide.OrangeSunshine.OrangeSunshine;
import com.BrotherHoodOfDiethylamide.OrangeSunshine.drugs.Drug;
import com.BrotherHoodOfDiethylamide.OrangeSunshine.drugs.DrugEffects;
import com.BrotherHoodOfDiethylamide.OrangeSunshine.drugs.DrugInstance;
import com.BrotherHoodOfDiethylamide.OrangeSunshine.network.ActiveDrugCapSync;
import com.BrotherHoodOfDiethylamide.OrangeSunshine.network.DrugCapSync;
import com.BrotherHoodOfDiethylamide.OrangeSunshine.network.PacketHandler;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.INBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.LogicalSidedProvider;
import net.minecraftforge.fml.network.PacketDistributor;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.*;

public class PlayerDrugs {
    static class Implementation implements IPlayerDrugs {
        private final Map<Drug, Float> active = new HashMap<>();
        private final List<DrugInstance> sources = new ArrayList<>();
        private final Map<Drug, Integer> abuseTimers = new HashMap<>();
        private final DrugEffects drugEffects = new DrugEffects();
        private int smokeTick = 0;

        @Override
        public void addDrugSource(DrugInstance drug) {
            sources.add(drug);
        }

        @Override
        public void setSources(List<DrugInstance> drugInstances) {
            sources.clear();
            sources.addAll(drugInstances);
        }

        @Override
        public void removeDrugSource(DrugInstance drug) {
            sources.remove(drug);
        }

        @Override
        public void clearDrugSources() {
            sources.clear();
        }

        @Override
        public List<DrugInstance> getDrugSources() {
            return sources;
        }

        @Override
        public void putActive(Drug drug, float effect) {
            if (effect > 0) {
                active.put(drug, effect);
            } else {
                active.remove(drug);
            }
        }

        @Nullable
        @Override
        public Float getActive(Drug drug) {
            return active.get(drug);
        }

        @Override
        public void clearActives() {
            active.clear();
        }

        @Override
        public void setActives(Map<Drug, Float> activeDrugs) {
            active.clear();
            active.putAll(activeDrugs);
        }

        @Override
        public Map<Drug, Float> getActiveDrugs() {
            return active;
        }

        @Override
        public void addDrugAbuse(Drug drug, int ticks) {
            abuseTimers.put(drug, abuseTimers.getOrDefault(drug, 0) + ticks);
        }

        @Override
        public int getDrugAbuse(Drug drug) {
            return abuseTimers.getOrDefault(drug, 0);
        }

        @Override
        public void tickDrugAbuse() {
            abuseTimers.replaceAll((drug, tick) -> tick - 1);
            abuseTimers.values().removeIf(tick -> tick <= 0);
        }

        @Override
        public void setDrugAbuseMap(Map<Drug, Integer> drugAbuseMap) {
            abuseTimers.clear();
            abuseTimers.putAll(drugAbuseMap);
        }

        @Override
        public Map<Drug, Integer> getDrugAbuseMap() {
            return abuseTimers;
        }

        @Override
        public DrugEffects getDrugEffects() {
            return drugEffects;
        }

        @Override
        public void setSmokeTicks(int ticks) {
            smokeTick = ticks;
        }

        @Override
        public int getSmokeTicks() {
            return smokeTick;
        }
    }

    static class Provider implements ICapabilitySerializable<CompoundNBT> {
        private final Implementation defaultImplementation = new Implementation();
        private final LazyOptional<IPlayerDrugs> optional = LazyOptional.of(() -> defaultImplementation);

        @Nonnull
        @Override
        public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
            return optional.cast();
        }

        @Override
        public CompoundNBT serializeNBT() {
            return (CompoundNBT) PlayerProperties.PLAYER_DRUGS.writeNBT(defaultImplementation, null);
        }

        @Override
        public void deserializeNBT(CompoundNBT nbt) {
            PlayerProperties.PLAYER_DRUGS.readNBT(defaultImplementation, null, nbt);
        }

        public void invalidate() {
            optional.invalidate();
        }
    }

    static class Storage implements Capability.IStorage<IPlayerDrugs>{
        @Nullable
        @Override
        public INBT writeNBT(Capability<IPlayerDrugs> capability, IPlayerDrugs instance, Direction side) {
            CompoundNBT nbt = new CompoundNBT();

            ListNBT drugSources = new ListNBT();
            for (DrugInstance drugInstance : instance.getDrugSources()) {
                CompoundNBT drugProperties = new CompoundNBT();
                drugProperties.putString("id", drugInstance.toName());
                drugProperties.putInt("delay", drugInstance.getDelayTime());
                drugProperties.putFloat("potency", drugInstance.getPotency());
                drugProperties.putInt("duration", drugInstance.getDuration());
                drugProperties.putInt("timeActive", drugInstance.getTimeActive());
                drugSources.add(drugProperties);
            }
            nbt.put("sources", drugSources);

            CompoundNBT drugAbuse = new CompoundNBT();
            instance.getDrugAbuseMap().forEach((drug, tick) -> {
                if (tick > 0)
                    drugAbuse.putInt(Drug.toName(drug), tick);
            });
            nbt.put("abuse", drugAbuse);

            return nbt;
        }

        @Override
        public void readNBT(Capability<IPlayerDrugs> capability, IPlayerDrugs instance, Direction side, INBT nbtIn) {
            if (nbtIn != null) {
                CompoundNBT nbt = (CompoundNBT) nbtIn;

                ListNBT drugSources = nbt.getList("sources", 10);
                for (INBT drugSource : drugSources) {
                    CompoundNBT drugProperties = (CompoundNBT) drugSource;
                    Drug drug = Drug.byName(drugProperties.getString("id"));
                    if (drug == null) {
                        OrangeSunshine.LOGGER.warn("Tried to read non-existent registry {} from sources, ignoring", drugProperties.getString("id"));
                        continue;
                    }
                    DrugInstance drugInstance = new DrugInstance(drug, drugProperties.getInt("delay"), drugProperties.getFloat("potency"), drugProperties.getInt("duration"), drugProperties.getInt("timeActive"));
                    instance.addDrugSource(drugInstance);
                }

                CompoundNBT drugAbuse = nbt.getCompound("abuse");
                for (String drugKey : drugAbuse.getAllKeys()) {
                    Drug drug = Drug.byName(drugKey);
                    if (drug == null) {
                        OrangeSunshine.LOGGER.warn("Tried to read non-existent registry {} from abuse map, ignoring", drugKey);
                        continue;
                    }
                    instance.addDrugAbuse(drug, drugAbuse.getInt(drugKey));
                }
            }
        }
    }

    static void register() {
        CapabilityManager.INSTANCE.register(IPlayerDrugs.class, new PlayerDrugs.Storage(), PlayerDrugs.Implementation::new);

        MinecraftForge.EVENT_BUS.addGenericListener(Entity.class, PlayerDrugs::attachCapabilitiesEntity);
        MinecraftForge.EVENT_BUS.addListener(PlayerDrugs::onPlayerLoggedIn);
        MinecraftForge.EVENT_BUS.addListener(PlayerDrugs::onPlayerChangedDimension);
        MinecraftForge.EVENT_BUS.addListener(PlayerDrugs::onServerTick);
    }

    static void attachCapabilitiesEntity(AttachCapabilitiesEvent<Entity> event) {
        if (event.getObject() instanceof PlayerEntity) {
            PlayerDrugs.Provider provider = new PlayerDrugs.Provider();
            event.addCapability(new ResourceLocation(OrangeSunshine.MOD_ID, "drugs"), provider);
            event.addListener(provider::invalidate);
        }
    }

    static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
        sync((ServerPlayerEntity) event.getPlayer());
        syncActives((ServerPlayerEntity) event.getPlayer());
    }

    static void onPlayerChangedDimension(PlayerEvent.PlayerChangedDimensionEvent event) {
        sync((ServerPlayerEntity) event.getPlayer());
        syncActives((ServerPlayerEntity) event.getPlayer());
    }

    private static int totalTicks = 1;
    static void onServerTick(TickEvent.ServerTickEvent event) {
        if (event.phase == TickEvent.Phase.START) {
            if (totalTicks++ % (5*20) == 0) {
                MinecraftServer server = LogicalSidedProvider.INSTANCE.get(LogicalSide.SERVER);
                for (ServerPlayerEntity player : server.getPlayerList().getPlayers()) {
                    sync(player);
                }
            }
        }
    }

    public static void sync(ServerPlayerEntity player) {
        List<DrugInstance> drugInstances = Drug.getDrugSources(player);
        PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new DrugCapSync(drugInstances));
    }

    private static void syncActives(ServerPlayerEntity player) {
        Map<Drug, Float> actives = Drug.getActiveDrugs(player);
        PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new ActiveDrugCapSync(actives));
    }
}

 

Here is Mr.CrayFish's SyncedPlayerData class:

 

package com.mrcrayfish.obfuscate.common.data;

import com.google.common.collect.ImmutableList;
import com.mrcrayfish.obfuscate.Reference;
import com.mrcrayfish.obfuscate.network.HandshakeMessages;
import com.mrcrayfish.obfuscate.network.PacketHandler;
import com.mrcrayfish.obfuscate.network.message.MessageSyncPlayerData;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fmllegacy.network.PacketDistributor;
import org.apache.commons.lang3.Validate;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>Basically a clone of DataParameter system. It's not good to init custom data parameters to
 * other entities that aren't your own. It can cause mismatched ids and crash the game. This synced
 * data system attempts to solve the problem (at least for player entities) and allows data to be
 * easily synced to clients. The data can only be controlled on the logical server. Changing the
 * data on the logical client will have no affect on the server.</p>
 * <p></p>
 * <p>To use this system you first need to create a synced data key instance. This should be a public
 * static final field. You will need to specify an key id (based on your modid), the serializer, and
 * a default value supplier.</p>
 * <code>public static final SyncedDataKey&lt;Double&gt; CURRENT_SPEED = SyncedDataKey.create(new ResourceLocation("examplemod:speed"), Serializers.DOUBLE, () -> 0.0);</code>
 * <p></p>
 * <p>Next the key needs to be registered. This can simply be done in the common setup of your mod.</p>
 * <code>SyncedPlayerData.instance().registerKey(CURRENT_SPEED);</code>
 * <p></p>
 * <p>Then anywhere you want (as long as it's on the main thread), you can set the value by calling</p>
 * <code>SyncedPlayerData.instance().set(player, CURRENT_SPEED, 5.0);</code>
 * <p></p>
 * <p>The value can be retrieved on the server or client by calling</p>
 * <code>SyncedPlayerData.instance().get(player, CURRENT_SPEED);</code>
 * <p></p>
 * <p>Author: MrCrayfish</p>
 */
public class SyncedPlayerData
{
    @CapabilityInject(DataHolder.class)
    public static final Capability<DataHolder> CAPABILITY = null;

    private static SyncedPlayerData instance;

    private final Map<ResourceLocation, SyncedDataKey<?>> registeredDataKeys = new HashMap<>();
    private final Map<Integer, SyncedDataKey<?>> idToDataKey = new HashMap<>();
    private int nextKeyId = 0;
    private boolean dirty = false;

    private SyncedPlayerData() {}

    public static SyncedPlayerData instance()
    {
        if(instance == null)
        {
            instance = new SyncedPlayerData();
        }
        return instance;
    }

    public static void onRegisterCapability(RegisterCapabilitiesEvent event)
    {
        event.register(DataHolder.class);
    }

    /**
     * Registers a synced data key into the system.
     *
     * @param key a synced data key instance
     */
    public void registerKey(SyncedDataKey<?> key)
    {
        if(this.registeredDataKeys.containsKey(key.getKey()))
        {
            throw new IllegalArgumentException(String.format("The data key '%s' is already registered!", key.getKey()));
        }
        int nextId = this.nextKeyId++;
        key.setId(nextId);
        this.registeredDataKeys.put(key.getKey(), key);
        this.idToDataKey.put(nextId, key);
    }

    /**
     * Sets the value of a synced data key to the specified player
     *
     * @param player the player to assign the value to
     * @param key    a registered synced data key
     * @param value  a new value that matches the synced data key type
     */
    public <T> void set(Player player, SyncedDataKey<T> key, T value)
    {
        if(!this.registeredDataKeys.values().contains(key))
        {
            throw new IllegalArgumentException(String.format("The data key '%s' is not registered!", key.getKey()));
        }
        DataHolder holder = this.getDataHolder(player);
        if(holder != null && holder.set(player, key, value))
        {
            if(!player.level.isClientSide())
            {
                this.dirty = true;
            }
        }
    }

    /**
     * Gets the value for the synced data key from the specified player. It is best to check that
     * the player is alive before getting the value.
     *
     * @param player the player to retrieve the data from
     * @param key    a registered synced data key
     */
    public <T> T get(Player player, SyncedDataKey<T> key)
    {
        if(!this.registeredDataKeys.values().contains(key))
        {
            throw new IllegalArgumentException(String.format("The data key '%s' is not registered!", key.getKey()));
        }
        DataHolder holder = this.getDataHolder(player);
        return holder != null ? holder.get(key) : key.getDefaultValueSupplier().get();
    }

    @OnlyIn(Dist.CLIENT)
    public <T> void updateClientEntry(Player player, SyncedPlayerData.DataEntry<T> entry)
    {
        SyncedPlayerData.instance().set(player, entry.getKey(), entry.getValue());
    }

    @Nullable
    private SyncedDataKey<?> getKey(int id)
    {
        return this.idToDataKey.get(id);
    }

    public List<SyncedDataKey<?>> getKeys()
    {
        return ImmutableList.copyOf(this.registeredDataKeys.values());
    }

    @Nullable
    private DataHolder getDataHolder(Player player)
    {
        return player.getCapability(CAPABILITY, null).orElse(null);
    }

    @SubscribeEvent
    public void attachCapabilities(AttachCapabilitiesEvent<Entity> event)
    {
        if(event.getObject() instanceof Player)
        {
            event.addCapability(new ResourceLocation(Reference.MOD_ID, "synced_player_data"), new Provider());
        }
    }

    @SubscribeEvent
    public void onStartTracking(PlayerEvent.StartTracking event)
    {
        if(event.getTarget() instanceof Player && !event.getPlayer().level.isClientSide())
        {
            Player player = (Player) event.getTarget();
            DataHolder holder = this.getDataHolder(player);
            if(holder != null)
            {
                List<SyncedPlayerData.DataEntry<?>> entries = holder.gatherAll();
                entries.removeIf(entry -> !entry.getKey().shouldSyncToAllPlayers());
                if(!entries.isEmpty())
                {
                    PacketHandler.getPlayChannel().send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) event.getPlayer()), new MessageSyncPlayerData(player.getId(), entries));
                }
            }
        }
    }

    @SubscribeEvent
    public void onPlayerJoinWorld(EntityJoinWorldEvent event)
    {
        Entity entity = event.getEntity();
        if(entity instanceof Player player && !event.getWorld().isClientSide())
        {
            DataHolder holder = this.getDataHolder(player);
            if(holder != null)
            {
                List<SyncedPlayerData.DataEntry<?>> entries = holder.gatherAll();
                if(!entries.isEmpty())
                {
                    PacketHandler.getPlayChannel().send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MessageSyncPlayerData(player.getId(), entries));
                }
            }
        }
    }

    @SubscribeEvent
    public void onPlayerClone(PlayerEvent.Clone event)
    {
        Player original = event.getOriginal();
        if(!original.level.isClientSide())
        {
            Player player = event.getPlayer();
            DataHolder oldHolder = this.getDataHolder(original);
            if(oldHolder != null)
            {
                DataHolder newHolder = this.getDataHolder(player);
                if(newHolder != null)
                {
                    Map<SyncedDataKey<?>, DataEntry<?>> dataMap = new HashMap<>(oldHolder.dataMap);
                    if(event.isWasDeath())
                    {
                        dataMap.entrySet().removeIf(entry -> !entry.getKey().isPersistent());
                    }
                    newHolder.dataMap = dataMap;
                }
            }
        }
    }

    @SubscribeEvent
    public void onServerTick(TickEvent.PlayerTickEvent event)
    {
        if(event.phase == TickEvent.Phase.END)
        {
            if(this.dirty)
            {
                Player player = event.player;
                if(!player.level.isClientSide())
                {
                    DataHolder holder = this.getDataHolder(player);
                    if(holder != null && holder.isDirty())
                    {
                        List<SyncedPlayerData.DataEntry<?>> entries = holder.gatherDirty();
                        if(!entries.isEmpty())
                        {
                            PacketHandler.getPlayChannel().send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MessageSyncPlayerData(player.getId(), entries));
                            List<SyncedPlayerData.DataEntry<?>> syncToAllEntries = entries.stream().filter(entry -> entry.getKey().shouldSyncToAllPlayers()).collect(Collectors.toList());
                            if(!syncToAllEntries.isEmpty())
                            {
                                PacketHandler.getPlayChannel().send(PacketDistributor.TRACKING_ENTITY.with(() -> player), new MessageSyncPlayerData(player.getId(), syncToAllEntries));
                            }
                        }
                        holder.clean();
                    }
                }
            }
        }
    }

    @SubscribeEvent
    public void onServerTick(TickEvent.ServerTickEvent event)
    {
        if(event.phase == TickEvent.Phase.END)
        {
            if(this.dirty)
            {
                this.dirty = false;
            }
        }
    }

    public static class DataHolder
    {
        private Map<SyncedDataKey<?>, DataEntry<?>> dataMap = new HashMap<>();
        private boolean dirty = false;

        @SuppressWarnings("unchecked")
        private <T> boolean set(Player player, SyncedDataKey<T> key, T value)
        {
            DataEntry<T> entry = (DataEntry<T>) this.dataMap.computeIfAbsent(key, DataEntry::new);
            if(!entry.getValue().equals(value))
            {
                boolean dirty = !player.level.isClientSide() && entry.getKey().shouldSyncToClient();
                entry.setValue(value, dirty);
                this.dirty = dirty;
                return true;
            }
            return false;
        }

        @Nullable
        @SuppressWarnings("unchecked")
        private <T> T get(SyncedDataKey<T> key)
        {
            return (T) this.dataMap.computeIfAbsent(key, DataEntry::new).getValue();
        }

        private boolean isDirty()
        {
            return this.dirty;
        }

        private void clean()
        {
            this.dirty = false;
            this.dataMap.forEach((key, entry) -> entry.clean());
        }

        private List<DataEntry<?>> gatherDirty()
        {
            return this.dataMap.values().stream().filter(DataEntry::isDirty).filter(entry -> entry.getKey().shouldSyncToClient()).collect(Collectors.toList());
        }

        private List<DataEntry<?>> gatherAll()
        {
            return this.dataMap.values().stream().filter(entry -> entry.getKey().shouldSyncToClient()).collect(Collectors.toList());
        }
    }

    public static class DataEntry<T>
    {
        private SyncedDataKey<T> key;
        private T value;
        private boolean dirty;

        private DataEntry(SyncedDataKey<T> key)
        {
            this.key = key;
            this.value = key.getDefaultValueSupplier().get();
        }

        private SyncedDataKey<T> getKey()
        {
            return this.key;
        }

        private T getValue()
        {
            return this.value;
        }

        private void setValue(T value, boolean dirty)
        {
            this.value = value;
            this.dirty = dirty;
        }

        private boolean isDirty()
        {
            return this.dirty;
        }

        private void clean()
        {
            this.dirty = false;
        }

        public void write(FriendlyByteBuf buffer)
        {
            buffer.writeVarInt(this.key.getId());
            this.key.getSerializer().write(buffer, this.value);
        }

        public static DataEntry<?> read(FriendlyByteBuf buffer)
        {
            SyncedDataKey<?> key = SyncedPlayerData.instance().getKey(buffer.readVarInt());
            Validate.notNull(key, "Synced key does not exist for id");
            DataEntry<?> entry = new DataEntry<>(key);
            entry.readValue(buffer);
            return entry;
        }

        private void readValue(FriendlyByteBuf buffer)
        {
            this.value = this.getKey().getSerializer().read(buffer);
        }

        private Tag writeValue()
        {
            return this.key.getSerializer().write(this.value);
        }

        private void readValue(Tag nbt)
        {
            this.value = this.key.getSerializer().read(nbt);
        }
    }

    public boolean updateMappings(HandshakeMessages.S2CSyncedPlayerData message)
    {
        this.idToDataKey.clear();
        Map<ResourceLocation, Integer> keyMappings = message.getKeyMap();
        for(ResourceLocation key : keyMappings.keySet())
        {
            SyncedDataKey<?> syncedDataKey = this.registeredDataKeys.get(key);
            if(syncedDataKey == null) return false;
            int id = keyMappings.get(key);
            syncedDataKey.setId(id);
            this.idToDataKey.put(id, syncedDataKey);
        }
        return true;
    }

    public static class Provider implements ICapabilitySerializable<ListTag>
    {
        final DataHolder holder = new DataHolder();
        final LazyOptional<DataHolder> optional = LazyOptional.of(() -> this.holder);

        @Override
        public ListTag serializeNBT()
        {
            ListTag list = new ListTag();
            this.holder.dataMap.forEach((key, entry) ->
            {
                if(key.shouldSave())
                {
                    CompoundTag keyTag = new CompoundTag();
                    keyTag.putString("Key", key.getKey().toString());
                    keyTag.put("Value", entry.writeValue());
                    list.add(keyTag);
                }
            });
            return list;
        }

        @Override
        public void deserializeNBT(ListTag listTag)
        {
            this.holder.dataMap.clear();
            listTag.forEach(entryTag ->
            {
                CompoundTag keyTag = (CompoundTag) entryTag;
                ResourceLocation key = ResourceLocation.tryParse(keyTag.getString("Key"));
                Tag value = keyTag.get("Value");
                SyncedDataKey<?> syncedDataKey = SyncedPlayerData.instance().registeredDataKeys.get(key);
                if(syncedDataKey != null && syncedDataKey.shouldSave())
                {
                    DataEntry<?> entry = new DataEntry<>(syncedDataKey);
                    entry.readValue(value);
                    this.holder.dataMap.put(syncedDataKey, entry);
                }
            });
        }

        @Nonnull
        @Override
        @SuppressWarnings("ConstantConditions")
        public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side)
        {
            return CAPABILITY.orEmpty(cap, this.optional);
        }
    }
}

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • im trying to install 1.21.4 for Minecraft and for some reason it wont install it. I installed the latest version of java and when i try to open to intsall forge it says that java wont work or that it's not installed. if anyone can help that would be great bc all i want is to play minecraft with mods 
    • [18:39:41] [main/INFO]:Fabric mod metadata not found in jar org.groovymc.gml, ignoring [18:39:41] [main/INFO]:Fabric mod metadata not found in jar thedarkcolour.kotlinforforge, ignoring [18:39:42] [main/INFO]:Dependency resolution found 1 candidates to load [18:39:43] [main/INFO]:Found mod file dark-waters-connector-1.20.1-0.0.22_mapped_srg_1.20.1.jar of type MOD with provider org.sinytra.connector.locator.ConnectorLocator@6c8f4bc7 [18:39:43] [main/INFO]:Starting runtime mappings setup... [18:39:43] [main/INFO]:Injecting ScriptModLocator candidates... [18:39:43] [main/INFO]:Injected Jimfs file system [18:39:43] [main/INFO]:Skipped loading script mods from directory C:\Users\wwwSc\curseforge\minecraft\Instances\L SMP (1)\mods\scripts as it did not exist. [18:39:43] [main/INFO]:Injected ScriptModLocator mod candidates. Found 0 valid mod candidates and 0 broken mod files. [18:39:44] [main/INFO]:Successfully made module authlib transformable [18:39:45] [GML Mappings Thread/INFO]:Loaded runtime mappings in 1616ms [18:39:45] [GML Mappings Thread/INFO]:Finished runtime mappings setup. then it crashes
    • ---- Minecraft Crash Report ---- // Embeddium instance tainted by mods: [oculus, embeddium_extra] // Please do not reach out for Embeddium support without removing these mods first. // ------- // Who set us up the TNT? Time: 2024-12-21 15:42:50 Description: Exception in server tick loop java.lang.RuntimeException: java.lang.NullPointerException: Cannot invoke "net.minecraft.world.level.ItemLike.m_5456_()" because "p_41604_" is null     at org.violetmoon.zetaimplforge.event.ForgeEventsRemapper.lambda$createForgeConsumer$2(ForgeEventsRemapper.java:125) ~[Zeta-1.0-24.jar%23417!/:1.0-24] {re:classloading}     at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:260) ~[eventbus-6.0.5.jar%2387!/:?] {}     at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:252) ~[eventbus-6.0.5.jar%2387!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.5.jar%2387!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.5.jar%2387!/:?] {}     at net.minecraftforge.event.ForgeEventFactory.onPreServerTick(ForgeEventFactory.java:945) ~[forge-1.20.1-47.3.12-universal.jar%23423!/:?] {re:classloading}     at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:812) ~[client-1.20.1-20230612.114412-srg.jar%23418!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,pl:mixin:A}     at net.minecraft.client.server.IntegratedServer.m_5705_(IntegratedServer.java:89) ~[client-1.20.1-20230612.114412-srg.jar%23418!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:661) ~[client-1.20.1-20230612.114412-srg.jar%23418!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,pl:mixin:A}     at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[client-1.20.1-20230612.114412-srg.jar%23418!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,pl:mixin:A}     at java.lang.Thread.run(Thread.java:833) ~[?:?] {re:mixin} Caused by: java.lang.NullPointerException: Cannot invoke "net.minecraft.world.level.ItemLike.m_5456_()" because "p_41604_" is null     at net.minecraft.world.item.ItemStack.<init>(ItemStack.java:147) ~[client-1.20.1-20230612.114412-srg.jar%23418!/:?] {re:mixin,xf:fml:forge:itemstack,re:classloading,xf:fml:forge:itemstack,pl:mixin:APP:itemfilters-common.mixins.json:ItemStackMixin,pl:mixin:APP:necronomicon-common.mixins.json:item.AnimatedItemNameMixin,pl:mixin:APP:quark.mixins.json:ItemStackMixin,pl:mixin:A}     at net.minecraft.world.item.ItemStack.<init>(ItemStack.java:143) ~[client-1.20.1-20230612.114412-srg.jar%23418!/:?] {re:mixin,xf:fml:forge:itemstack,re:classloading,xf:fml:forge:itemstack,pl:mixin:APP:itemfilters-common.mixins.json:ItemStackMixin,pl:mixin:APP:necronomicon-common.mixins.json:item.AnimatedItemNameMixin,pl:mixin:APP:quark.mixins.json:ItemStackMixin,pl:mixin:A}     at net.minecraft.world.item.ItemStack.<init>(ItemStack.java:127) ~[client-1.20.1-20230612.114412-srg.jar%23418!/:?] {re:mixin,xf:fml:forge:itemstack,re:classloading,xf:fml:forge:itemstack,pl:mixin:APP:itemfilters-common.mixins.json:ItemStackMixin,pl:mixin:APP:necronomicon-common.mixins.json:item.AnimatedItemNameMixin,pl:mixin:APP:quark.mixins.json:ItemStackMixin,pl:mixin:A}     at uwu.lopyluna.create_dd.content.items.equipment.gilded_rose_tools.GRHoeItem.getCraftingRemainingItem(GRHoeItem.java:103) ~[Create-DnDesire-1.20.1-0.1b.Release-Early-Dev.jar%23308!/:0.1b.Release-Early-Dev] {re:classloading}     at net.minecraftforge.common.extensions.IForgeItemStack.getCraftingRemainingItem(IForgeItemStack.java:62) ~[forge-1.20.1-47.3.12-universal.jar%23423!/:?] {re:computing_frames,re:mixin,re:classloading}     at org.violetmoon.zeta.util.handler.RecipeCrawlHandler.digest(RecipeCrawlHandler.java:159) ~[Zeta-1.0-24.jar%23417!/:1.0-24] {re:classloading}     at org.violetmoon.zeta.util.handler.RecipeCrawlHandler.onTick(RecipeCrawlHandler.java:142) ~[Zeta-1.0-24.jar%23417!/:1.0-24] {re:classloading}     at org.violetmoon.zetaimplforge.event.ForgeEventsRemapper.lambda$createForgeConsumer$2(ForgeEventsRemapper.java:123) ~[Zeta-1.0-24.jar%23417!/:1.0-24] {re:classloading}     ... 10 more A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details:     Minecraft Version: 1.20.1     Minecraft Version ID: 1.20.1     Operating System: Windows 11 (amd64) version 10.0     Java Version: 17.0.8, Microsoft     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Microsoft     Memory: 1657773056 bytes (1580 MiB) / 7033847808 bytes (6708 MiB) up to 8388608000 bytes (8000 MiB)     CPUs: 20     Processor Vendor: GenuineIntel     Processor Name: 12th Gen Intel(R) Core(TM) i7-12700H     Identifier: Intel64 Family 6 Model 154 Stepping 3     Microarchitecture: Alder Lake     Frequency (GHz): 2.69     Number of physical packages: 1     Number of physical CPUs: 14     Number of logical CPUs: 20     Graphics card #0 name: NVIDIA GeForce RTX 3060 Laptop GPU     Graphics card #0 vendor: NVIDIA (0x10de)     Graphics card #0 VRAM (MB): 4095.00     Graphics card #0 deviceId: 0x2520     Graphics card #0 versionInfo: DriverVersion=32.0.15.5597     Graphics card #1 name: Intel(R) Iris(R) Xe Graphics     Graphics card #1 vendor: Intel Corporation (0x8086)     Graphics card #1 VRAM (MB): 1024.00     Graphics card #1 deviceId: 0x46a6     Graphics card #1 versionInfo: DriverVersion=31.0.101.4146     Memory slot #0 capacity (MB): 8192.00     Memory slot #0 clockSpeed (GHz): 4.80     Memory slot #0 type: Unknown     Memory slot #1 capacity (MB): 8192.00     Memory slot #1 clockSpeed (GHz): 4.80     Memory slot #1 type: Unknown     Virtual memory max (MB): 33483.11     Virtual memory used (MB): 22077.64     Swap memory total (MB): 17408.00     Swap memory used (MB): 984.43     JVM Flags: 4 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx8000m -Xms256m     Loaded Shaderpack: ComplementaryReimagined_r5.3 + EuphoriaPatches_1.4.3         Profile: HIGH (+0 options changed by user)     Server Running: true     Player Count: 0 / 8; []     Data Packs: vanilla, mod:flansmod (incompatible), mod:kuma_api (incompatible), mod:create_things_and_misc, mod:easyanvils, mod:geckolib, mod:createdeco (incompatible), mod:botarium (incompatible), mod:critter_lib, mod:immersive_aircraft (incompatible), mod:sophisticatedcore (incompatible), mod:ironjetpacks, mod:ritchiesprojectilelib (incompatible), mod:xaeroworldmap (incompatible), mod:citadel (incompatible), mod:alexsmobs (incompatible), mod:mixinextras (incompatible), mod:bookshelf, mod:sophisticatedbackpacks (incompatible), mod:create_dragon_lib (incompatible), mod:pickupnotifier, mod:bygonenether (incompatible), mod:railways, mod:create_new_age, mod:balm, mod:immersive_armors (incompatible), mod:carryon (incompatible), mod:leavesbegone, mod:letsdoaddon_compat, mod:embeddium, mod:createcafe (incompatible), mod:create_connected, mod:farmersdelight, mod:ironfurnaces, mod:botania, mod:gardenofglass (incompatible), mod:baubly, mod:resourcefulconfig (incompatible), mod:curios (incompatible), mod:patchouli (incompatible), mod:create_factory, mod:advancednetherite, mod:ftbultimine (incompatible), mod:resourcefullib (incompatible), mod:architectury (incompatible), mod:camping, mod:doapi (incompatible), mod:vinery (incompatible), mod:beachparty (incompatible), mod:bloomingnature, mod:meadow, mod:herbalbrews, mod:toms_storage (incompatible), mod:customstartinggear (incompatible), mod:createteleporters, mod:sliceanddice (incompatible), mod:darkmodeeverywhere (incompatible), mod:quarkoddities, mod:estrogen (incompatible), mod:create_questing (incompatible), mod:createbigcannons (incompatible), mod:gourmet, mod:cucumber, mod:ftblibrary (incompatible), mod:ftbteams (incompatible), mod:sophisticatedstorage (incompatible), mod:copycats (incompatible), mod:itemfilters (incompatible), mod:easymagic, mod:jei, mod:nethervinery (incompatible), mod:furniture (incompatible), mod:createloveandwar, mod:waystones, mod:clumps (incompatible), mod:journeymap (incompatible), mod:comforts (incompatible), mod:naturescompass, mod:libx, mod:design_decor (incompatible), mod:create_confectionery, mod:fusion, mod:crafttweaker (incompatible), mod:mekanism, mod:puzzlesaccessapi, mod:forge, mod:farm_and_charm (incompatible), mod:candlelight (incompatible), mod:bakery (incompatible), mod:brewery (incompatible), mod:tfmg (incompatible), mod:ironchest, mod:jukeboxfix (incompatible), mod:alexscaves, mod:enchdesc (incompatible), mod:terrablender, mod:biomesoplenty (incompatible), mod:moonlight (incompatible), mod:paradigms_dyed_planks, mod:mousetweaks, mod:regions_unexplored (incompatible), mod:necronomicon, mod:ftbquests (incompatible), mod:mixinsquared (incompatible), mod:jade (incompatible), mod:ae2 (incompatible), mod:spectrelib (incompatible), mod:kotlinforforge (incompatible), mod:flywheel, mod:steampowered (incompatible), mod:amendments (incompatible), mod:create, mod:create_dd (incompatible), mod:crystal_clear (incompatible), mod:create_central_kitchen (incompatible), mod:createcasing (incompatible), mod:creategoggles (incompatible), mod:extendedgears (incompatible), mod:createoreexcavation (incompatible), mod:xaerominimap (incompatible), mod:create_sa, mod:storagedrawers (incompatible), mod:zeta (incompatible), mod:quark (incompatible), mod:supplementaries, mod:immediatelyfast (incompatible), mod:wildernature, mod:createmetallurgy (incompatible), mod:embeddium_extra, mod:puzzleslib, mod:kitchen_grow (incompatible), mod:just_ctgui, mod:create_oppenheimered, mod:euphoria_patcher, mod:oculus, mod:create_enchantment_industry (incompatible), mod:letsdoaddonstructures, mod:createaddition (incompatible), Supplementaries Generated Pack, better_leaves, builtin/loveandwar_simple_brass, builtin/loveandwar_vender_data, bushy_leaves, create_central_kitchen:farmersdelight (incompatible), green_stove, optifine_support, mod:mysticalagriculture, mod:matc, mod:gravestone     Enabled Feature Flags: minecraft:vanilla     World Generation: Stable     Type: Integrated Server (map_client.txt)     Is Modded: Definitely; Client brand changed to 'forge'; Server brand changed to 'forge'     Launched Version: forge-47.3.12     ModLauncher: 10.0.9+10.0.9+main.dcd20f30     ModLauncher launch target: forgeclient     ModLauncher naming: srg     ModLauncher services:          mixin-0.8.5.jar mixin PLUGINSERVICE          eventbus-6.0.5.jar eventbus PLUGINSERVICE          fmlloader-1.20.1-47.3.12.jar slf4jfixer PLUGINSERVICE          fmlloader-1.20.1-47.3.12.jar object_holder_definalize PLUGINSERVICE          fmlloader-1.20.1-47.3.12.jar runtime_enum_extender PLUGINSERVICE          fmlloader-1.20.1-47.3.12.jar capability_token_subclass PLUGINSERVICE          accesstransformers-8.0.4.jar accesstransformer PLUGINSERVICE          fmlloader-1.20.1-47.3.12.jar runtimedistcleaner PLUGINSERVICE          modlauncher-10.0.9.jar mixin TRANSFORMATIONSERVICE          modlauncher-10.0.9.jar fml TRANSFORMATIONSERVICE      FML Language Providers:          [email protected]         [email protected]         javafml@null         lowcodefml@null     Mod List:          flansmod-1.20.1-0.4.193.jar                       |Flan's Mod                    |flansmod                      |0.4                 |DONE      |Manifest: NOSIGNATURE         kuma-api-forge-20.1.9-SNAPSHOT.jar                |KumaAPI                       |kuma_api                      |20.1.9-SNAPSHOT     |DONE      |Manifest: NOSIGNATURE         create_misc_and_things_ 1.20.1_4.0A.jar           |create: things and misc       |create_things_and_misc        |1.0.0               |DONE      |Manifest: NOSIGNATURE         EasyAnvils-v8.0.2-1.20.1-Forge.jar                |Easy Anvils                   |easyanvils                    |8.0.2               |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a         geckolib-forge-1.20.1-4.4.9.jar                   |GeckoLib 4                    |geckolib                      |4.4.9               |DONE      |Manifest: NOSIGNATURE         createdeco-2.0.2-1.20.1-forge.jar                 |Create Deco                   |createdeco                    |2.0.2-1.20.1-forge  |DONE      |Manifest: NOSIGNATURE         botarium-forge-1.20.1-2.3.4.jar                   |Botarium                      |botarium                      |2.3.4               |DONE      |Manifest: NOSIGNATURE         critter-forge-0.1-beta.11.jar                     |Critter Library               |critter_lib                   |0.1-beta.11         |DONE      |Manifest: NOSIGNATURE         immersive_aircraft-1.1.5+1.20.1-forge.jar         |Immersive Aircraft            |immersive_aircraft            |1.1.5+1.20.1        |DONE      |Manifest: NOSIGNATURE         sophisticatedcore-1.20.1-1.0.1.809.jar            |Sophisticated Core            |sophisticatedcore             |1.0.1.809           |DONE      |Manifest: NOSIGNATURE         IronJetpacks-1.20.1-7.0.7.jar                     |Iron Jetpacks                 |ironjetpacks                  |7.0.7               |DONE      |Manifest: NOSIGNATURE         ritchiesprojectilelib-2.0.0-dev+mc.1.20.1-forge-bu|Ritchie's Projectile Library  |ritchiesprojectilelib         |2.0.0-dev+mc.1.20.1-|DONE      |Manifest: NOSIGNATURE         XaerosWorldMap_1.39.2_Forge_1.20.jar              |Xaero's World Map             |xaeroworldmap                 |1.39.2              |DONE      |Manifest: NOSIGNATURE         citadel-2.6.1-1.20.1.jar                          |Citadel                       |citadel                       |2.6.1               |DONE      |Manifest: NOSIGNATURE         alexsmobs-1.22.9.jar                              |Alex's Mobs                   |alexsmobs                     |1.22.9              |DONE      |Manifest: NOSIGNATURE         mixinextras-forge-0.4.1.jar                       |MixinExtras                   |mixinextras                   |0.4.1               |DONE      |Manifest: NOSIGNATURE         Bookshelf-Forge-1.20.1-20.2.13.jar                |Bookshelf                     |bookshelf                     |20.2.13             |DONE      |Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         sophisticatedbackpacks-1.20.1-3.20.17.1150.jar    |Sophisticated Backpacks       |sophisticatedbackpacks        |3.20.17.1150        |DONE      |Manifest: NOSIGNATURE         create_dragon_lib-1.20.1-1.4.3.jar                |Create: Dragon Lib            |create_dragon_lib             |1.4.3               |DONE      |Manifest: NOSIGNATURE         PickUpNotifier-v8.0.0-1.20.1-Forge.jar            |Pick Up Notifier              |pickupnotifier                |8.0.0               |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a         bygonenether-1.3.2-1.20.x.jar                     |Bygone Nether                 |bygonenether                  |1.3.2               |DONE      |Manifest: NOSIGNATURE         Steam_Rails-1.6.7+forge-mc1.20.1.jar              |Create: Steam 'n' Rails       |railways                      |1.6.7+forge-mc1.20.1|DONE      |Manifest: NOSIGNATURE         create-new-age-forge-1.20.1-1.1.2.jar             |Create: New Age               |create_new_age                |1.1.2               |DONE      |Manifest: NOSIGNATURE         balm-forge-1.20.1-7.3.10-all.jar                  |Balm                          |balm                          |7.3.10              |DONE      |Manifest: NOSIGNATURE         immersive_armors-1.6.1+1.20.1-forge.jar           |Immersive Armors              |immersive_armors              |1.6.1+1.20.1        |DONE      |Manifest: NOSIGNATURE         carryon-forge-1.20.1-2.1.2.7.jar                  |Carry On                      |carryon                       |2.1.2.7             |DONE      |Manifest: NOSIGNATURE         LeavesBeGone-v8.0.0-1.20.1-Forge.jar              |Leaves Be Gone                |leavesbegone                  |8.0.0               |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a         letsdo-addon-compat-forge-1.4.2.jar               |[Let's Do Addon] Compat       |letsdoaddon_compat            |1.4.2               |DONE      |Manifest: NOSIGNATURE         embeddium-0.3.31+mc1.20.1.jar                     |Embeddium                     |embeddium                     |0.3.31+mc1.20.1     |DONE      |Manifest: NOSIGNATURE         createcafe-1.2.4-1.20.1.jar                       |Create Cafe                   |createcafe                    |1.2.4-1.20.1        |DONE      |Manifest: NOSIGNATURE         create_connected-0.9.2-mc1.20.1-all.jar           |Create: Connected             |create_connected              |0.9.2-mc1.20.1      |DONE      |Manifest: NOSIGNATURE         FarmersDelight-1.20.1-1.2.6.jar                   |Farmer's Delight              |farmersdelight                |1.20.1-1.2.6        |DONE      |Manifest: NOSIGNATURE         ironfurnaces-1.20.1-4.1.6.jar                     |Iron Furnaces                 |ironfurnaces                  |4.1.6               |DONE      |Manifest: NOSIGNATURE         Botania-1.20.1-446-FORGE.jar                      |Botania                       |botania                       |1.20.1-446-FORGE    |DONE      |Manifest: NOSIGNATURE         gardenofglass-1.12.jar                            |Garden of Glass               |gardenofglass                 |1.12                |DONE      |Manifest: NOSIGNATURE         baubly-forge-1.20.1-1.0.1.jar                     |Baubly                        |baubly                        |1.0.1               |DONE      |Manifest: NOSIGNATURE         resourcefulconfig-forge-1.20.1-2.1.2.jar          |Resourcefulconfig             |resourcefulconfig             |2.1.2               |DONE      |Manifest: NOSIGNATURE         curios-forge-5.11.0+1.20.1.jar                    |Curios API                    |curios                        |5.11.0+1.20.1       |DONE      |Manifest: NOSIGNATURE         Patchouli-1.20.1-84-FORGE.jar                     |Patchouli                     |patchouli                     |1.20.1-84-FORGE     |DONE      |Manifest: NOSIGNATURE         create_factory-0.4b-1.20.1.jar                    |Create: Factory               |create_factory                |0.4b-1.20.1         |DONE      |Manifest: NOSIGNATURE         advancednetherite-forge-2.1.3-1.20.1.jar          |Advanced Netherite            |advancednetherite             |2.1.3               |DONE      |Manifest: NOSIGNATURE         ftb-ultimine-forge-2001.1.5.jar                   |FTB Ultimine                  |ftbultimine                   |2001.1.5            |DONE      |Manifest: NOSIGNATURE         resourcefullib-forge-1.20.1-2.1.29.jar            |Resourceful Lib               |resourcefullib                |2.1.29              |DONE      |Manifest: NOSIGNATURE         architectury-9.2.14-forge.jar                     |Architectury                  |architectury                  |9.2.14              |DONE      |Manifest: NOSIGNATURE         letsdo-camping-forge-1.0.4.jar                    |[Let's Do] Camping            |camping                       |1.0.4               |DONE      |Manifest: NOSIGNATURE         letsdo-API-forge-1.2.15-forge.jar                 |[Let's Do] API                |doapi                         |1.2.15              |DONE      |Manifest: NOSIGNATURE         letsdo-vinery-forge-1.4.34.jar                    |[Let's Do] Vinery             |vinery                        |1.4.34              |DONE      |Manifest: NOSIGNATURE         letsdo-beachparty-forge-1.1.5.jar                 |[Let's Do] Beachparty         |beachparty                    |1.1.5               |DONE      |Manifest: NOSIGNATURE         letsdo-bloomingnature-forge-1.0.9.jar             |[Let's Do] BloomingNature     |bloomingnature                |1.0.9               |DONE      |Manifest: NOSIGNATURE         letsdo-meadow-forge-1.3.19.jar                    |[Let's Do] Meadow             |meadow                        |1.3.19              |DONE      |Manifest: NOSIGNATURE         letsdo-herbalbrews-forge-1.0.8.jar                |[Let's Do] HerbalBrews        |herbalbrews                   |1.0.8               |DONE      |Manifest: NOSIGNATURE         toms_storage-1.20-1.6.9.jar                       |Tom's Simple Storage Mod      |toms_storage                  |1.6.9               |DONE      |Manifest: NOSIGNATURE         CustomStartingGear-1.20-2.0.3.jar                 |Custom Starter Gear           |customstartinggear            |2.0.3               |DONE      |Manifest: NOSIGNATURE         createteleporters2.2-1.20.1.jar                   |Create Teleporters            |createteleporters             |2.2                 |DONE      |Manifest: NOSIGNATURE         sliceanddice-forge-3.3.0.jar                      |Create Slice & Dice           |sliceanddice                  |3.3.0               |DONE      |Manifest: NOSIGNATURE         DarkModeEverywhere-1.20.1-1.2.3.jar               |DarkModeEverywhere            |darkmodeeverywhere            |1.20.1-1.2.3        |DONE      |Manifest: NOSIGNATURE         QuarkOddities-1.20.1.jar                          |Quark Oddities                |quarkoddities                 |1.20.1              |DONE      |Manifest: NOSIGNATURE         Estrogen-4.3.1+1.20.1-forge.jar                   |Create: Estrogen              |estrogen                      |4.3.1+1.20.1-forge  |DONE      |Manifest: NOSIGNATURE         Create_Questing-FORGE-1.20.1-1.0.0.jar            |Create Questing               |create_questing               |1.0.0               |DONE      |Manifest: NOSIGNATURE         createbigcannons-5.7.2-mc.1.20.1-forge.jar        |Create Big Cannons            |createbigcannons              |5.7.2               |DONE      |Manifest: NOSIGNATURE         gourmet-0.1.1b-1.20.1.jar                         |Create Gourmet                |gourmet                       |0.1.1b-1.20.1       |DONE      |Manifest: NOSIGNATURE         Cucumber-1.20.1-7.0.13.jar                        |Cucumber Library              |cucumber                      |7.0.13              |DONE      |Manifest: NOSIGNATURE         ftb-library-forge-2001.2.6.jar                    |FTB Library                   |ftblibrary                    |2001.2.6            |DONE      |Manifest: NOSIGNATURE         ftb-teams-forge-2001.3.0.jar                      |FTB Teams                     |ftbteams                      |2001.3.0            |DONE      |Manifest: NOSIGNATURE         sophisticatedstorage-1.20.1-1.0.2.985.jar         |Sophisticated Storage         |sophisticatedstorage          |1.0.2.985           |DONE      |Manifest: NOSIGNATURE         copycats-2.1.4+mc.1.20.1-forge.jar                |Create: Copycats+             |copycats                      |2.1.4+mc.1.20.1-forg|DONE      |Manifest: NOSIGNATURE         item-filters-forge-2001.1.0-build.59.jar          |Item Filters                  |itemfilters                   |2001.1.0-build.59   |DONE      |Manifest: NOSIGNATURE         EasyMagic-v8.0.1-1.20.1-Forge.jar                 |Easy Magic                    |easymagic                     |8.0.1               |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a         jei-1.20.1-forge-15.20.0.105.jar                  |Just Enough Items             |jei                           |15.20.0.105         |DONE      |Manifest: NOSIGNATURE         letsdo-nethervinery-forge-1.2.16.jar              |[Let's Do] NetherVinery       |nethervinery                  |1.2.16              |DONE      |Manifest: NOSIGNATURE         letsdo-furniture-forge-1.0.4.jar                  |[Let's Do] Furniture          |furniture                     |1.0.4               |DONE      |Manifest: NOSIGNATURE         createloveandwar-0.3-1.20.1.jar                   |Create: Love and War          |createloveandwar              |0.3-1.20.1          |DONE      |Manifest: NOSIGNATURE         waystones-forge-1.20-14.1.6.jar                   |Waystones                     |waystones                     |14.1.6              |DONE      |Manifest: NOSIGNATURE         Clumps-forge-1.20.1-12.0.0.4.jar                  |Clumps                        |clumps                        |12.0.0.4            |DONE      |Manifest: NOSIGNATURE         journeymap-1.20.1-5.10.3-forge.jar                |Journeymap                    |journeymap                    |5.10.3              |DONE      |Manifest: NOSIGNATURE         comforts-forge-6.4.0+1.20.1.jar                   |Comforts                      |comforts                      |6.4.0+1.20.1        |DONE      |Manifest: NOSIGNATURE         NaturesCompass-1.20.1-1.11.2-forge.jar            |Nature's Compass              |naturescompass                |1.20.1-1.11.2-forge |DONE      |Manifest: NOSIGNATURE         LibX-1.20.1-5.0.14.jar                            |LibX                          |libx                          |1.20.1-5.0.14       |DONE      |Manifest: NOSIGNATURE         design_decor-0.4.0b-1.20.1.jar                    |Create: Design n' Decor       |design_decor                  |0.4.0b              |DONE      |Manifest: NOSIGNATURE         create-confectionery1.20.1_v1.1.0.jar             |Create Confectionery          |create_confectionery          |1.1.0               |DONE      |Manifest: NOSIGNATURE         fusion-1.1.1-forge-mc1.20.1.jar                   |Fusion                        |fusion                        |1.1.1               |DONE      |Manifest: NOSIGNATURE         CraftTweaker-forge-1.20.1-14.0.44.jar             |CraftTweaker                  |crafttweaker                  |14.0.44             |DONE      |Manifest: NOSIGNATURE         Mekanism-1.20.1-10.4.12.68.jar                    |Mekanism                      |mekanism                      |10.4.12             |DONE      |Manifest: NOSIGNATURE         puzzlesaccessapi-forge-8.0.7.jar                  |Puzzles Access Api            |puzzlesaccessapi              |8.0.7               |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a         forge-1.20.1-47.3.12-universal.jar                |Forge                         |forge                         |47.3.12             |DONE      |Manifest: 84:ce:76:e8:45:35:e4:0e:63:86:df:47:59:80:0f:67:6c:c1:5f:6e:5f:4d:b3:54:47:1a:9f:7f:ed:5e:f2:90         letsdo-farm_and_charm-forge-1.0.4.jar             |[Let's Do] Farm & Charm       |farm_and_charm                |1.0.4               |DONE      |Manifest: NOSIGNATURE         letsdo-candlelight-forge-2.0.2.jar                |[Let's Do] Candlelight        |candlelight                   |2.0.2               |DONE      |Manifest: NOSIGNATURE         letsdo-bakery-forge-2.0.3.jar                     |[Let's Do] Bakery             |bakery                        |2.0.3               |DONE      |Manifest: NOSIGNATURE         letsdo-brewery-forge-2.0.3.jar                    |[Let's Do] Brewery            |brewery                       |2.0.3               |DONE      |Manifest: NOSIGNATURE         tfmg-0.9.3-1.20.1.jar                             |Create: The Factory Must Grow |tfmg                          |0.9.3-1.20.1        |DONE      |Manifest: NOSIGNATURE         MysticalAgriculture-1.20.1-7.0.14.jar             |Mystical Agriculture          |mysticalagriculture           |7.0.14              |DONE      |Manifest: NOSIGNATURE         matc-1.6.0.jar                                    |Mystical Agriculture Tiered Cr|matc                          |1.6.0               |DONE      |Manifest: NOSIGNATURE         ironchest-1.20.1-14.4.4.jar                       |Iron Chests                   |ironchest                     |1.20.1-14.4.4       |DONE      |Manifest: NOSIGNATURE         jukeboxfix-1.0.0-1.20.1.jar                       |Jukeboxfix                    |jukeboxfix                    |1.0.0+1.20.1        |DONE      |Manifest: NOSIGNATURE         client-1.20.1-20230612.114412-srg.jar             |Minecraft                     |minecraft                     |1.20.1              |DONE      |Manifest: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f         alexscaves-2.0.2.jar                              |Alex's Caves                  |alexscaves                    |2.0.2               |DONE      |Manifest: NOSIGNATURE         EnchantmentDescriptions-Forge-1.20.1-17.1.19.jar  |EnchantmentDescriptions       |enchdesc                      |17.1.19             |DONE      |Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         TerraBlender-forge-1.20.1-3.0.1.7.jar             |TerraBlender                  |terrablender                  |3.0.1.7             |DONE      |Manifest: NOSIGNATURE         BiomesOPlenty-1.20.1-18.0.0.592.jar               |Biomes O' Plenty              |biomesoplenty                 |18.0.0.592          |DONE      |Manifest: NOSIGNATURE         moonlight-1.20-2.13.41-forge.jar                  |Moonlight Library             |moonlight                     |1.20-2.13.41        |DONE      |Manifest: NOSIGNATURE         lettuces_dyed_planks-1.1.2 (1.20.1).jar           |Lettuce's Dyed Planks         |paradigms_dyed_planks         |1.1.2               |DONE      |Manifest: NOSIGNATURE         MouseTweaks-forge-mc1.20.1-2.25.1.jar             |Mouse Tweaks                  |mousetweaks                   |2.25.1              |DONE      |Manifest: NOSIGNATURE         RegionsUnexploredForge-0.5.6+1.20.1.jar           |Regions Unexplored            |regions_unexplored            |0.5.6               |DONE      |Manifest: NOSIGNATURE         Necronomicon-Forge-1.6.0+1.20.1.jar               |Necronomicon                  |necronomicon                  |1.6.0               |DONE      |Manifest: NOSIGNATURE         ftb-quests-forge-2001.4.9.jar                     |FTB Quests                    |ftbquests                     |2001.4.9            |DONE      |Manifest: NOSIGNATURE         mixinsquared-forge-0.1.2-beta.5.jar               |MixinSquared                  |mixinsquared                  |0.1.2-beta.5        |DONE      |Manifest: NOSIGNATURE         Jade-1.20.1-forge-11.11.1.jar                     |Jade                          |jade                          |11.11.1+forge       |DONE      |Manifest: NOSIGNATURE         appliedenergistics2-forge-15.3.1-beta.jar         |Applied Energistics 2         |ae2                           |15.3.1-beta         |DONE      |Manifest: NOSIGNATURE         spectrelib-forge-0.13.15+1.20.1.jar               |SpectreLib                    |spectrelib                    |0.13.15+1.20.1      |DONE      |Manifest: NOSIGNATURE         kffmod-4.11.0.jar                                 |Kotlin For Forge              |kotlinforforge                |4.11.0              |DONE      |Manifest: NOSIGNATURE         flywheel-forge-1.20.1-0.6.11-13.jar               |Flywheel                      |flywheel                      |0.6.11-13           |DONE      |Manifest: NOSIGNATURE         steampowered-1.20.1-3.0.2.jar                     |Create: Steam Powered         |steampowered                  |1.20.1-3.0.2        |DONE      |Manifest: NOSIGNATURE         amendments-1.20-1.2.12.jar                        |Amendments                    |amendments                    |1.20-1.2.12         |DONE      |Manifest: NOSIGNATURE         create-1.20.1-0.5.1.j.jar                         |Create                        |create                        |0.5.1.j             |DONE      |Manifest: NOSIGNATURE         Create-DnDesire-1.20.1-0.1b.Release-Early-Dev.jar |Create: Dreams & Desires      |create_dd                     |0.1b.Release-Early-D|DONE      |Manifest: NOSIGNATURE         Crystal-Clear-2.1-Beta-forge.jar                  |Create: Crystal Clear         |crystal_clear                 |2.1-Beta            |DONE      |Manifest: NOSIGNATURE         create_central_kitchen-1.20.1-for-create-0.5.1.f-1|Create: Central Kitchen       |create_central_kitchen        |1.3.12              |DONE      |Manifest: NOSIGNATURE         CreateCasing-1.20.1-1.6.2-fix1.jar                |Create : Encased              |createcasing                  |1.20.1-1.6.2-fix1   |DONE      |Manifest: NOSIGNATURE         creategoggles-1.20.1-0.5.5.g-[FORGE].jar          |Create Goggles                |creategoggles                 |0.5.5.g             |DONE      |Manifest: NOSIGNATURE         extendedgears-2.1.1-1.20.1-0.5.1.f-forge.jar      |Extended Cogwheels            |extendedgears                 |2.1.1-1.20.1-0.5.1.f|DONE      |Manifest: NOSIGNATURE         createoreexcavation-1.20-1.5.3.jar                |Create Ore Excavation         |createoreexcavation           |1.5.3               |DONE      |Manifest: NOSIGNATURE         Xaeros_Minimap_24.6.1_Forge_1.20.jar              |Xaero's Minimap               |xaerominimap                  |24.6.1              |DONE      |Manifest: NOSIGNATURE         gravestone-forge-1.20.1-1.0.24.jar                |Gravestone Mod                |gravestone                    |1.20.1-1.0.24       |DONE      |Manifest: NOSIGNATURE         create-stuff-additions1.20.1_v2.0.5.jar           |Create Stuff & Additions      |create_sa                     |2.0.5               |DONE      |Manifest: NOSIGNATURE         StorageDrawers-1.20.1-12.9.13.jar                 |Storage Drawers               |storagedrawers                |12.9.13             |DONE      |Manifest: NOSIGNATURE         Zeta-1.0-24.jar                                   |Zeta                          |zeta                          |1.0-24              |DONE      |Manifest: NOSIGNATURE         Quark-4.0-460.jar                                 |Quark                         |quark                         |4.0-460             |DONE      |Manifest: NOSIGNATURE         supplementaries-1.20-3.1.11.jar                   |Supplementaries               |supplementaries               |1.20-3.1.11         |DONE      |Manifest: NOSIGNATURE         ImmediatelyFast-Forge-1.3.3+1.20.4.jar            |ImmediatelyFast               |immediatelyfast               |1.3.3+1.20.4        |DONE      |Manifest: NOSIGNATURE         letsdo-wildernature-forge-1.0.3.jar               |[Let's Do] Wilder Nature      |wildernature                  |1.0.3               |DONE      |Manifest: NOSIGNATURE         createmetallurgy-0.0.6-1.20.1.jar                 |Create Metallurgy             |createmetallurgy              |0.0.6-1.20.1        |DONE      |Manifest: NOSIGNATURE         rubidium-extra-0.5.4.3+mc1.20.1-build.121.jar     |Embeddium Extra               |embeddium_extra               |0.5.4.3+mc1.20.1-bui|DONE      |Manifest: NOSIGNATURE         PuzzlesLib-v8.1.25-1.20.1-Forge.jar               |Puzzles Lib                   |puzzleslib                    |8.1.25              |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a         kitchen_grow-0.1-1.20.1.jar                       |Create The Kitchen Must Grow  |kitchen_grow                  |0.1-1.20.1          |DONE      |Manifest: NOSIGNATURE         just_ctgui-0.1.6_release-forge-1.20.1.jar         |Just CTGUI                    |just_ctgui                    |0.1.6               |DONE      |Manifest: NOSIGNATURE         1.20.1-create_oppenheimered-1.0.4.jar             |Create: Oppenheimered         |create_oppenheimered          |1.0.4               |DONE      |Manifest: NOSIGNATURE         EuphoriaPatcher-1.4.3-r5.3-forge.jar              |Euphoria Patcher              |euphoria_patcher              |1.4.3-r5.3-forge    |DONE      |Manifest: NOSIGNATURE         oculus-mc1.20.1-1.7.0.jar                         |Oculus                        |oculus                        |1.7.0               |DONE      |Manifest: NOSIGNATURE         create_enchantment_industry-1.20.1-for-create-0.5.|Create Enchantment Industry   |create_enchantment_industry   |1.2.9.d             |DONE      |Manifest: NOSIGNATURE         letsdo-addon-structures-1.7.1.jar                 |Let's Do Addon: Structures    |letsdoaddonstructures         |1.7.1               |DONE      |Manifest: NOSIGNATURE         createaddition-1.20.1-1.2.4e.jar                  |Create Crafts & Additions     |createaddition                |1.20.1-1.2.4e       |DONE      |Manifest: NOSIGNATURE     Crash Report UUID: c57b94be-d38e-42a2-ae12-b3a24fd7c68f     FML: 47.3     Forge: net.minecraftforge:47.3.12     Flywheel Backend: Off  
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.