mirror of
https://github.com/GeyserMC/Rainbow.git
synced 2025-12-19 14:59:16 +00:00
Fix some stuff
This commit is contained in:
@@ -8,3 +8,7 @@ dependencies {
|
||||
implementation(project(path = ":rainbow", configuration = "namedElements"))
|
||||
include(project(":rainbow"))
|
||||
}
|
||||
|
||||
loom {
|
||||
accessWidenerPath = file("src/main/resources/rainbow-datagen.accesswidener")
|
||||
}
|
||||
|
||||
@@ -81,6 +81,7 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
|
||||
@Override
|
||||
public <T> CompletableFuture<?> saveJson(Codec<T> codec, T object, Path path) {
|
||||
ResourceLocation location = ResourceLocation.withDefaultNamespace(path.toString());
|
||||
System.out.println("saving bedrock " + location);
|
||||
return DataProvider.saveStable(output, registries, codec, object, provider.json(location));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,31 +1,26 @@
|
||||
package org.geysermc.rainbow.datagen.mixin;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import net.minecraft.client.data.models.ModelProvider;
|
||||
import net.minecraft.data.CachedOutput;
|
||||
import net.minecraft.data.DataProvider;
|
||||
import org.geysermc.rainbow.datagen.RainbowModelProvider;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Mixin(ModelProvider.class)
|
||||
public abstract class ModelProviderMixin implements DataProvider {
|
||||
|
||||
@WrapOperation(method = "run", at = @At(value = "NEW", target = "Lnet/minecraft/client/data/models/ModelProvider$ItemInfoCollector;"))
|
||||
public Object setItemInfosInRainbowModelProvider(Operation<?> original) {
|
||||
Object itemInfoCollector = original.call();
|
||||
@Inject(method = "run", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/data/models/BlockModelGenerators;run()V"))
|
||||
public void setItemInfosInRainbowModelProvider(CachedOutput output, CallbackInfoReturnable<CompletableFuture<?>> callbackInfoReturnable,
|
||||
@Local ModelProvider.ItemInfoCollector itemInfoCollector, @Local ModelProvider.SimpleModelCollector simpleModelCollector) {
|
||||
if ((Object) this instanceof RainbowModelProvider rainbowModelProvider) {
|
||||
rainbowModelProvider.setItemInfosMap(((ItemInfoCollectorAccessor) itemInfoCollector).getItemInfos());
|
||||
}
|
||||
return itemInfoCollector;
|
||||
}
|
||||
|
||||
@WrapOperation(method = "run", at = @At(value = "NEW", target = "Lnet/minecraft/client/data/models/ModelProvider$SimpleModelCollector;"))
|
||||
public Object setModelsInRainbowModelProvider(Operation<?> original) {
|
||||
Object simpleModelCollector = original.call();
|
||||
if ((Object) this instanceof RainbowModelProvider rainbowModelProvider) {
|
||||
rainbowModelProvider.setModels(((SimpleModelCollectorAccessor) simpleModelCollector).getModels());
|
||||
}
|
||||
return simpleModelCollector;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,10 @@
|
||||
},
|
||||
"license": "MIT",
|
||||
"environment": "client",
|
||||
"mixins": [],
|
||||
"mixins": [
|
||||
"rainbow-datagen.mixins.json"
|
||||
],
|
||||
"accessWidener": "rainbow-datagen.accesswidener",
|
||||
"depends": {
|
||||
"fabricloader": ">=${loader_version}",
|
||||
"fabric-api": "*",
|
||||
|
||||
3
datagen/src/main/resources/rainbow-datagen.accesswidener
Normal file
3
datagen/src/main/resources/rainbow-datagen.accesswidener
Normal file
@@ -0,0 +1,3 @@
|
||||
accessWidener v2 named
|
||||
accessible class net/minecraft/client/data/models/ModelProvider$ItemInfoCollector
|
||||
accessible class net/minecraft/client/data/models/ModelProvider$SimpleModelCollector
|
||||
@@ -24,7 +24,7 @@ public record GeyserRangeDispatchPredicate(Property property, float threshold, f
|
||||
|
||||
@Override
|
||||
public Type type() {
|
||||
return null;
|
||||
return Type.RANGE_DISPATCH;
|
||||
}
|
||||
|
||||
public interface Property {
|
||||
|
||||
@@ -277,7 +277,7 @@ public class BedrockItemMapper {
|
||||
String safeIdentifier = base.textureName();
|
||||
String bone = "bone";
|
||||
ResourceLocation geometryTexture = texture;
|
||||
Optional<BedrockGeometryContext> bedrockGeometry = customModel.map(model -> GeometryMapper.mapGeometry(safeIdentifier, bone, model, geometryTexture));
|
||||
Optional<BedrockGeometryContext> bedrockGeometry = customModel.flatMap(model -> GeometryMapper.mapGeometry(safeIdentifier, bone, model, geometryTexture));
|
||||
Optional<BedrockAnimationContext> bedrockAnimation = customModel.map(model -> AnimationMapper.mapAnimation(safeIdentifier, bone, model.getTopTransforms()));
|
||||
|
||||
boolean exportTexture = true;
|
||||
|
||||
@@ -5,6 +5,7 @@ import net.minecraft.client.renderer.block.model.BlockElementFace;
|
||||
import net.minecraft.client.renderer.block.model.BlockElementRotation;
|
||||
import net.minecraft.client.renderer.block.model.SimpleUnbakedGeometry;
|
||||
import net.minecraft.client.resources.model.ResolvedModel;
|
||||
import net.minecraft.client.resources.model.UnbakedGeometry;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.geysermc.rainbow.pack.geometry.BedrockGeometry;
|
||||
@@ -13,11 +14,17 @@ import org.joml.Vector3f;
|
||||
import org.joml.Vector3fc;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public class GeometryMapper {
|
||||
private static final Vector3fc CENTRE_OFFSET = new Vector3f(8.0F, 0.0F, 8.0F);
|
||||
|
||||
public static BedrockGeometryContext mapGeometry(String identifier, String boneName, ResolvedModel model, ResourceLocation texture) {
|
||||
public static Optional<BedrockGeometryContext> mapGeometry(String identifier, String boneName, ResolvedModel model, ResourceLocation texture) {
|
||||
UnbakedGeometry top = model.getTopGeometry();
|
||||
if (top == UnbakedGeometry.EMPTY) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
BedrockGeometry.Builder builder = BedrockGeometry.builder(identifier);
|
||||
// Blockbench seems to always use these values TODO that's wrong
|
||||
builder.withVisibleBoundsWidth(4.0F);
|
||||
@@ -33,7 +40,7 @@ public class GeometryMapper {
|
||||
Vector3f min = new Vector3f(Float.MAX_VALUE);
|
||||
Vector3f max = new Vector3f(Float.MIN_VALUE);
|
||||
|
||||
SimpleUnbakedGeometry geometry = (SimpleUnbakedGeometry) model.getTopGeometry();
|
||||
SimpleUnbakedGeometry geometry = (SimpleUnbakedGeometry) top;
|
||||
for (BlockElement element : geometry.elements()) {
|
||||
// TODO the origin here is wrong, some models seem to be mirrored weirdly in blockbench
|
||||
BedrockGeometry.Cube cube = mapBlockElement(element).build();
|
||||
@@ -48,7 +55,7 @@ public class GeometryMapper {
|
||||
|
||||
// Bind to the bone of the current item slot
|
||||
bone.withBinding("q.item_slot_to_bone_name(context.item_slot)");
|
||||
return new BedrockGeometryContext(builder.withBone(bone).build(), texture);
|
||||
return Optional.of(new BedrockGeometryContext(builder.withBone(bone).build(), texture));
|
||||
}
|
||||
|
||||
private static BedrockGeometry.Cube.Builder mapBlockElement(BlockElement element) {
|
||||
|
||||
Reference in New Issue
Block a user