
Obscuria
Members-
Posts
7 -
Joined
Everything posted by Obscuria
-
1.16.5 Сonfig is not updated before registering items
Obscuria replied to Obscuria's topic in Modder Support
ModConfig.java package net.obscuria.core; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.loading.FMLPaths; import java.io.IOException; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class ModConfig { public static class ServerConfig { public static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder(); public static final ForgeConfigSpec SPEC; public static final ForgeConfigSpec.DoubleValue northernStarDamage; static { BUILDER.comment("Obscuria's Essentials Config."); BUILDER.push("General"); northernStarDamage = BUILDER.comment("Northern Star Damage.").worldRestart().defineInRange("Northern Star Damage", 4F, 0F, 1000F); BUILDER.pop(); SPEC = BUILDER.build(); } } public static void setup() { Path configPath = FMLPaths.CONFIGDIR.get(); Path bopConfigPath = Paths.get(configPath.toAbsolutePath().toString(), "Obscuria Collection"); // Create the config folder try { Files.createDirectory(bopConfigPath); } catch (FileAlreadyExistsException e) { // Do nothing } catch (IOException e) { ObCoreMod.LOGGER.warn("Failed to create Obscuria's Essentials config directory", e); } ModLoadingContext.get().registerConfig(net.minecraftforge.fml.config.ModConfig.Type.COMMON, ServerConfig.SPEC, "Obscuria Collection/ob-core.toml"); } } BladeOfTheNorthernStarItem.java package net.obscuria.core.item; import net.obscuria.core.procedures.BladeOfNorthernStarRightClickedProcedure; import net.obscuria.core.itemgroup.AaaObGeneralItemGroup; import net.obscuria.core.ObCoreModElements; import net.minecraftforge.registries.ObjectHolder; import net.minecraft.world.World; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.math.BlockPos; import net.minecraft.util.Hand; import net.minecraft.util.Direction; import net.minecraft.util.ActionResultType; import net.minecraft.util.ActionResult; import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.SwordItem; import net.minecraft.item.ItemUseContext; import net.minecraft.item.ItemStack; import net.minecraft.item.Item; import net.minecraft.item.IItemTier; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.block.BlockState; import java.util.stream.Stream; import java.util.Map; import java.util.List; import java.util.HashMap; import java.util.AbstractMap; import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.client.gui.screen.Screen; import net.obscuria.core.ModConfig; @ObCoreModElements.ModElement.Tag public class BladeOfTheNorthernStarItem extends ObCoreModElements.ModElement { @ObjectHolder("ob_core:blade_of_northern_star") public static final Item block = null; public BladeOfTheNorthernStarItem(ObCoreModElements instance) { super(instance, 24); } @Override public void initElements() { elements.items.add(() -> new SwordItem(new IItemTier() { public int getMaxUses() { return 1600; } public float getEfficiency() { return 8.5f; } public float getAttackDamage() { return ModConfig.ServerConfig.northernStarDamage.get().floatValue(); } public int getHarvestLevel() { return 3; } public int getEnchantability() { return 11; } public Ingredient getRepairMaterial() { return Ingredient.fromStacks(new ItemStack(MagicDustItem.block)); } }, 3, -2.4000000000000001f, new Item.Properties().group(AaaObGeneralItemGroup.tab).isImmuneToFire()) { @Override public void addInformation(ItemStack itemstack, World world, List<ITextComponent> list, ITooltipFlag flag) { super.addInformation(itemstack, world, list, flag); list.add(new StringTextComponent((new TranslationTextComponent("tooltip.damage").getString() + "7.5 " + new TranslationTextComponent("tooltip.attack_speed").getString() + "0.62s " + new TranslationTextComponent("tooltip.durability").getString() + ((itemstack).getMaxDamage() - (itemstack).getDamage()) + "/" + (itemstack).getMaxDamage()))); if(Screen.hasShiftDown()) { list.add(new TranslationTextComponent("tooltip.collapse")); list.add(new StringTextComponent(new TranslationTextComponent("tooltip.stick").getString() + new TranslationTextComponent("tooltip.northern_star_line1").getString())); list.add(new StringTextComponent(new TranslationTextComponent("tooltip.stick").getString() + new TranslationTextComponent("tooltip.northern_star_line2").getString())); } else { list.add(new TranslationTextComponent("tooltip.expand")); } } @Override public ActionResult<ItemStack> onItemRightClick(World world, PlayerEntity entity, Hand hand) { ActionResult<ItemStack> retval = super.onItemRightClick(world, entity, hand); ItemStack itemstack = retval.getResult(); double x = entity.getPosX(); double y = entity.getPosY(); double z = entity.getPosZ(); BladeOfNorthernStarRightClickedProcedure.executeProcedure( Stream.of(new AbstractMap.SimpleEntry<>("entity", entity), new AbstractMap.SimpleEntry<>("itemstack", itemstack)) .collect(HashMap::new, (_m, _e) -> _m.put(_e.getKey(), _e.getValue()), Map::putAll)); return retval; } @Override public ActionResultType onItemUse(ItemUseContext context) { ActionResultType retval = super.onItemUse(context); World world = context.getWorld(); BlockPos pos = context.getPos(); PlayerEntity entity = context.getPlayer(); Direction direction = context.getFace(); BlockState blockstate = world.getBlockState(pos); int x = pos.getX(); int y = pos.getY(); int z = pos.getZ(); ItemStack itemstack = context.getItem(); BladeOfNorthernStarRightClickedProcedure.executeProcedure( Stream.of(new AbstractMap.SimpleEntry<>("entity", entity), new AbstractMap.SimpleEntry<>("itemstack", itemstack)) .collect(HashMap::new, (_m, _e) -> _m.put(_e.getKey(), _e.getValue()), Map::putAll)); return retval; } }.setRegistryName("blade_of_northern_star")); } } -
1.16.5 Сonfig is not updated before registering items
Obscuria replied to Obscuria's topic in Modder Support
can you show me the specific code i need for the item to have a value from the config when registering? At the moment I'm taking the value like this, but it doesn't work. public float getAttackDamage() { return ModConfig.ServerConfig.northernStarDamage.get().floatValue(); } -
1.16.5 Сonfig is not updated before registering items
Obscuria replied to Obscuria's topic in Modder Support
What does "read them on the fly" mean? If I register a config of the correct type and in the registration class of the item I take the number of damage from the config, will this not work? -
1.16.5 Сonfig is not updated before registering items
Obscuria replied to Obscuria's topic in Modder Support
I need the characteristics of items to depend on the numbers in the config (damage, for example). Is it possible? -
My items only set default config values when registering. I think this is due to the fact that they are registered before the config is updated. This is true? If so, how exactly do I need to rearrange the code so that everything works correctly? Thanks in advance for your help! Main Mod Сlass: package net.obscuria.core; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; import net.minecraftforge.fml.network.simple.SimpleChannel; import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.event.server.FMLServerStartingEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.config.ModConfig.Type; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraft.util.ResourceLocation; import net.minecraft.item.Item; import net.minecraft.entity.EntityType; import net.minecraft.enchantment.Enchantment; import net.minecraft.block.Block; import java.util.function.Supplier; @Mod("ob_core") public class ObCoreMod { public static final Logger LOGGER = LogManager.getLogger(ObCoreMod.class); private static final String PROTOCOL_VERSION = "1"; public static final SimpleChannel PACKET_HANDLER = NetworkRegistry.newSimpleChannel(new ResourceLocation("ob_core", "ob_core"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals); public ObCoreModElements elements; public ObCoreMod() { ModLoadingContext.get().registerConfig(Type.COMMON, ConfigHolder.COMMON_SPEC); elements = new ObCoreModElements(); FMLJavaModLoadingContext.get().getModEventBus().register(this); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::init); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientLoad); MinecraftForge.EVENT_BUS.register(new ObCoreModFMLBusEvents(this)); } private void init(FMLCommonSetupEvent event) { elements.getElements().forEach(element -> element.init(event)); } public void clientLoad(FMLClientSetupEvent event) { elements.getElements().forEach(element -> element.clientLoad(event)); } @SubscribeEvent public void registerBlocks(RegistryEvent.Register<Block> event) { event.getRegistry().registerAll(elements.getBlocks().stream().map(Supplier::get).toArray(Block[]::new)); } @SubscribeEvent public void registerItems(RegistryEvent.Register<Item> event) { event.getRegistry().registerAll(elements.getItems().stream().map(Supplier::get).toArray(Item[]::new)); } @SubscribeEvent public void registerEntities(RegistryEvent.Register<EntityType<?>> event) { event.getRegistry().registerAll(elements.getEntities().stream().map(Supplier::get).toArray(EntityType[]::new)); } @SubscribeEvent public void registerEnchantments(RegistryEvent.Register<Enchantment> event) { event.getRegistry().registerAll(elements.getEnchantments().stream().map(Supplier::get).toArray(Enchantment[]::new)); } @SubscribeEvent public void registerSounds(RegistryEvent.Register<net.minecraft.util.SoundEvent> event) { elements.registerSounds(event); } private static class ObCoreModFMLBusEvents { private final ObCoreMod parent; ObCoreModFMLBusEvents(ObCoreMod parent) { this.parent = parent; } @SubscribeEvent public void serverLoad(FMLServerStartingEvent event) { this.parent.elements.getElements().forEach(element -> element.serverLoad(event)); } } }