Ernio Posted January 11, 2014 Posted January 11, 2014 Hello, Seems like I've got another issue. Is there a ForgeSubscribe event that can track player LEFT-click swing? RIGHT_CLICK_AIR, RIGHT_CLICK_BLOCK, LEFT_CLICK_BLOCK WHY THERE IS NO LEFT_CLICK_AIR :C If not (which seems like there is not), would LivingUpdateEvent be good to track if(player.swingItem())? (pseudo)? Any other thoughts? (I need to play sound when player uses swords and shit) Quote 1.7.10 is no longer supported by forge, you are on your own.
Ernio Posted January 11, 2014 Author Posted January 11, 2014 Well, I've been doing some researches and tests. Put up something via PlayerInteractEvent. Checking with: if (player.isSwingInProgress) playSound() Sadly this means that turbo-swing-speed gives you milti-sound effect which we don't want to get, so I used: player.swingProgressInt Value above is totally I-don't-know-what, beacuse it runs from -1, 0, 1, sometimes 3, 4 or even 5; yet I cannot resolve which is called in what situation, my best shot was to test them, and what I got now is if (player.isSwingInProgress && player.swingProgressInt != 0) playSound() Which gives me BEARABLE effect (not spamming so much during multi-click) *If anyone is interested "0" value is when you you are not performing leftclick. Well, this is one way to do this, yet there is still problem: isSwingInProgress is NOT called when you click on AIR, which makes me want to use pain-in-the-ass-ointment. Second: PlayerInteractEvent is being called for every other something-click (right-click and shit), can it be shortened? (I mean only to left-clicks) Cmon ppl, some ideas? Maybe there is a better way of doing something like this? Thanks Quote 1.7.10 is no longer supported by forge, you are on your own.
rolland0 Posted January 12, 2014 Posted January 12, 2014 I actually looked at this a few months ago when I was trying to fix the way attacking was handled. And yeah, it was a giant pain in the ass. These are the methods I created for testing (all of them were in my EventHandler) and pulled out of my Github repo; hopefully something here will be helpful. Note: this is very hacky and almost certainly won't work outside of an integrated server environment. public static EntityPlayer player = null; public static final int MOUSE_LEFT_CLICK = 0; public static final int MOUSE_RIGHT_CLICK = 1; public static final int MOUSE_MIDDLE_CLICK = 2; // @ForgeSubscribe // public void onPlayerInteractEvent(PlayerInteractEvent event) { // if (!event.entityPlayer.worldObj.isRemote) { // if (event.action == Action.LEFT_CLICK_BLOCK // && event.entityPlayer.swingProgressInt == -1) { // System.out.println("Click"); // } else { // System.out.println("Bad swing"); // event.entityPlayer.isSwingInProgress = false; // } // // } // } @ForgeSubscribe public void onMouseClick(MouseEvent event) { // logMousePress(event); if(player == null) { player = Minecraft.getMinecraft().thePlayer; } if(event.button == MOUSE_LEFT_CLICK && event.buttonstate) { if(player.swingProgressInt != 0) { event.setCanceled(true); } } } private void logMousePress(MouseEvent event) { if(event.button != -1) { StringBuilder builder = new StringBuilder(); builder.append("Button: "); builder.append(event.button); builder.append(" ButtonState: "); builder.append(event.buttonstate); builder.append(" Nanoseconds: "); builder.append(event.nanoseconds); builder.append(" X: "); builder.append(event.x); builder.append(" Y: "); builder.append(event.y); builder.append(" Dx: "); builder.append(event.dx); builder.append(" Dy: "); builder.append(event.dy); builder.append(" Dwheel: "); builder.append(event.dwheel); System.out.println(builder); } } Quote
coolAlias Posted January 12, 2014 Posted January 12, 2014 You can intercept all mouse actions using MouseEvent from minecraft.forge.net.client.event. event.button // id of button: 0 left, 1, right, -1 wheel event.buttonstate // true when pressed, false when released event.dwheel // mouse wheel amount event.setResult(Event.Result.DENY) // prevents the click from processing, but button.pressed will still be true event.setCanceled(true) // completely cancels the button press, such that button.pressed is not set to true If you want to see this in action, you can take a look at how I handle user input for my Zelda Sword Skills mod. In the ZSSEventHandler class, search for 'onMouseChanged'. Here's the github link: https://github.com/coolAlias/ZeldaSwordSkills/blob/master/src/zeldaswordskills/handler/ZSSEventHandler.java Quote http://i.imgur.com/NdrFdld.png[/img]
Recommended Posts
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.