parent
03401a43b1
commit
43cafef3d4
@ -16,6 +16,8 @@ public interface MaterialBridge {
|
|||||||
|
|
||||||
void bridge$setupBlock(ResourceLocation key, Block block, MaterialPropertySpec spec);
|
void bridge$setupBlock(ResourceLocation key, Block block, MaterialPropertySpec spec);
|
||||||
|
|
||||||
|
void bridge$setupVanillaBlock(MaterialPropertySpec spec);
|
||||||
|
|
||||||
void bridge$setupItem(ResourceLocation key, Item item, MaterialPropertySpec spec);
|
void bridge$setupItem(ResourceLocation key, Item item, MaterialPropertySpec spec);
|
||||||
|
|
||||||
void bridge$setBlock();
|
void bridge$setBlock();
|
||||||
@ -34,4 +36,6 @@ public interface MaterialBridge {
|
|||||||
Function<CraftBlock, BlockState> bridge$blockStateFactory();
|
Function<CraftBlock, BlockState> bridge$blockStateFactory();
|
||||||
|
|
||||||
void bridge$setBlockStateFactory(Function<CraftBlock, BlockState> func);
|
void bridge$setBlockStateFactory(Function<CraftBlock, BlockState> func);
|
||||||
|
|
||||||
|
boolean bridge$shouldApplyStateFactory();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package io.izzel.arclight.common.mixin.bukkit;
|
|||||||
|
|
||||||
import io.izzel.arclight.common.bridge.bukkit.MaterialBridge;
|
import io.izzel.arclight.common.bridge.bukkit.MaterialBridge;
|
||||||
import io.izzel.arclight.common.mod.util.ResourceLocationUtil;
|
import io.izzel.arclight.common.mod.util.ResourceLocationUtil;
|
||||||
import io.izzel.arclight.i18n.conf.MaterialPropertySpec;
|
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -27,7 +26,7 @@ public abstract class CraftBlockMixin {
|
|||||||
@Inject(method = "getState", cancellable = true, at = @At("HEAD"))
|
@Inject(method = "getState", cancellable = true, at = @At("HEAD"))
|
||||||
private void arclight$getState(CallbackInfoReturnable<BlockState> cir) {
|
private void arclight$getState(CallbackInfoReturnable<BlockState> cir) {
|
||||||
MaterialBridge bridge = (MaterialBridge) (Object) getType();
|
MaterialBridge bridge = (MaterialBridge) (Object) getType();
|
||||||
if (bridge.bridge$getType() != MaterialPropertySpec.MaterialType.VANILLA) {
|
if (bridge.bridge$shouldApplyStateFactory()) {
|
||||||
cir.setReturnValue(bridge.bridge$blockStateFactory().apply((CraftBlock) (Object) this));
|
cir.setReturnValue(bridge.bridge$blockStateFactory().apply((CraftBlock) (Object) this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -256,6 +256,14 @@ public abstract class MaterialMixin implements MaterialBridge {
|
|||||||
arclight$setupCommon(key, block, block.asItem());
|
arclight$setupCommon(key, block, block.asItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void bridge$setupVanillaBlock(MaterialPropertySpec spec) {
|
||||||
|
if (spec != MaterialPropertySpec.EMPTY) {
|
||||||
|
this.arclight$spec = spec.clone();
|
||||||
|
this.setupBlockStateFunc();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bridge$setupItem(ResourceLocation key, Item item, MaterialPropertySpec spec) {
|
public void bridge$setupItem(ResourceLocation key, Item item, MaterialPropertySpec spec) {
|
||||||
this.arclight$spec = spec.clone();
|
this.arclight$spec = spec.clone();
|
||||||
@ -264,6 +272,12 @@ public abstract class MaterialMixin implements MaterialBridge {
|
|||||||
arclight$setupCommon(key, null, item);
|
arclight$setupCommon(key, null, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean bridge$shouldApplyStateFactory() {
|
||||||
|
return this.arclight$type != MaterialPropertySpec.MaterialType.VANILLA ||
|
||||||
|
(this.arclight$spec != null && this.arclight$spec.blockStateClass != null);
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private void arclight$setupCommon(ResourceLocation key, Block block, Item item) {
|
private void arclight$setupCommon(ResourceLocation key, Block block, Item item) {
|
||||||
this.key = CraftNamespacedKey.fromMinecraft(key);
|
this.key = CraftNamespacedKey.fromMinecraft(key);
|
||||||
@ -338,7 +352,7 @@ public abstract class MaterialMixin implements MaterialBridge {
|
|||||||
|
|
||||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||||
private void setupBlockStateFunc() {
|
private void setupBlockStateFunc() {
|
||||||
if (arclight$spec.blockStateClass != null) {
|
if (arclight$spec.blockStateClass != null && !arclight$spec.blockStateClass.equalsIgnoreCase("auto")) {
|
||||||
try {
|
try {
|
||||||
Class<?> cl = Class.forName(arclight$spec.blockStateClass);
|
Class<?> cl = Class.forName(arclight$spec.blockStateClass);
|
||||||
if (!CraftBlockState.class.isAssignableFrom(cl)) {
|
if (!CraftBlockState.class.isAssignableFrom(cl)) {
|
||||||
|
|||||||
@ -222,6 +222,8 @@ public class BukkitRegistry {
|
|||||||
blocks++;
|
blocks++;
|
||||||
ArclightMod.LOGGER.debug("Registered {} as block {}", location, material);
|
ArclightMod.LOGGER.debug("Registered {} as block {}", location, material);
|
||||||
list.add(material);
|
list.add(material);
|
||||||
|
} else {
|
||||||
|
((MaterialBridge) (Object) material).bridge$setupVanillaBlock(matSpec(location));
|
||||||
}
|
}
|
||||||
BLOCK_MATERIAL.put(block, material);
|
BLOCK_MATERIAL.put(block, material);
|
||||||
MATERIAL_BLOCK.put(material, block);
|
MATERIAL_BLOCK.put(material, block);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user