Jump to content

[1.8][SOLVED] Custom Crafting Table doesn't remove Items after crafting


Jedispencer21

Recommended Posts

So the title should say most of it but basically I am updating my mod from 1.7.10 to 1.8 and I have ran into a problem that I didn't have in 1.7.10. When I craft an Item in the table, it doesn't remove the Items from the craftMatrix allowing infinite items to be made.

 

Here is the container code:

 

 

/** The crafting matrix inventory (5x5). */

public InventoryCrafting craftMatrix = new InventoryCrafting(this, 5, 5);

public IInventory craftResult = new InventoryCraftResult();

private World worldObj;

private BlockPos pos;

 

public ContainerCraftingTable(InventoryPlayer playerInventory, World world, BlockPos pos)

{

this.worldObj = world;

this.pos = pos;

this.addSlotToContainer(new SlotCrafting(playerInventory.player, this.craftMatrix, this.craftResult, 0, 141, 35));

 

for (int i = 0; i < 5; ++i)

{

for (int k = 0; k < 5; ++k)

{

this.addSlotToContainer(new Slot(this.craftMatrix, k + i * 5, 8 + k * 18, 7 + i * 18));

}

}

 

for (int i = 0; i < 3; ++i)

{

for (int k = 0; k < 9; ++k)

{

this.addSlotToContainer(new Slot(playerInventory, k + i * 9 + 9, 8 + k * 18, 106 + i * 18));

}

}

 

for (int i = 0; i < 9; ++i)

{

this.addSlotToContainer(new Slot(playerInventory, i, 8 + i * 18, 164));

}

 

this.onCraftMatrixChanged(this.craftMatrix);

}

 

/**

* Callback for when the crafting matrix is changed.

*/

public void onCraftMatrixChanged(IInventory iiventory)

{

this.craftResult.setInventorySlotContents(0, CraftingTableManager.getInstance().findMatchingRecipe(this.craftMatrix, this.worldObj));

}

 

/**

* Called when the container is closed.

*/

public void onContainerClosed(EntityPlayer player)

{

super.onContainerClosed(player);

 

if (!this.worldObj.isRemote)

{

for (int i = 0; i < 25; ++i)

{

ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(i);

 

if (itemstack != null)

{

player.dropPlayerItemWithRandomChoice(itemstack, false);

}

}

}

}

 

public boolean canInteractWith(EntityPlayer player)

{

return this.worldObj.getBlockState(this.pos).getBlock() != Blocks_and_Items.crafting_table ? false : player.getDistanceSq((double) this.pos.getX() + 0.5D,

(double) this.pos.getY() + 0.5D, (double) this.pos.getZ() + 0.5D) <= 64.0D;

}

 

/**

* Take a stack from the specified inventory slot.

*/

public ItemStack transferStackInSlot(EntityPlayer player, int slots)

{

ItemStack stack = null;

Slot slot = (Slot) this.inventorySlots.get(slots);

 

if (slot != null && slot.getHasStack())

{

ItemStack stack1 = slot.getStack();

stack = stack1.copy();

 

if (slots == 0)

{

if (!this.mergeItemStack(stack1, 26, 62, true))

{

return null;

}

 

slot.onSlotChange(stack1, stack);

}

else if (slots >= 26 && slots < 53)

{

if (!this.mergeItemStack(stack1, 53, 62, false))

{

return null;

}

}

else if (slots >= 53 && slots < 62)

{

if (!this.mergeItemStack(stack1, 26, 53, false))

{

return null;

}

}

else if (!this.mergeItemStack(stack1, 26, 62, false))

{

return null;

}

 

if (stack1.stackSize == 0)

{

slot.putStack((ItemStack) null);

}

else

{

slot.onSlotChanged();

}

 

if (stack1.stackSize == stack.stackSize)

{

return null;

}

 

slot.onPickupFromSlot(player, stack1);

}

 

return stack;

}

 

/**

* Called to determine if the current slot is valid for the stack merging (double-click) code. The stack passed in

* is null for the initial slot that was double-clicked.

*/

public boolean canMergeSlot(ItemStack stack, Slot slot)

{

return slot.inventory != this.craftResult && super.canMergeSlot(stack, slot);

}

 

 

 

Block code:

 

 

public class BlockCraftingTable extends Block

{

public BlockCraftingTable()

{

super(Material.iron);

this.setHardness(1.0F);

this.setResistance(5.0F);

this.setStepSound(soundTypeMetal);

}

 

public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)

{

if (world.isRemote && !player.isSneaking())

{

return true;

}

else

{

FMLNetworkHandler.openGui(player, Strings.MOD_ID, GuiIDs.guiIDCraftingTable, world, pos.getX(), pos.getY(), pos.getZ());

return true;

}

}

}

 

 

 

Crafting Manager:

 

 

public class CraftingTableManager

{

/** The static instance of this class. */

private static final CraftingTableManager instance = new CraftingTableManager();

/** A list of all the recipes added. */

private final List recipes = Lists.newArrayList();

 

/**

* Returns the static instance of this class

*/

public static CraftingTableManagergetInstance()

{

/** The static instance of this class */

return instance;

}

 

private CraftingTableManager()

{

Collections.sort(this.recipes, new Comparator()

{

public int compare(IRecipe irecipe1, IRecipe irecipe2)

{

return irecipe1 instanceof CraftingTableShapelessRecipes && irecipe2 instanceof CraftingTableShapedRecipes ? 1 : (irecipe2 instanceof

                                CraftingTableShapelessRecipes && irecipe1 instanceof CraftingTableShapedRecipes ? -1 : (irecipe2.getRecipeSize() < irecipe1.getRecipeSize() ? -1 :

                                (irecipe2.getRecipeSize() > irecipe1.getRecipeSize() ? 1 : 0)));

}

public int compare(Object object1, Object object2)

{

return this.compare((IRecipe) object1, (IRecipe) object2);

}

});

}

 

/**

* Adds a shaped recipe to the games recipe list.

*/

public CraftingTableShapedRecipes addRecipe(ItemStack stack, Object... recipeComponents)

{

String s = "";

int i = 0;

int j = 0;

int k = 0;

 

if (recipeComponents instanceof String[])

{

String[] astring = (String[]) ((String[]) recipeComponents[i++]);

 

for (int l = 0; l < astring.length; ++l)

{

String s1 = astring[l];

++k;

j = s1.length();

s = s + s1;

}

}

else

{

while (recipeComponents instanceof String)

{

String s2 = (String) recipeComponents[i++];

++k;

j = s2.length();

s = s + s2;

}

}

 

HashMap hashmap;

 

for (hashmap = Maps.newHashMap(); i < recipeComponents.length; i += 2)

{

Character character = (Character) recipeComponents;

ItemStack stack1 = null;

 

if (recipeComponents[i + 1] instanceof Item)

{

stack1 = new ItemStack((Item) recipeComponents[i + 1]);

}

else if (recipeComponents[i + 1] instanceof Block)

{

stack1 = new ItemStack((Block) recipeComponents[i + 1], 1, 32767);

}

else if (recipeComponents[i + 1] instanceof ItemStack)

{

stack1 = (ItemStack) recipeComponents[i + 1];

}

 

hashmap.put(character, stack1);

}

 

ItemStack[] aitemstack = new ItemStack[j * k];

 

for (int i1 = 0; i1 < j * k; ++i1)

{

char c0 = s.charAt(i1);

 

if (hashmap.containsKey(Character.valueOf(c0)))

{

aitemstack[i1] = ((ItemStack) hashmap.get(Character.valueOf(c0))).copy();

}

else

{

aitemstack[i1] = null;

}

}

 

CraftingTableShapedRecipes shapedrecipes = new CraftingTableShapedRecipes(j, k, aitemstack, stack);

this.recipes.add(shapedrecipes);

return shapedrecipes;

}

 

/**

* Adds a shapeless crafting recipe to the game.

*

* @param recipeComponents An array of ItemStack's Item's and Block's that make up the recipe.

*/

public void addShapelessRecipe(ItemStack stack, Object... recipeComponents)

{

ArrayList arraylist = Lists.newArrayList();

Object[] aobject = recipeComponents;

int i = recipeComponents.length;

 

for (int j = 0; j < i; ++j)

{

Object object1 = aobject[j];

 

if (object1 instanceof ItemStack)

{

arraylist.add(((ItemStack) object1).copy());

}

else if (object1 instanceof Item)

{

arraylist.add(new ItemStack((Item) object1));

}

else

{

if (!(object1 instanceof Block))

{

throw new IllegalArgumentException("Invalid shapeless recipe: unknown type " + object1.getClass().getName() + "!");

}

 

arraylist.add(new ItemStack((Block) object1));

}

}

 

this.recipes.add(new CraftingTableShapelessRecipes(stack, arraylist));

}

 

/**

* Adds an IRecipe to the list of crafting recipes.

*

* @param recipe A recipe that will be added to the recipe list.

*/

public void addRecipe(IRecipe recipe)

{

this.recipes.add(recipe);

}

 

/**

* Retrieves an ItemStack that has multiple recipes for it.

*/

public ItemStack findMatchingRecipe(InventoryCrafting inventoryCrafting, World world)

{

Iterator iterator = this.recipes.iterator();

IRecipe irecipe;

 

do

{

if (!iterator.hasNext())

{

return null;

}

 

irecipe = (IRecipe) iterator.next();

}

while (!irecipe.matches(inventoryCrafting, world));

 

return irecipe.getCraftingResult(inventoryCrafting);

}

 

public ItemStack[] func_180303_b(InventoryCrafting inventoryCrafting, World world)

{

Iterator iterator = this.recipes.iterator();

 

while (iterator.hasNext())

{

IRecipe irecipe = (IRecipe) iterator.next();

 

if (irecipe.matches(inventoryCrafting, world))

{

return irecipe.getRemainingItems(inventoryCrafting);

}

}

 

ItemStack[] aitemstack = new ItemStack[inventoryCrafting.getSizeInventory()];

 

for (int i = 0; i < aitemstack.length; ++i)

{

aitemstack = inventoryCrafting.getStackInSlot(i);

}

 

return aitemstack;

}

 

/**

* Returns the List<> of all recipes

*/

public List getRecipeList()

{

return this.recipes;

}

}

 

 

 

Shaped Recipes:

 

 

public class CraftingTableShapedRecipes implements IRecipe

{

/** How many horizontal slots this recipe is wide. */

public final int recipeWidth;

/** How many vertical slots this recipe uses. */

public final int recipeHeight;

/** Is an array of ItemStack that composes the recipe. */

public final ItemStack[] recipeItems;

/** Is the ItemStack that you get when you craft the recipe. */

private final ItemStack recipeOutput;

private boolean field_92101_f;

 

public CraftingTableShapedRecipes(int width, int height, ItemStack[] items, ItemStack output)

{

this.recipeWidth = width;

this.recipeHeight = height;

this.recipeItems = items;

this.recipeOutput = output;

}

 

public ItemStack getRecipeOutput()

{

return this.recipeOutput;

}

 

public ItemStack[] getRemainingItems(InventoryCrafting inventoryCrafting)

{

ItemStack[] aitemstack = new ItemStack[inventoryCrafting.getSizeInventory()];

 

for (int i = 0; i < aitemstack.length; ++i)

{

ItemStack stack = inventoryCrafting.getStackInSlot(i);

aitemstack = ForgeHooks.getContainerItem(stack);

}

 

return aitemstack;

}

 

/**

* Use to check if a recipe matches current crafting inventory.

*/

public boolean matches(InventoryCrafting inventoryCrafting, World world)

{

for (int i = 0; i <= 5 - this.recipeWidth; ++i)

{

for (int j = 0; j <= 5 - this.recipeHeight; ++j)

{

if (this.checkMatch(inventoryCrafting, i, j, true))

{

return true;

}

 

if (this.checkMatch(inventoryCrafting, i, j, false))

{

return true;

}

}

}

 

return false;

}

 

/**

* Checks if the region of a crafting inventory is a match for the recipe.

*/

private boolean checkMatch(InventoryCrafting inventoryCrafting, int width, int height, boolean b)

{

for (int k = 0; k < 5; ++k)

{

for (int l = 0; l < 5; ++l)

{

int i1 = k - width;

int j1 = l - height;

ItemStack itemstack = null;

 

if (i1 >= 0 && j1 >= 0 && i1 < this.recipeWidth && j1 < this.recipeHeight)

{

if (b)

{

itemstack = this.recipeItems[this.recipeWidth - i1 - 1 + j1 * this.recipeWidth];

}

else

{

itemstack = this.recipeItems[i1 + j1 * this.recipeWidth];

}

}

 

ItemStack itemstack1 = inventoryCrafting.getStackInRowAndColumn(k, l);

 

if (itemstack1 != null || itemstack != null)

{

if (itemstack1 == null && itemstack != null || itemstack1 != null && itemstack == null)

{

return false;

}

 

if (itemstack.getItem() != itemstack1.getItem())

{

return false;

}

 

if (itemstack.getMetadata() != 32767 && itemstack.getMetadata() != itemstack1.getMetadata())

{

return false;

}

}

}

}

 

return true;

}

 

/**

* Returns an Item that is the result of this recipe.

*/

public ItemStack getCraftingResult(InventoryCrafting inventoryCrafting)

{

ItemStack stack = this.getRecipeOutput().copy();

 

if (this.field_92101_f)

{

for (int i = 0; i < inventoryCrafting.getSizeInventory(); ++i)

{

ItemStack stack1 = inventoryCrafting.getStackInSlot(i);

 

if (stack1 != null && stack1.hasTagCompound())

{

stack.setTagCompound((NBTTagCompound) stack1.getTagCompound().copy());

}

}

}

 

return stack;

}

 

/**

* Returns the size of the recipe area.

*/

public int getRecipeSize()

{

return this.recipeWidth * this.recipeHeight;

}

 

public CraftingTableShapedRecipes func_92100_c()

{

this.field_92101_f = true;

return this;

}

}

 

 

 

Shapeless Recipes

 

 

public class CraftingTableShapelessRecipes implements IRecipe

{

/** Is the ItemStack that you get when craft the recipe. */

private final ItemStack recipeOutput;

/** Is a List of ItemStack that composes the recipe. */

public final List recipeItems;

 

public CraftingTableShapelessRecipes(ItemStack output, List inputList)

{

this.recipeOutput = output;

this.recipeItems = inputList;

}

 

public ItemStack getRecipeOutput()

{

return this.recipeOutput;

}

 

public ItemStack[] getRemainingItems(InventoryCrafting inventoryCrafting)

{

ItemStack[] aitemstack = new ItemStack[inventoryCrafting.getSizeInventory()];

 

for (int i = 0; i < aitemstack.length; ++i)

{

ItemStack stack = inventoryCrafting.getStackInSlot(i);

aitemstack = ForgeHooks.getContainerItem(stack);

}

 

return aitemstack;

}

 

/**

* Used to check if a recipe matches current crafting inventory.

*/

public boolean matches(InventoryCrafting inventoryCrafting, World world)

{

ArrayList arraylist = Lists.newArrayList(this.recipeItems);

 

for (int i = 0; i < inventoryCrafting.getHeight(); ++i)

{

for (int j = 0; j < inventoryCrafting.getWidth(); ++j)

{

ItemStack stack = inventoryCrafting.getStackInRowAndColumn(j, i);

 

if (stack != null)

{

boolean flag = false;

Iterator iterator = arraylist.iterator();

 

while (iterator.hasNext())

{

ItemStack stack1 = (ItemStack) iterator.next();

 

if (stack.getItem() == stack1.getItem() && (stack1.getMetadata() == 32767 || stack.getMetadata() == stack1.getMetadata()))

{

flag = true;

arraylist.remove(stack1);

break;

}

}

 

if (!flag)

{

return false;

}

}

}

}

 

return arraylist.isEmpty();

}

 

/**

* Returns an Item that is the result of this recipe

*/

public ItemStack getCraftingResult(InventoryCrafting inventoryCrafting)

{

return this.recipeOutput.copy();

}

 

/**

* Returns the size of the recipe area

*/

public int getRecipeSize()

{

return this.recipeItems.size();

}

}

 

 

Link to comment
Share on other sites

Hi

 

The vanilla CraftingManager has a function to remove the items (in conjunction with SlotCrafting.onPickupFromSlot())

func_180303_b

 

Your crafting manager doesn't appear to have any code which does the same thing.  Are you using a SlotCrafting equivalent in your container? Perhaps responsibility for removing the items has moved during the upgrade from 1.7.10 to 1.8?

 

-TGG

Link to comment
Share on other sites

So I have figured it, in order to fix this you must create your own SlotCrafting and edit the onPickupFromSlot method. You can copy the entire method from vanilla but you have to change this one line of code:

 

ItemStack[] aitemstack = CraftingManager.getInstance().func_180303_b(this.craftMatrix, player.worldObj)

 

Change the CraftingManager.getInstance() to YourCraftingManager.getInstance()

Link to comment
Share on other sites

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...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • i have kinda simillar stuff with mods.toml. every time launching my modpack these logs are typinbg off: - fastpaintings 1.20-1.2.7 |-- apoli 1.20.1-2.9.0.8 \-- calio 1.20.1-1.11.0.5 - playeranimator 1.0.2-rc1+1.20 - puzzleslib 8.1.20 - quad 1.2.5 - ramcompat 0.1.3 - rare_ice 0.0NONE - reignitedhud 1.1.0 - relics 0.6.5.1 - repurposed_structures 7.1.15+1.20.1-forge - resourcefulconfig 2.1.2 - resourcefullib 2.1.25 - rotten_flesh_to_leather 2.0.0 - rrls 4.0.6.1+mc1.20.1-forge - saturn 0.1.3 - sereneseasons 9.0.0.46 - silverbirch 1.1.1 - smoothboot 0.0.4 - snowundertrees 1.4.4 - spelunkery 1.20.1-0.3.5 - strictly_origins 1 - terrablender 3.0.1.7 - terralith 2.5.1 - travelersbackpack 9.1.14 - treechop 0.18.8 - trulytreasures 1.20-3.0.0 - vtweaks 4.0.13.fix1 - walkers 4.5.1 - walljump 1.20.1-1.1.6-forge - wizards_reborn 1.20.1-0.1.4 - yungsapi 1.20-Forge-4.0.5 - yungsbridges 1.20-Forge-4.0.3 - yungsextras 1.20-Forge-4.0.3 - yungsmenutweaks 1.20.1-Forge-1.0.2 [16���.2024 20:42:56.008] [main/INFO] [BadOptimizations/]: Loading config from C:\Users\{COMPUTER_USERNAME}\AppData\Roaming\com.modrinth.theseus\profiles\ExoRodemIII\config\badoptimizations.txt [16���.2024 20:42:56.009] [main/INFO] [BadOptimizations/]: Config version: 3 [16���.2024 20:42:56.010] [main/INFO] [BadOptimizations/]: BadOptimizations config dump: [16���.2024 20:42:56.011] [main/INFO] [BadOptimizations/]: enable_toast_optimizations: true [16���.2024 20:42:56.012] [main/INFO] [BadOptimizations/]: ignore_mod_incompatibilities: false [16���.2024 20:42:56.013] [main/INFO] [BadOptimizations/]: lightmap_time_change_needed_for_update: 80 [16���.2024 20:42:56.013] [main/INFO] [BadOptimizations/]: enable_lightmap_caching: true [16���.2024 20:42:56.013] [main/INFO] [BadOptimizations/]: enable_particle_manager_optimization: true [16���.2024 20:42:56.013] [main/INFO] [BadOptimizations/]: enable_entity_renderer_caching: true [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: log_config: true [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: enable_remove_redundant_fov_calculations: true [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: config_version: 3 [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: enable_sky_angle_caching_in_worldrenderer: true [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: enable_block_entity_renderer_caching: true [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: skycolor_time_change_needed_for_update: 3 [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: enable_entity_flag_caching: true [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: enable_debug_renderer_disable_if_not_needed: true [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: enable_sky_color_caching: true [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: enable_remove_tutorial_if_not_demo: true [16���.2024 20:42:56.014] [main/INFO] [BadOptimizations/]: show_f3_text: true [16���.2024 20:42:57.417] [main/WARN] [mixin/]: Error loading class: dev/emi/emi/screen/EmiScreenManager (java.lang.ClassNotFoundException: dev.emi.emi.screen.EmiScreenManager) [16���.2024 20:42:57.422] [main/WARN] [mixin/]: Error loading class: me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl (java.lang.ClassNotFoundException: me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl) [16���.2024 20:42:58.657] [main/WARN] [mixin/]: Error loading class: vazkii/quark/base/module/ModuleFinder (java.lang.ClassNotFoundException: vazkii.quark.base.module.ModuleFinder) [16���.2024 20:42:58.942] [main/INFO] [fpsreducer/]: bre2el.fpsreducer.mixin.RenderSystemMixin will be applied. [16���.2024 20:42:58.943] [main/INFO] [fpsreducer/]: bre2el.fpsreducer.mixin.WindowMixin will be applied. [16���.2024 20:42:59.109] [main/WARN] [mixin/]: Error loading class: com/illusivesoulworks/colytra/client/ColytraLayer (java.lang.ClassNotFoundException: com.illusivesoulworks.colytra.client.ColytraLayer) [16���.2024 20:42:59.119] [main/WARN] [mixin/]: Error loading class: com/illusivesoulworks/elytraslot/client/ElytraSlotLayer (java.lang.ClassNotFoundException: com.illusivesoulworks.elytraslot.client.ElytraSlotLayer) [16���.2024 20:43:01.569] [main/INFO] [memoryleakfix/]: [MemoryLeakFix] Will be applying 3 memory leak fixes! [16���.2024 20:43:01.569] [main/INFO] [memoryleakfix/]: [MemoryLeakFix] Currently enabled memory leak fixes: [targetEntityLeak, biomeTemperatureLeak, hugeScreenshotLeak] [16���.2024 20:43:02.459] [main/INFO] [MixinExtras|Service/]: Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.3.6). [16���.2024 20:43:03.003] [main/WARN] [mixin/]: Injection warning: LVT in net/minecraft/client/gui/GuiGraphics::m_280497_(Lnet/minecraft/client/gui/Font;Ljava/util/List;IILnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;)V has incompatible changes at opcode 346 in callback relics.mixins.json:GuiGraphicsMixin->@Inject::onTooltipRender(Lnet/minecraft/client/gui/Font;Ljava/util/List;IILnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lnet/minecraftforge/client/event/RenderTooltipEvent$Pre;IIIILorg/joml/Vector2ic;)V. Expected: [Lnet/minecraftforge/client/event/RenderTooltipEvent$Pre;, I, I, I, I, Lorg/joml/Vector2ic;] Found: [Ljava/lang/Object;, I, I, I, I, Lorg/joml/Vector2ic;] Available: [Ljava/lang/Object;, I, I, I, I, Lorg/joml/Vector2ic;, I, I, I, Lnet/minecraft/client/gui/Font;, I, I, Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent;] [16���.2024 20:43:03.735] [main/INFO] [Smooth Boot (Reloaded)/]: Smooth Boot (Reloaded) config initialized [16���.2024 20:43:05.500] [main/WARN] [mixin/]: Static binding violation: PRIVATE @Overwrite method m_172993_ in embeddium.mixins.json:core.render.world.WorldRendererMixin cannot reduce visibiliy of PUBLIC target method, visibility will be upgraded. [16���.2024 20:43:05.500] [main/WARN] [mixin/]: Static binding violation: PRIVATE @Overwrite method m_109501_ in embeddium.mixins.json:core.render.world.WorldRendererMixin cannot reduce visibiliy of PUBLIC target method, visibility will be upgraded. [16���.2024 20:43:05.571] [main/WARN] [mixin/]: @Redirect conflict. Skipping forge-badoptimizations.mixins.json:MixinWorldRenderer->@Redirect::getSkyAngle(Lnet/minecraft/client/multiplayer/ClientLevel;F)F with priority 700, already redirected by citadel.mixins.json:client.LevelRendererMixin->@Redirect::citadel_getTimeOfDay(Lnet/minecraft/client/multiplayer/ClientLevel;F)F with priority 1000   i feel very stupid, but, can someone help me? i would really appreciatte that
    • Hello, I just finished my first mod for MC for 1.19.2, I've used: IntelliJ 2024.1.3 Forge MDK 43.3.13 SDK 17.0.11 (eclipse Temurin) Basically, my mod plays scary music at night time, stopping any music played by the game. For that I needed to access via reflection to a private MusicManager.class attribute (SoundInstance currentMusic), and the management of this is giving me errors (I think). Here's the full stacktrace: ---- Minecraft Crash Report ---- // There are four lights! Time: 2024-06-16 20:29:25 Description: Ticking entity java.lang.NoSuchMethodError: 'net.minecraft.client.Minecraft net.minecraft.client.Minecraft.m_91087_()' at com.miorg.scarysounds.SoundHandler.onWorldTick(SoundHandler.java:64) ~[scarysounds-1.0.0.jar%23188!/:1.0.0] {re:classloading} at com.miorg.scarysounds.__SoundHandler_onWorldTick_PlayerTickEvent.invoke(.dynamic) ~[scarysounds-1.0.0.jar%23188!/:1.0.0] {re:classloading,pl:eventbus:B} at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:73) ~[eventbus-6.0.3.jar%23113!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.3.jar%23113!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.3.jar%23113!/:?] {} at net.minecraftforge.event.ForgeEventFactory.onPlayerPreTick(ForgeEventFactory.java:814) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23189%23197!/:?] {re:classloading} at net.minecraft.world.entity.player.Player.tick(Player.java:216) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.client.player.LocalPlayer.tick(LocalPlayer.java:200) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.multiplayer.ClientLevel.tickNonPassenger(ClientLevel.java:269) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.world.level.Level.guardEntityTick(Level.java:457) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.client.multiplayer.ClientLevel.lambda$tickEntities$4(ClientLevel.java:251) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.world.level.entity.EntityTickList.forEach(EntityTickList.java:54) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading} at net.minecraft.client.multiplayer.ClientLevel.tickEntities(ClientLevel.java:249) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.tick(Minecraft.java:1791) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.runTick(Minecraft.java:1078) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.run(Minecraft.java:700) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.run(Main.java:212) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.main(Main.java:51) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {} at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {} at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {} at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {} at net.minecraftforge.fml.loading.targets.ForgeClientUserdevLaunchHandler.lambda$launchService$0(ForgeClientUserdevLaunchHandler.java:25) ~[fmlloader-1.19.2-43.3.13.jar%23101!/:?] {} at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) [bootstraplauncher-1.1.2.jar:?] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Suspected Mod: ScarySounds (scarysounds), Version: 1.0.0 at TRANSFORMER/[email protected]/com.miorg.scarysounds.SoundHandler.onWorldTick(SoundHandler.java:64) Stacktrace: at com.miorg.scarysounds.SoundHandler.onWorldTick(SoundHandler.java:64) ~[scarysounds-1.0.0.jar%23188!/:1.0.0] {re:classloading} at com.miorg.scarysounds.__SoundHandler_onWorldTick_PlayerTickEvent.invoke(.dynamic) ~[scarysounds-1.0.0.jar%23188!/:1.0.0] {re:classloading,pl:eventbus:B} at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:73) ~[eventbus-6.0.3.jar%23113!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.3.jar%23113!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.3.jar%23113!/:?] {} at net.minecraftforge.event.ForgeEventFactory.onPlayerPreTick(ForgeEventFactory.java:814) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23189%23197!/:?] {re:classloading} at net.minecraft.world.entity.player.Player.tick(Player.java:216) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.client.player.LocalPlayer.tick(LocalPlayer.java:200) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.multiplayer.ClientLevel.tickNonPassenger(ClientLevel.java:269) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.world.level.Level.guardEntityTick(Level.java:457) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.client.multiplayer.ClientLevel.lambda$tickEntities$4(ClientLevel.java:251) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.world.level.entity.EntityTickList.forEach(EntityTickList.java:54) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading} at net.minecraft.client.multiplayer.ClientLevel.tickEntities(ClientLevel.java:249) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} -- Entity being ticked -- Details: Entity Type: minecraft:player (net.minecraft.client.player.LocalPlayer) Entity ID: 227 Entity Name: Dev Entity's Exact location: -55.87, 119.00, -7.99 Entity's Block location: World: (-56,119,-8), Section: (at 8,7,8 in -4,7,-1; chunk contains blocks -64,-64,-16 to -49,319,-1), Region: (-1,-1; contains chunks -32,-32 to -1,-1, blocks -512,-64,-512 to -1,319,-1) Entity's Momentum: 0.00, 0.00, 0.00 Entity's Passengers: [] Entity's Vehicle: null Stacktrace: at net.minecraft.world.level.Level.guardEntityTick(Level.java:457) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.client.multiplayer.ClientLevel.lambda$tickEntities$4(ClientLevel.java:251) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.world.level.entity.EntityTickList.forEach(EntityTickList.java:54) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading} at net.minecraft.client.multiplayer.ClientLevel.tickEntities(ClientLevel.java:249) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.tick(Minecraft.java:1791) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.runTick(Minecraft.java:1078) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.run(Minecraft.java:700) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.run(Main.java:212) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.main(Main.java:51) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {} at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {} at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {} at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {} at net.minecraftforge.fml.loading.targets.ForgeClientUserdevLaunchHandler.lambda$launchService$0(ForgeClientUserdevLaunchHandler.java:25) ~[fmlloader-1.19.2-43.3.13.jar%23101!/:?] {} at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) [bootstraplauncher-1.1.2.jar:?] {} -- Affected level -- Details: All players: 1 total; [LocalPlayer['Dev'/227, l='ClientLevel', x=-55.87, y=119.00, z=-7.99]] Chunk stats: 961, 400 Level dimension: minecraft:overworld Level spawn location: World: (0,106,0), Section: (at 0,10,0 in 0,6,0; chunk contains blocks 0,-64,0 to 15,319,15), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,-64,0 to 511,319,511) Level time: 6100 game time, 14340 day time Server brand: forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.multiplayer.ClientLevel.fillReportDetails(ClientLevel.java:450) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.fillReport(Minecraft.java:2280) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.run(Minecraft.java:717) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.run(Main.java:212) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.main(Main.java:51) ~[forge-1.19.2-43.3.13_mapped_official_1.19.2.jar%23190!/:?] {re:classloading,pl:runtimedistcleaner:A} at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {} at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {} at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {} at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {} at net.minecraftforge.fml.loading.targets.ForgeClientUserdevLaunchHandler.lambda$launchService$0(ForgeClientUserdevLaunchHandler.java:25) ~[fmlloader-1.19.2-43.3.13.jar%23101!/:?] {} at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-10.0.9.jar%23114!/:?] {} at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) [bootstraplauncher-1.1.2.jar:?] {} -- Last reload -- Details: Reload number: 1 Reload reason: initial Finished: Yes Packs: Default, Mod Resources -- System Details -- Details: Minecraft Version: 1.19.2 Minecraft Version ID: 1.19.2 Operating System: Windows 10 (amd64) version 10.0 Java Version: 17.0.11, Eclipse Adoptium Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), Eclipse Adoptium Memory: 1080430488 bytes (1030 MiB) / 2302672896 bytes (2196 MiB) up to 4208984064 bytes (4014 MiB) CPUs: 12 Processor Vendor: GenuineIntel Processor Name: 12th Gen Intel(R) Core(TM) i5-12450H Identifier: Intel64 Family 6 Model 154 Stepping 3 Microarchitecture: unknown Frequency (GHz): 2.50 Number of physical packages: 1 Number of physical CPUs: 8 Number of logical CPUs: 12 Graphics card #0 name: NVIDIA GeForce RTX 3050 Laptop GPU Graphics card #0 vendor: NVIDIA (0x10de) Graphics card #0 VRAM (MB): 4095.00 Graphics card #0 deviceId: 0x25a2 Graphics card #0 versionInfo: DriverVersion=31.0.15.4680 Graphics card #1 name: Intel(R) UHD Graphics Graphics card #1 vendor: Intel Corporation (0x8086) Graphics card #1 VRAM (MB): 128.00 Graphics card #1 deviceId: 0x46a3 Graphics card #1 versionInfo: DriverVersion=31.0.101.5186 Memory slot #0 capacity (MB): 8192.00 Memory slot #0 clockSpeed (GHz): 3.20 Memory slot #0 type: DDR4 Memory slot #1 capacity (MB): 8192.00 Memory slot #1 clockSpeed (GHz): 3.20 Memory slot #1 type: DDR4 Virtual memory max (MB): 19530.51 Virtual memory used (MB): 17390.07 Swap memory total (MB): 3478.36 Swap memory used (MB): 253.88 JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump Launched Version: MOD_DEV Backend library: LWJGL version 3.3.1 build 7 Backend API: Intel(R) UHD Graphics GL version 3.2.0 - Build 31.0.101.5186, Intel Window size: 854x480 GL Caps: Using framebuffer using OpenGL 3.2 GL debug messages: Using VBOs: Yes Is Modded: Definitely; Client brand changed to 'forge'; Server brand changed to 'forge' Type: Integrated Server (map_client.txt) Graphics mode: fancy Resource Packs: Current Language: English (US) CPU: 12x 12th Gen Intel(R) Core(TM) i5-12450H Server Running: true Player Count: 1 / 8; [ServerPlayer['Dev'/227, l='ServerLevel[New World]', x=-55.87, y=119.00, z=-7.99]] Data Packs: vanilla, mod:scarysounds, mod:forge World Generation: Stable ModLauncher: 10.0.9+10.0.9+main.dcd20f30 ModLauncher launch target: forgeclientuserdev ModLauncher naming: mcp ModLauncher services: mixin-0.8.5.jar mixin PLUGINSERVICE eventbus-6.0.3.jar eventbus PLUGINSERVICE fmlloader-1.19.2-43.3.13.jar slf4jfixer PLUGINSERVICE fmlloader-1.19.2-43.3.13.jar object_holder_definalize PLUGINSERVICE fmlloader-1.19.2-43.3.13.jar runtime_enum_extender PLUGINSERVICE fmlloader-1.19.2-43.3.13.jar capability_token_subclass PLUGINSERVICE accesstransformers-8.0.4.jar accesstransformer PLUGINSERVICE fmlloader-1.19.2-43.3.13.jar runtimedistcleaner PLUGINSERVICE modlauncher-10.0.9.jar mixin TRANSFORMATIONSERVICE modlauncher-10.0.9.jar fml TRANSFORMATIONSERVICE FML Language Providers: [email protected] lowcodefml@null javafml@null Mod List: forge-1.19.2-43.3.13_mapped_official_1.19.2.jar |Minecraft |minecraft |1.19.2 |DONE |Manifest: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f scarysounds-1.0.0.jar |ScarySounds |scarysounds |1.0.0 |DONE |Manifest: NOSIGNATURE |Forge |forge |43.3.13 |DONE |Manifest: NOSIGNATURE Crash Report UUID: dc1c47a9-be1f-45b8-b70f-eab49d54148b FML: 43.3 Forge: net.minecraftforge:43.3.13   Here's my code, the most important lines are at the start of the class and the start of onWorldTick(). These lines manage the private attribute (currentMusic) and the exception fires at line 64: MusicManager musicManager = Minecraft.getInstance().getMusicManager(); Anybody knows what is happening????? I've spent 2 days trying to find a solution and I can't get it  Really appreciate your time package com.miorg.scarysounds; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.sounds.SoundInstance; import net.minecraft.client.sounds.MusicManager; import net.minecraft.client.sounds.SoundManager; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.Music; import net.minecraft.sounds.Musics; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; import net.minecraft.util.profiling.jfr.event.WorldLoadFinishedEvent; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraftforge.client.ClientCommandHandler; import net.minecraft.world.level.Level; import net.minecraft.core.BlockPos; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.entity.EntityJoinLevelEvent; import net.minecraftforge.event.level.LevelEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.util.Random; @Mod.EventBusSubscriber(modid = "scarysounds", value = Dist.CLIENT) public class SoundHandler { private static Field currentMusicField; static { try { currentMusicField = MusicManager.class.getDeclaredField("currentMusic"); currentMusicField.setAccessible(true); } catch (NoSuchFieldException e) { e.printStackTrace(); } } private static final Random random = new Random(); static int ticksUntilNextSound = 0; static int ticksRestantes = 0; static int espera; static boolean flag = false; static boolean flagLoad = false; static String soundName; private static final String[] SOUND_NAMES = { "sound1", "sound2", "sound3", "sound4", "sound5", "sound6", "sound7", "sound8", "sound9", "sound10", "sound11", "sound12", "sound13", "sound14", "sound15" }; @SubscribeEvent public static void onWorldLoad(LevelEvent.Load event) { ticksUntilNextSound = getRandomTicks(); flagLoad = true; } @SubscribeEvent public static void onWorldTick(TickEvent.PlayerTickEvent event) throws InterruptedException { if (flagLoad) { try { MusicManager musicManager = Minecraft.getInstance().getMusicManager(); Object currentMusic = currentMusicField.get(musicManager); Level world = (Level) event.player.level; BlockPos playerPos = event.player.blockPosition(); //Coordenadas del jugador if (!world.isClientSide && event.phase == TickEvent.Phase.END) { long dayTime = world.getDayTime() % 24000L; if ((dayTime >= 13000L && dayTime <= 23000L) && !flag) { // De noche if (ticksUntilNextSound > 0) { ticksUntilNextSound--; if (ticksUntilNextSound == 75) Minecraft.getInstance().getMusicManager().stopPlaying(); if (ticksUntilNextSound == 110) { if (currentMusic != null) { event.player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 200, 4, true, true)); event.player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, 200, 10, true, true)); event.player.addEffect(new MobEffectInstance(MobEffects.DARKNESS, 200, 10, true, true)); world.playSound(null, playerPos, ScarySounds.FX.get(), SoundSource.MUSIC, 1.0F, 1.0F); } } System.out.println(ticksUntilNextSound); } else { soundName = SOUND_NAMES[random.nextInt(SOUND_NAMES.length)]; ResourceLocation resourceLocation = new ResourceLocation("scarysounds", soundName); SoundEvent soundEvent = ForgeRegistries.SOUND_EVENTS.getValue(resourceLocation); switch (soundName) { case "sound1": { soundEvent = ScarySounds.SOUND1.get(); espera = 112; break; } case "sound2": { soundEvent = ScarySounds.SOUND2.get(); espera = 164; break; } case "sound3": { soundEvent = ScarySounds.SOUND3.get(); espera = 70; break; } case "sound4": { soundEvent = ScarySounds.SOUND4.get(); espera = 184; break; } case "sound5": { soundEvent = ScarySounds.SOUND5.get(); espera = 135; break; } case "sound6": { soundEvent = ScarySounds.SOUND6.get(); espera = 255; break; } case "sound7": { soundEvent = ScarySounds.SOUND7.get(); espera = 151; break; } case "sound8": { soundEvent = ScarySounds.SOUND8.get(); espera = 107; break; } case "sound9": { soundEvent = ScarySounds.SOUND9.get(); espera = 304; break; } case "sound10": { soundEvent = ScarySounds.SOUND10.get(); espera = 48; break; } case "sound11": { soundEvent = ScarySounds.SOUND11.get(); espera = 181; break; } case "sound12": { soundEvent = ScarySounds.SOUND12.get(); espera = 11; break; } case "sound13": { soundEvent = ScarySounds.SOUND13.get(); espera = 216; break; } case "sound14": { soundEvent = ScarySounds.SOUND14.get(); espera = 52; break; } case "sound15": { soundEvent = ScarySounds.SOUND15.get(); espera = 120; break; } } if (soundEvent != null) { ticksRestantes = espera * 20; world.playSound(null, playerPos, soundEvent, SoundSource.MUSIC, 1.0F, 1.0F); flag = true; } else { System.out.println("SoundEvent es nulo para: " + resourceLocation); } } } else { if (ticksRestantes > 0) { ticksRestantes--; Minecraft.getInstance().getMusicManager().stopPlaying(); System.out.println("Ticks restantes: " + ticksRestantes); } else { flag = false; ticksUntilNextSound = getRandomTicks(); } } } } catch (IllegalAccessException e) { e.printStackTrace(); } } } static int getRandomTicks() { return 500 + random.nextInt(1500); } }  
  • Topics

×
×
  • Create New...

Important Information

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