49 lines
1.9 KiB
Java
49 lines
1.9 KiB
Java
package space.eptaproject.vmodextras.mixins;
|
|
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.util.CrudeIncrementalIntIdentityHashBiMap;
|
|
import net.minecraft.world.level.block.Block;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import net.minecraftforge.registries.ForgeRegistries;
|
|
import net.spaceeye.valkyrien_ship_schematics.containers.v1.BlockPaletteHashMapV1;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.Mutable;
|
|
import org.spongepowered.asm.mixin.Shadow;
|
|
import org.spongepowered.asm.mixin.Unique;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|
import space.eptaproject.vmodextras.IValidator;
|
|
import space.eptaproject.vmodextras.Validator;
|
|
|
|
@Mixin(BlockPaletteHashMapV1.class)
|
|
public class BlockPaletteHashMapV1Mixin {
|
|
@Unique
|
|
public final IValidator validator = new Validator();
|
|
|
|
@Shadow
|
|
private @Mutable CrudeIncrementalIntIdentityHashBiMap statePaletteMap;
|
|
|
|
@Inject(method = "fromId", at = @At("RETURN"), remap = false, cancellable = true)
|
|
private void vmodaddon$fromId(int id, CallbackInfoReturnable<BlockState> cir) {
|
|
BlockState blockState = (BlockState)this.statePaletteMap.byId(id);
|
|
if (blockState == null || blockState.isAir()) {
|
|
return;
|
|
}
|
|
|
|
Block block = blockState.getBlock();
|
|
|
|
ResourceLocation location = ForgeRegistries.BLOCKS.getKey(block);
|
|
CallbackInfoReturnable<BlockState> info = new CallbackInfoReturnable<>("blockstate-validator", true);
|
|
try {
|
|
validator.valid(block, location, info);
|
|
} catch (Exception e) {
|
|
Validator.LOGGER.error("Error validating: {}", location, e);
|
|
}
|
|
if (info.isCancelled()) {
|
|
cir.setReturnValue(info.getReturnValue());
|
|
cir.cancel();
|
|
}
|
|
}
|
|
}
|