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.

Featured Replies

Posted

Hello,

coming from 1.7.2, and 1.12.2 I figured the "old" way of getting game type does no longer work. It took a while and a bit of searching to find an old 2019 thread, were @diesieben07 is giving instructions, that did not work out of the box, but finally did with a bit of fiddling. This is the code block in my event handler:

	    @SubscribeEvent
    public static void onBlockBreak(BlockEvent.BreakEvent event) {
	        //Entity playerRef = event.getPlayer();
        @SuppressWarnings("resource")
        GameType gameType = Minecraft.getInstance().playerController.getCurrentGameType();
        System.out.println(gameType);
    }  

It does work, but I'm concerned about the warning suppression Eclipse forced on me to fix the logic. If anyone has some input share if there is a different way, or can confirm that my way is valid as well, I'd appreciate it.

  • Author
1 hour ago, diesieben07 said:
  • The warning is eclipse being stupid.
  • You are reaching across logical sides. You have to use ServerPlayerEntity#gameMode and then PlayerInteractionManager#getGameModeForPlayer to get the game mode.

Sorry, I'm out of practice. It's hard for me to comprehend what you're saying. With "reaching across logical sides" you mean I'm utilizing server and client in one sentence?

Also, why gameMode? What's the difference to gameType?

I was actually referring to this thread, were you gave that example...

For the main client player: Minecraft#playerController.getCurrentGameType()

...to get the client side gameType. I want the client side.

4 minutes ago, Cratthorax said:

Sorry, I'm out of practice. It's hard for me to comprehend what you're saying. With "reaching across logical sides" you mean I'm utilizing server and client in one sentence?

Minecraft#getInstance -> is client side
and the BlockEvent$BreakEvent is only executed on the server

 

6 minutes ago, Cratthorax said:

Also, why gameMode? What's the difference to gameType?

GameType = GameMode

the player's game mode is saved in the PlayerInteractionManager.
if you need your gamemode of the player do something like this:
Note: this is only on server side, so you need to check if the Player you get, an instance of ServerPlayerEntity is

player.gameMode.getGameModeForPlayer();

 

  • Author

Better?

	    @SubscribeEvent
    public static void onBlockBreak(BlockEvent.BreakEvent event) {
        
        PlayerEntity playerRef = event.getPlayer();        
        ServerPlayerEntity playerMain = (ServerPlayerEntity) playerRef;
        GameType gameMode = playerMain.interactionManager.getGameType();
	        //@SuppressWarnings("resource")
        //GameType gameType = Minecraft.getInstance().playerController.getCurrentGameType();
        ItemStack heldItems = event.getPlayer().getHeldItemMainhand();
        Item toolRef = heldItems.getItem();        
        if(!gameMode.isCreative()) {

            
        }
    } 

Edited by Cratthorax

4 hours ago, dawer said:

Hey, what do you mean by a server side event ?

it means that the event fires on the server, not on the client...
here's a resource to understand what the server and client are (and how single player also has this client/server distinction): https://forge.gemwire.uk/wiki/Sides

Guest
This topic is now closed to further replies.

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.