Posted December 22, 20204 yr 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 Edited December 22, 20204 yr by VecsonON
December 22, 20204 yr Author 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 December 22, 20204 yr by VecsonON
December 22, 20204 yr Author 1 minute ago, diesieben07 said: The mod is not installed on the server. Wait a second, I will delete then. I adding this.
December 22, 20204 yr Author 3 minutes ago, diesieben07 said: The mod is not installed on the server. debug (1).log debug.log
December 22, 20204 yr Author 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 December 22, 20204 yr by VecsonON
December 22, 20204 yr Author 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
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.