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