Jump to content

Mod on server doesn't work


VecsonON

Recommended Posts

Hello,


Recently I am creating a mod.

when I wanted to play with a friend, but mod doesn't' work on server

 

 

We have same mods on server and client
if this  is stupid question , I sorry

 

 

Sorry for my bad English, I'm not native Englishman

 

 

 

error.png

Edited by VecsonON
Link to comment
Share on other sites

main:

package pl.coding.tutorial;

import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import pl.coding.tutorial.util.RegistryHandler;

@Mod("hardmode")
public class tutorial
{
    public int tenperature = 0;
    public int playertemp = 0;

    private static final Logger LOGGER = LogManager.getLogger();
    public static String MOD_ID = "hardmode";
    public tutorial() {

        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);
        RegistryHandler.Init();
        MinecraftForge.EVENT_BUS.register(this);

    }

    private void setup(final FMLCommonSetupEvent event) { }

    private void doClientStuff(final FMLClientSetupEvent event) { }

    public static final ItemGroup TAB = new ItemGroup("tutorialtab") {
        @Override
        public ItemStack createIcon() {
            return new ItemStack(RegistryHandler.BANDAGE.get());
        }
    };

}

Registry:
 

package pl.coding.tutorial.util;

import net.minecraft.enchantment.Enchantment;
import net.minecraft.item.Item;
import net.minecraft.potion.Effect;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import pl.coding.tutorial.Enchantment.*;
import pl.coding.tutorial.base.*;
import pl.coding.tutorial.base.effects.*;
import pl.coding.tutorial.tutorial;

public class RegistryHandler {

    public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, tutorial.MOD_ID);
    public static final DeferredRegister<Effect> EFFECTS = DeferredRegister.create(ForgeRegistries.POTIONS, tutorial.MOD_ID);
    public static final DeferredRegister<Enchantment> ENCHANTMENTS = DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, tutorial.MOD_ID);
    public static void Init(){
        ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
        EFFECTS.register(FMLJavaModLoadingContext.get().getModEventBus());
        ENCHANTMENTS.register(FMLJavaModLoadingContext.get().getModEventBus());
    }
    //items
    //How to do this
    //public static final RegistryObject<Item> ITEM = ITEMS.register("item", ItemBase::new);
    //public static final RegistryObject<Effect> EFFECT = EFFECTS.register("effect", EffectBase::new);

    public static final RegistryObject<Item> BANDAGE = ITEMS.register("bandage", ItemBase::new);
    public static final RegistryObject<Item> STRINGE = ITEMS.register("stringe", ItemBase::new);

    public static final RegistryObject<Effect> INFECTION = EFFECTS.register("infection", EffectBaseHarmful::new);
    public static final RegistryObject<Effect> BREAK_LEG = EFFECTS.register("breakleg", EffectBaseHarmful::new);
    public static final RegistryObject<Effect> BREAK_ARM = EFFECTS.register("breakarm", EffectBaseHarmful::new);

    public static final RegistryObject<Enchantment> COLD = ENCHANTMENTS.register("cold", Cold::new);
    public static final RegistryObject<Enchantment> HEAT = ENCHANTMENTS.register("heat", Heat::new);






}

mod.toml [maybe]
 

modLoader="javafml"
loaderVersion="[35,)"
license="All rights reserved"
[[mods]]
modId="hardmode"
version="1.16.4"
displayName="HardMode MOD" #mandatory
credits="Thanks for this example mod goes to Java" #optional
authors="VecsonON" #optional
description='''

'''
[[dependencies.hardmode]]
    modId="forge" #mandatory
    mandatory=true #mandatory
    versionRange="[35,)" #mandatory
    ordering="NONE"
    side="BOTH"
[[dependencies.hardmode]]
    modId="minecraft"
    mandatory=true
    versionRange="[1.16.4,1.17)"
    ordering="NONE"
    side="BOTH"
Events Yes this code is awful...
package pl.coding.tutorial.events;

import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.monster.ZombieEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.INBT;
import net.minecraft.network.play.server.STitlePacket;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Effects;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.event.entity.living.LivingDamageEvent;
import net.minecraftforge.event.entity.living.LivingEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.network.NetworkRegistry;
import net.minecraftforge.fml.network.PacketDistributor;
import net.minecraftforge.fml.network.simple.SimpleChannel;
import org.lwjgl.system.CallbackI;
import pl.coding.tutorial.util.RegistryHandler;
import pl.coding.tutorial.util.utils;

import java.util.Random;
import java.util.function.Supplier;

@Mod.EventBusSubscriber(modid = "hardmode", bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public class ModClientEvents {
    private static final String PROTOCOL_VERSION = "1";
    public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel(
            new ResourceLocation("mymodid", "main"),
            () -> PROTOCOL_VERSION,
            PROTOCOL_VERSION::equals,
            PROTOCOL_VERSION::equals
    );

    //INFECTION

    @SubscribeEvent
    public static void PlayerAttackByZombie(LivingDamageEvent e){
        Random ran = new Random();
        if(e.getEntity() instanceof PlayerEntity){
            PlayerEntity p = (PlayerEntity) e.getEntity();
            if(e.getSource().getTrueSource() instanceof ZombieEntity){
                int rand = ran.nextInt(100);
                Iterable<ItemStack> list = e.getEntity().getArmorInventoryList();
                if(list.spliterator().getExactSizeIfKnown() > 0){
                    rand +=list.spliterator().getExactSizeIfKnown() * 5;
                }
                System.out.println(rand);
                if(rand <= 25){
                    p.addPotionEffect(new EffectInstance(RegistryHandler.INFECTION.get().addAttributesModifier(Attributes.ATTACK_DAMAGE, "648D7064-6A60-4F59-8ABE-C2C23A6DD7A9", 0.5D, AttributeModifier.Operation.ADDITION).addAttributesModifier(Attributes.MOVEMENT_SPEED, "7107DE5E-7CE8-4030-940E-514C1F160890", (double)-0.25F, AttributeModifier.Operation.MULTIPLY_TOTAL), 140000, 1));
                    p.addPotionEffect(new EffectInstance(Effects.HUNGER, 140000, 1));
                }
            }
        }
    }

    //Temperature

    @SubscribeEvent
    public static void TemperatureDec(LivingEvent.LivingUpdateEvent event){
        LivingEntity player = event.getEntityLiving();
            utils.setPlayer(player);
            CompoundNBT tag = player.getPersistentData();
            INBT BL = tag.get("BL");
            INBT BA = tag.get("BA");


            INBT modeTag = tag.get("time");
            if (modeTag == null || BA == null || BL == null) {
                tag.putInt("time", 1);
                tag.putBoolean("BA", false);
                tag.putBoolean("BL", false);
            }
            if(tag.getBoolean("BL") == true)
                player.addPotionEffect(new EffectInstance(RegistryHandler.BREAK_LEG.get().addAttributesModifier(Attributes.MOVEMENT_SPEED, "7107DE5E-7CE8-4030-940E-514C1F160890", (double)-0.25F, AttributeModifier.Operation.MULTIPLY_TOTAL), 140000, 1));
            if(tag.getBoolean("BA") == true)
                player.addPotionEffect(new EffectInstance(RegistryHandler.BREAK_ARM.get(), 1400, 1));

            float tenperature;
            float playertemp;
            BlockPos pos = new BlockPos(player.getPositionVec());
            World world = player.getEntityWorld();

            if (world.getBiome(pos).getCategory().equals(Biome.Category.ICY)) {
                tenperature = -6f;
            } else if (world.getBiome(pos).getCategory().equals(Biome.Category.JUNGLE)) {
                tenperature = 6;
            } else if (world.getBiome(pos).getCategory().equals(Biome.Category.NETHER)) {
                tenperature = 9;
            } else if (world.getBiome(pos).getCategory().equals(Biome.Category.DESERT)) {
                tenperature = 6;
            } else if (world.getBiome(pos).getCategory().equals(Biome.Category.EXTREME_HILLS)) {
                tenperature = -6f;
            } else {
                tenperature = 0;
            }
            float armorTEMP = 0f;
            Iterable<ItemStack> list = event.getEntity().getArmorInventoryList();

            for (ItemStack element : list) {
                if (element.getItem().equals(Items.LEATHER_HELMET)) {
                    armorTEMP += 0.25f;
                } else if (element.getItem().equals(Items.IRON_HELMET)) {
                    armorTEMP += 1f;
                } else if (element.getItem().equals(Items.DIAMOND_HELMET)) {
                    armorTEMP += 1f;
                } else if (element.getItem().equals(Items.GOLDEN_HELMET)) {
                    armorTEMP += 0.5f;
                } else if (element.getItem().equals(Items.NETHERITE_HELMET)) {
                    armorTEMP += 2f;
                }

                if (element.getItem().equals(Items.LEATHER_CHESTPLATE)) {
                    armorTEMP += 0.25f;
                } else if (element.getItem().equals(Items.IRON_CHESTPLATE)) {
                    armorTEMP += 1f;
                } else if (element.getItem().equals(Items.DIAMOND_CHESTPLATE)) {
                    armorTEMP += 1f;
                } else if (element.getItem().equals(Items.GOLDEN_CHESTPLATE)) {
                    armorTEMP += 0.5f;
                } else if (element.getItem().equals(Items.NETHERITE_CHESTPLATE)) {
                    armorTEMP += 2f;
                }

                if (element.getItem().equals(Items.LEATHER_LEGGINGS)) {
                    armorTEMP += 0.25f;
                } else if (element.getItem().equals(Items.IRON_LEGGINGS)) {
                    armorTEMP += 1f;
                } else if (element.getItem().equals(Items.DIAMOND_LEGGINGS)) {
                    armorTEMP += 1f;
                } else if (element.getItem().equals(Items.GOLDEN_LEGGINGS)) {
                    armorTEMP += 0.5f;
                } else if (element.getItem().equals(Items.NETHERITE_LEGGINGS)) {
                    armorTEMP += 2f;
                }

                if (element.getItem().equals(Items.LEATHER_BOOTS)) {
                    armorTEMP += 0.25f;
                } else if (element.getItem().equals(Items.IRON_BOOTS)) {
                    armorTEMP += 1f;
                } else if (element.getItem().equals(Items.DIAMOND_BOOTS)) {
                    armorTEMP += 1f;
                } else if (element.getItem().equals(Items.GOLDEN_BOOTS)) {
                    armorTEMP += 0.5f;
                } else if (element.getItem().equals(Items.NETHERITE_BOOTS)) {
                    armorTEMP += 2f;
                }
                if (EnchantmentHelper.getEnchantmentLevel(RegistryHandler.HEAT.get(), element) > 0) {
                    armorTEMP -= 2f;
                } else if (EnchantmentHelper.getEnchantmentLevel(RegistryHandler.COLD.get(), element) > 0) {
                    armorTEMP += 2f;
                }
            }

            playertemp = tenperature;
            playertemp += armorTEMP;
            if (playertemp >= 10) {
                if(event.getEntity() instanceof PlayerEntity){
                    SendTitle("{\"text\":\"Player "+ ((PlayerEntity)event.getEntity()).getScoreboardName()+" is Overheating\",\"bold\":true,\"color\":\"dark_red\"}");

                }
                event.getEntityLiving().setFire(5);
                tag.putInt("time", tag.getInt("time") - 1);
            } else if (playertemp <= -5) {
                if(event.getEntity() instanceof PlayerEntity){
                    SendTitle("{\"text\":\"Player "+ ((PlayerEntity)event.getEntity()).getScoreboardName()+" is Overcooling\",\"bold\":true,\"color\":\"dark_blue\"}");
                }
                tag.putInt("time", tag.getInt("time") - 1);
                event.getEntity().attackEntityFrom(DamageSource.GENERIC, 1);
            } else {

            }
            //      ONE ARMOR         //
            //   ARMOR | +TEMPERATUR  //
            //    Leather| +0.25      //
            //    IRON   | +1         //
            //    DIAMOND| +1         //
            //    GOLD   | +0.5       //
            //    NETHER | +2         //
            ////////////////////////////
    }


    //BREAKS ARMS, LEGS ITD.
    @SubscribeEvent
    public static void BreakLeg(LivingHurtEvent e){
        Random ran = new Random();
        if(e.getEntity() instanceof PlayerEntity){
            if(e.getAmount() >= 6){
                int rand = ran.nextInt(100);
                if(rand <= 25){
                    ((PlayerEntity) e.getEntity()).addPotionEffect(new EffectInstance(RegistryHandler.BREAK_LEG.get().addAttributesModifier(Attributes.MOVEMENT_SPEED, "7107DE5E-7CE8-4030-940E-514C1F160890", (double)-0.25F, AttributeModifier.Operation.MULTIPLY_TOTAL), 140000, 1));
                    CompoundNBT tag = e.getEntity().getPersistentData();
                }
            }
        }
    }

    @SubscribeEvent
    public static void onBlockHarvested(BlockEvent.BreakEvent e){
        Random ran = new Random();
        int rand = 0;
        ItemStack i = e.getPlayer().inventory.getCurrentItem();
        if(i.getItem().equals(Items.AIR)){
            rand = ran.nextInt(100);
            if(rand <= 5){
                e.getPlayer().addPotionEffect(new EffectInstance(RegistryHandler.BREAK_ARM.get(), 1400, 1));
                CompoundNBT tag = e.getPlayer().getPersistentData();
            }
        }
        if(e.getPlayer().isPotionActive(RegistryHandler.BREAK_ARM.get())){
            e.setCanceled(true);
        }
    }

    @SubscribeEvent
    public static void BandageEvent(PlayerInteractEvent e){
        if(e.getPlayer().inventory.getCurrentItem().getItem().equals(RegistryHandler.BANDAGE.get())){
            CompoundNBT tag = e.getPlayer().getPersistentData();

            tag.putBoolean("BA", false);
            tag.putBoolean("BL", false);
            e.getPlayer().inventory.getCurrentItem().setCount(e.getPlayer().inventory.getCurrentItem().getCount()-1);
            e.getPlayer().clearActivePotions();
        }else if(e.getPlayer().inventory.getCurrentItem().getItem().equals(Items.MILK_BUCKET)){
            CompoundNBT tag = e.getPlayer().getPersistentData();
            if(e.getPlayer().isPotionActive(RegistryHandler.BREAK_ARM.get())){
                tag.putBoolean("BA", true);
            }else if(e.getPlayer().isPotionActive(RegistryHandler.BREAK_LEG.get())){
                tag.putBoolean("BL", true);
            }
        }
    }






    //OTHER

    static void SendTitle(String w){
        try{
            Minecraft.getInstance().player.connection.handleTitle(
                    new STitlePacket(
                            STitlePacket.Type.ACTIONBAR,
                            ITextComponent.Serializer.getComponentFromJson(w),
                            5,
                            25,
                            5
                    )
            );
        }catch (Exception v){

        }
    }

}

 

 
 
Do you need more?
 
  

debug.log

debug.log

Edited by VecsonON
Link to comment
Share on other sites

4 minutes ago, diesieben07 said:

The server mod seems to have a different version of the mod, as it does not have the "mymod:main" network channel, that the client expects to be there.

Connection compatibility actually does not depend on mods and their versions at all. What matters is network channels and registry entries.

Ok, I delete mod on client side and download mod from server and put them on client and still not work.

 

I check forge version. vesion is same.

Edited by VecsonON
Link to comment
Share on other sites

Just now, diesieben07 said:

I just noticed it... Your network channel is created in a static initializer of a class with @EventBusSubscriber(Dist.CLIENT). Because you probably don't reference this class from elsewhere, it is not even loaded on the server, and hence your network channels is not registered there.

 

You should not be relying on static initializers to register things, do it in the proper events.

Oh. Thanks

Link to comment
Share on other sites

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



×
×
  • Create New...

Important Information

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