Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,11 @@ public class FixesConfig {
@Config.RequiresMcRestart
public static boolean fixSaveFileWrittenToExistingDirectory;

@Config.Comment("Fix a crash in the Superflat world customization screen when a layer's block has no registered ItemBlock")
@Config.DefaultBoolean(true)
@Config.RequiresMcRestart
public static boolean fixFlatWorldLayerMissingItemBlockCrash;

@Config.Comment("Fix a crash caused when a mod tries to send a chat message to a FakePlayer")
@Config.DefaultBoolean(true)
@Config.RequiresMcRestart
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java
Original file line number Diff line number Diff line change
Expand Up @@ -1081,6 +1081,10 @@ public enum Mixins implements IMixins {
.addClientMixins("minecraft.MixinGuiCreateWorld_NotWriteToExistDir")
.setApplyIf(() -> FixesConfig.fixSaveFileWrittenToExistingDirectory)
.setPhase(Phase.EARLY)),
FIX_FLAT_WORLD_LAYER_MISSING_ITEM_BLOCK_CRASH(new MixinBuilder()
.addClientMixins("minecraft.MixinGuiCreateFlatWorld_FixItemCrash")
.setApplyIf(() -> FixesConfig.fixFlatWorldLayerMissingItemBlockCrash)
.setPhase(Phase.EARLY)),
FIX_FAKE_PLAYER_CHAT_CRASH(new MixinBuilder()
.addCommonMixins("forge.MixinFakePlayer")
.setApplyIf(() -> FixesConfig.fixFakePlayerChatCrash)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.mitchej123.hodgepodge.mixins.early.minecraft;

import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.gen.FlatLayerInfo;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;

import com.llamalad7.mixinextras.sugar.Local;

@Mixin(targets = "net.minecraft.client.gui.GuiCreateFlatWorld$Details")
public class MixinGuiCreateFlatWorld_FixItemCrash {

/**
* Setting a layer with no registered ItemBlock produces an NPE. Need to bypass and set name.
*/
@ModifyVariable(method = "drawSlot", at = @At(value = "STORE"), name = "itemstack")
private ItemStack hodgepodge$nullIfMissingItemBlock(ItemStack itemstack) {
return itemstack != null && itemstack.getItem() == null ? null : itemstack;
}

@ModifyVariable(method = "drawSlot", at = @At(value = "STORE"), name = "s")
private String hodgepodge$fixMissingItemBlockLabel(String s,
@Local(name = "flatlayerinfo") FlatLayerInfo flatlayerinfo) {
Block block = flatlayerinfo.func_151536_b();
if (block == Blocks.air || Item.getItemFromBlock(block) != null) {
return s;
}
return block.getLocalizedName();
}
}
Loading