Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

R3charged

Members
  • Joined

  • Last visited

  1. R3charged changed their profile photo
  2. I'm trying to figure out how to use setPose/setForcedPose properly, right now I'm facing some confusing behavior with it. I've been playing with it in a simple onPlayerTick event, where I'm calling setPose for the event player. Here's what's happening: #1: @SubscribeEvent public void onPlayerTick(TickEvent.PlayerTickEvent event) { event.player.setForcedPose(Pose.FALL_FLYING); } Causes player to be in the pose properly. #2: @SubscribeEvent public void onPlayerTick(TickEvent.PlayerTickEvent event) { event.player.setPose(Pose.FALL_FLYING); } Causes player to be in the pose properly. #3: @SubscribeEvent public void onPlayerTick(TickEvent.PlayerTickEvent event) { if(event.side == LogicalSide.SERVER) { event.player.setForcedPose(Pose.FALL_FLYING); } } Doesn't change player from STANDING pose. #4: @SubscribeEvent public void onPlayerTick(TickEvent.PlayerTickEvent event) { if(event.side == LogicalSide.SERVER) { event.player.setPose(Pose.FALL_FLYING); } } Causes player to glitch rapidly between FALL_FLYING and STANDING #4 doesn't make sense to me; Player also runs an update on Pose internally, which could cause the rapid switching, but #2 doesn't have the rapid switching. ForcedPose is supposed to suppress the internal updating, and keep the player in the ForcedPose, but it shows the forcedpose being ignored in #3. I thought pose might not be being sent to the client side from the server side, but data for pose is stored in a SynchedEntityData. I can't figure out why this is happening I'm trying to use setPose from a capability, which is handled on the server side, which is where I first encountered this.
  3. My bad, here's the constructor. I already have SPELL_REGISTRY.register(bus), so I don't think that's the issue package runecraft.core; import com.mojang.brigadier.arguments.ArgumentType; import com.mojang.logging.LogUtils; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.commands.synchronization.ArgumentTypeInfo; import net.minecraft.commands.synchronization.ArgumentTypeInfos; import net.minecraft.commands.synchronization.SingletonArgumentInfo; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.inventory.MenuType; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; 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 net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.RegistryBuilder; import net.minecraftforge.registries.RegistryManager; import net.minecraftforge.server.command.ModIdArgument; import org.slf4j.Logger; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraftforge.registries.DeferredRegister; import runecraft.api.AllMenuTypes; import runecraft.common.commands.SpellArgumentType; import runecraft.events.CommandEventHandler; import runecraft.events.ModClientEvents; import runecraft.events.RuneToolEventHandler; import runecraft.events.SpellEventHandler; import runecraft.client.screen.RuneForgeScreen; import runecraft.common.spell.Spell; import runecraft.init.*; import java.util.function.Supplier; @Mod(value = Runecraft.MOD_ID) public class Runecraft { public static final String MOD_ID = "runecraft"; public static final DeferredRegister<Block> BLOCK_REGISTER = DeferredRegister.create(Registries.BLOCK, MOD_ID); public static final DeferredRegister<Item> ITEM_REGISTER = DeferredRegister.create(Registries.ITEM, MOD_ID); public static final DeferredRegister<MenuType<?>> MENU_REGISTER = DeferredRegister.create(Registries.MENU, MOD_ID); public static final DeferredRegister<EntityType<?>> ENTITY_REGISTER = DeferredRegister.create(Registries.ENTITY_TYPE, MOD_ID); public static final DeferredRegister<ArgumentTypeInfo<?, ?>> ARGUMENT_TYPE_REGISTER = DeferredRegister.create(Registries.COMMAND_ARGUMENT_TYPE, MOD_ID); // RUNES REGISTRIES public static final ResourceKey<Registry<Spell>> SPELL = createRegistryKey("spell"); private static <T> ResourceKey<Registry<T>> createRegistryKey(String p_259572_) { return ResourceKey.createRegistryKey(new ResourceLocation(MOD_ID, p_259572_)); } public static final DeferredRegister<Spell> SPELL_REGISTRY = DeferredRegister.create(SPELL, MOD_ID); public static final RegistryBuilder builder = new RegistryBuilder<Spell>(); public static final Supplier<IForgeRegistry<Spell>> SPELL_REGISTRY_SUPPLIER = SPELL_REGISTRY.makeRegistry(()->builder); public static final SpellRecipeRegistry SPELL_RECIPE_REGISTRY = new SpellRecipeRegistry(); public static final Logger LOGGER = LogUtils.getLogger(); public static Runecraft instance; public Runecraft() { instance = this; IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); MinecraftForge.EVENT_BUS.register(new SpellEventHandler()); MinecraftForge.EVENT_BUS.register(new RuneToolEventHandler()); bus.addListener(this::commonSetup); bus.addListener(this::clientSetup); BLOCK_REGISTER.register(bus); ITEM_REGISTER.register(bus); MENU_REGISTER.register(bus); SPELL_REGISTRY.register(bus); ENTITY_REGISTER.register(bus); ARGUMENT_TYPE_REGISTER.register(bus); //TODO Move to AllArgumentTypes Class ARGUMENT_TYPE_REGISTER.register("spell", ()-> ArgumentTypeInfos.registerByClass(SpellArgumentType.class, SingletonArgumentInfo.contextFree(SpellArgumentType::spellArg))); ModBlocks.setup(); ModItems.setup(); ModMenus.setup(); ModSpells.setup(); ModEntityTypes.setup(); } private void commonSetup(final FMLCommonSetupEvent event) { event.enqueueWork(ModPacketHandler::setup); } private void clientSetup(FMLClientSetupEvent event) { event.enqueueWork( // Assume RegistryObject<MenuType<MyMenu>> MY_MENU // Assume MyContainerScreen<MyMenu> which takes in three parameters () -> MenuScreens.register(AllMenuTypes.RUNE_FORGE.get(), RuneForgeScreen::new) ); } }
  4. Currently I'm storing Spells by creating a custom DeferredRegister as outlined by https://forge.gemwire.uk/wiki/Registration: public static final ResourceKey<Registry<Spell>> SPELL = createRegistryKey("spell"); private static <T> ResourceKey<Registry<T>> createRegistryKey(String p_259572_) { return ResourceKey.createRegistryKey(new ResourceLocation(MOD_ID, p_259572_)); } public static final DeferredRegister<Spell> SPELL_REGISTRY = DeferredRegister.create(SPELL, MOD_ID); public static final RegistryBuilder builder = new RegistryBuilder<Spell>(); public static final Supplier<IForgeRegistry<Spell>> SPELL_REGISTRY_SUPPLIER = SPELL_REGISTRY.makeRegistry(()->builder); However, this doesn't add the Register to RegistryManager.ACTIVE. I saw this post: But new RegistryBuilder<>().create() no longer exists. The reason I want to access my Registry through ACTIVE is because I could then use ResourceArgument for my debug command instead of creating a new ArgumentType, and because I want to be able to access my supplier by ResourceKey. Any tips would be much appreciated, tysm.

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.