fix:修复 Components not bound yet问题
This commit is contained in:
parent
4d2b856553
commit
cc1a4153e0
|
|
@ -34,6 +34,7 @@ import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.properties.Property;
|
import net.minecraft.world.level.block.state.properties.Property;
|
||||||
|
import tschipp.carryon.Constants;
|
||||||
import tschipp.carryon.common.scripting.Matchables.NBTCondition;
|
import tschipp.carryon.common.scripting.Matchables.NBTCondition;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
@ -42,22 +43,40 @@ import java.util.Map;
|
||||||
public class ModelOverride {
|
public class ModelOverride {
|
||||||
private BlockResult parsedBlock;
|
private BlockResult parsedBlock;
|
||||||
private Either<ItemStack, BlockState> renderObject;
|
private Either<ItemStack, BlockState> renderObject;
|
||||||
|
private Either<ItemInput, BlockResult> parsedRHS; // 保存原始数据
|
||||||
|
private boolean initialized = false;
|
||||||
|
|
||||||
|
|
||||||
private ModelOverride(String raw, BlockResult parsedBlock, Type type, Either<ItemInput, BlockResult> parsedRHS)
|
private ModelOverride(String raw, BlockResult parsedBlock, Type type, Either<ItemInput, BlockResult> parsedRHS)
|
||||||
{
|
{
|
||||||
this.parsedBlock = parsedBlock;
|
this.parsedBlock = parsedBlock;
|
||||||
|
this.parsedRHS = parsedRHS;
|
||||||
|
// 延迟创建renderObject
|
||||||
|
this.renderObject = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 延迟初始化方法
|
||||||
|
private void ensureInitialized() {
|
||||||
|
if (initialized) return;
|
||||||
|
|
||||||
parsedRHS.ifLeft(res -> {
|
parsedRHS.ifLeft(res -> {
|
||||||
ItemStack stack = new ItemStack(res.item());
|
try {
|
||||||
if(res.components() != null)
|
ItemStack stack = new ItemStack(res.item());
|
||||||
stack.applyComponents(res.components());
|
if(res.components() != null)
|
||||||
this.renderObject = Either.left(stack);
|
stack.applyComponents(res.components());
|
||||||
|
this.renderObject = Either.left(stack);
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
this.renderObject = Either.left(ItemStack.EMPTY);
|
||||||
|
Constants.LOG.warn("Delayed init failed for item: {}", res.item().getRegisteredName());
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
parsedRHS.ifRight(res -> {
|
parsedRHS.ifRight(res -> {
|
||||||
BlockState state = res.blockState();
|
BlockState state = res.blockState();
|
||||||
this.renderObject = Either.right(state);
|
this.renderObject = Either.right(state);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DataResult<ModelOverride> of(String str, HolderLookup.Provider provider)
|
public static DataResult<ModelOverride> of(String str, HolderLookup.Provider provider)
|
||||||
|
|
@ -114,6 +133,7 @@ public class ModelOverride {
|
||||||
|
|
||||||
public Either<ItemStack, BlockState> getRenderObject()
|
public Either<ItemStack, BlockState> getRenderObject()
|
||||||
{
|
{
|
||||||
|
ensureInitialized();
|
||||||
return this.renderObject;
|
return this.renderObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ package tschipp.carryon.config;
|
||||||
//Many Thanks to ThatGravyBoat for this template!
|
//Many Thanks to ThatGravyBoat for this template!
|
||||||
|
|
||||||
import net.minecraft.core.HolderLookup;
|
import net.minecraft.core.HolderLookup;
|
||||||
|
import net.neoforged.api.distmarker.Dist;
|
||||||
import tschipp.carryon.client.modeloverride.ModelOverrideHandler;
|
import tschipp.carryon.client.modeloverride.ModelOverrideHandler;
|
||||||
import tschipp.carryon.common.config.ListHandler;
|
import tschipp.carryon.common.config.ListHandler;
|
||||||
import tschipp.carryon.common.pickupcondition.PickupConditionHandler;
|
import tschipp.carryon.common.pickupcondition.PickupConditionHandler;
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ import net.minecraft.world.level.ServerLevelAccessor;
|
||||||
import net.neoforged.bus.api.EventPriority;
|
import net.neoforged.bus.api.EventPriority;
|
||||||
import net.neoforged.bus.api.SubscribeEvent;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.neoforged.fml.common.EventBusSubscriber;
|
import net.neoforged.fml.common.EventBusSubscriber;
|
||||||
|
import net.neoforged.fml.loading.FMLEnvironment;
|
||||||
import net.neoforged.neoforge.common.NeoForge;
|
import net.neoforged.neoforge.common.NeoForge;
|
||||||
import net.neoforged.neoforge.common.util.BlockSnapshot;
|
import net.neoforged.neoforge.common.util.BlockSnapshot;
|
||||||
import net.neoforged.neoforge.event.AddServerReloadListenersEvent;
|
import net.neoforged.neoforge.event.AddServerReloadListenersEvent;
|
||||||
|
|
|
||||||
|
|
@ -116,8 +116,18 @@ publishing {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
repositories {
|
repositories {
|
||||||
|
maven {
|
||||||
|
name = 'local'
|
||||||
|
url = layout.buildDirectory.dir("repo")
|
||||||
|
}
|
||||||
maven {
|
maven {
|
||||||
url System.getenv('local_maven_url')
|
url System.getenv('local_maven_url')
|
||||||
|
name = 'LTDNexus'
|
||||||
|
url = 'https://nexus.bot.leisuretimedock.top/repository/maven-releases/'
|
||||||
|
credentials {
|
||||||
|
username = System.getenv('LTDNexusUsername') ?: ''
|
||||||
|
password = System.getenv('LTDNexusPassword') ?: ''
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -19,7 +19,7 @@ mod_dev_version=2.0.141
|
||||||
# Fabric
|
# Fabric
|
||||||
fabric_version=0.148.0+26.1.2
|
fabric_version=0.148.0+26.1.2
|
||||||
fabric_loader_version=0.18.4
|
fabric_loader_version=0.18.4
|
||||||
loom_version=1.16-SNAPSHOT
|
loom_version=1.15.5
|
||||||
|
|
||||||
# Neoforge
|
# Neoforge
|
||||||
neoforge_version=26.1.2.43-beta
|
neoforge_version=26.1.2.43-beta
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user