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

Hey, I made a "pan-flute" and it works. But there is a little problem:

When I press very often, the flute sounds crappy because the sounds overlap...

How can I toggle the "item use"? I mean, that just every second or something like that, a sound can be played.

 

package item;

import handler.SoundHandler;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
import proxy.SoundRegistry;

public class ItemPanFlute extends ItemBase {

public ItemPanFlute () {

	super( "pan_flute" , false );
	this.setCreativeTab( CreativeTabs.tabTools );

}

@Override
public ActionResult < ItemStack > onItemRightClick ( ItemStack itemStack , World world , EntityPlayer player , EnumHand hand ) {

	float rotationPitch = ( ( - ( player.rotationPitch ) ) / 360 );
	float soundPitch = ( float ) ( rotationPitch + 1.125 );

	if ( !player.isSneaking() ) { SoundHandler.playSoundInRadius( player , 25 , SoundRegistry.record_flute , 1 , soundPitch ); }
	else { SoundHandler.playSoundInRadius( player , 25 , SoundRegistry.record_flute , 1 , ( float ) ( soundPitch + 0.25 ) ); } 

	return super.onItemRightClick( itemStack , world , player , hand );

}

}

*Hug*

  • Author

package item;

import handler.SoundHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
import proxy.SoundRegistry;

public class ItemPanFlute extends ItemBase {

public ItemPanFlute () {

	super( "pan_flute" , false );
	this.setCreativeTab( CreativeTabs.tabTools );
	this.setMaxStackSize( 1 );
	this.setMaxDamage( 500 );

}

@Override
public ActionResult < ItemStack > onItemRightClick ( ItemStack itemstack , World world , EntityPlayer player , EnumHand hand ) {

	try {

		if ( itemstack.getTagCompound().hasNoTags() || ( world.getTotalWorldTime() - itemstack.getTagCompound().getLong( "world_time" ) ) >= 20 ) {

			float rotationPitch = ( ( - ( player.rotationPitch ) ) / 360 );
			float soundPitch = ( float ) ( rotationPitch + 1.125 );

			if ( !player.isSneaking() ) { SoundHandler.playSoundInRadius( player , 25 , SoundRegistry.record_flute , 1 , soundPitch ); }
			else { SoundHandler.playSoundInRadius( player , 25 , SoundRegistry.record_flute , 1 , ( float ) ( soundPitch + 0.25 ) ); } 

			itemstack.getTagCompound().setLong( "world_time" , world.getTotalWorldTime() );
			itemstack.damageItem( 1 , player );

		}

	} catch ( Exception ex ) {}

	return super.onItemRightClick( itemstack , world , player , hand );

}

@Override
public void onUpdate ( ItemStack itemstack , World world , Entity entity , int metadata , boolean bool ) {

	if ( itemstack.getTagCompound() == null ) { itemstack.setTagCompound( new NBTTagCompound() ); }

}

}

 

I did what you said and it worked, thank you ;)

Incidentally, I have noticed that the click method is called 2 times per click and

sometimes a "ConcurrentModificationException" gets thrown. And that's because I want

the click method just to call 1 time each click. xP

 

java.util.ConcurrentModificationException
at com.google.common.collect.HashBiMap$Itr.checkForConcurrentModification(HashBiMap.java:339)
at com.google.common.collect.HashBiMap$Itr.hasNext(HashBiMap.java:345)
at net.minecraft.client.audio.SoundManager.updateAllSounds(SoundManager.java:266)
at net.minecraft.client.audio.SoundHandler.update(SoundHandler.java:269)
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1891)
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1114)
at net.minecraft.client.Minecraft.run(Minecraft.java:401)
at net.minecraft.client.main.Main.main(Main.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
at GradleStart.main(GradleStart.java:26)

 

Can you help me there? This would be pretty nice.

 

Danke im Vorraus

Grüße, Lyras ;)

*Hug*

It's called once on the client and once on the server. Only damage the item, change NBT, etc. on the server (when the world is NOT remote), and play sound for the player to hear on the client. If you want others to hear the sound, you can also initiate a sound on the server view World#playSoundEffect or something like that and it will propagate to nearby clients.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

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.