aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/shcm/shsupercm/fabric/citresewn/pack
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/shcm/shsupercm/fabric/citresewn/pack')
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CIT.java2
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CITEnchantment.java39
2 files changed, 36 insertions, 5 deletions
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CIT.java b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CIT.java
index db29fdd..7b6acde 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CIT.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CIT.java
@@ -252,7 +252,7 @@ public abstract class CIT {
}
public boolean test(ItemStack stack, Hand hand, World world, LivingEntity entity, boolean ignoreItemType) {
- if (!ignoreItemType && !items.contains(stack.getItem()))
+ if (!ignoreItemType && !items.isEmpty() && !items.contains(stack.getItem()))
return false;
if (!damageAny && stack.getItem().isDamageable()) {
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CITEnchantment.java b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CITEnchantment.java
index cd0b604..3c063db 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CITEnchantment.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CITEnchantment.java
@@ -2,8 +2,13 @@ package shcm.shsupercm.fabric.citresewn.pack.cits;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.*;
+import net.minecraft.entity.LivingEntity;
+import net.minecraft.item.ItemStack;
import net.minecraft.resource.ResourceType;
import net.minecraft.util.Identifier;
+import net.minecraft.world.World;
+import shcm.shsupercm.fabric.citresewn.ActiveCITs;
+import shcm.shsupercm.fabric.citresewn.CITResewn;
import shcm.shsupercm.fabric.citresewn.ex.CITParseException;
import shcm.shsupercm.fabric.citresewn.mixin.citenchantment.BufferBuilderStorageAccessor;
import shcm.shsupercm.fabric.citresewn.mixin.citenchantment.RenderPhaseAccessor;
@@ -11,11 +16,15 @@ import shcm.shsupercm.fabric.citresewn.pack.CITPack;
import java.util.*;
import java.util.function.Consumer;
+import java.util.function.Supplier;
public class CITEnchantment extends CIT {
+ public static List<CITEnchantment> appliedContext = null;
+
public final Identifier textureIdentifier;
public final float speed, rotation, duration;
public final int layer;
+ public final boolean useGlint;
public final Blend blend;
public final Map<GlintRenderLayer, RenderLayer> renderLayers = new EnumMap<>(GlintRenderLayer.class);
@@ -27,15 +36,21 @@ public class CITEnchantment extends CIT {
if (textureIdentifier == null)
throw new Exception("Cannot resolve texture");
- layer = Integer.parseInt(properties.getProperty("layer", "0"));
-
- blend = Blend.valueOf(properties.getProperty("blend", "add").toUpperCase(Locale.ENGLISH));
-
speed = Float.parseFloat(properties.getProperty("speed", "0"));
rotation = Float.parseFloat(properties.getProperty("rotation", "0"));
duration = Float.max(0f, Float.parseFloat(properties.getProperty("duration", "0")));
+
+ layer = Integer.parseInt(properties.getProperty("layer", "0"));
+
+ useGlint = switch (properties.getProperty("useGlint", "false").toLowerCase(Locale.ENGLISH)) {
+ case "true" -> true;
+ case "false" -> false;
+ default -> throw new Exception("useGlint is not a boolean");
+ };
+
+ blend = Blend.valueOf(properties.getProperty("blend", "add").toUpperCase(Locale.ENGLISH));
} catch (Exception e) {
throw new CITParseException(pack.resourcePack, identifier, (e.getClass() == Exception.class ? "" : e.getClass().getSimpleName() + ": ") + e.getMessage());
}
@@ -52,6 +67,7 @@ public class CITEnchantment extends CIT {
@Override
public void dispose() {
+ appliedContext = null;
for (RenderLayer renderLayer : renderLayers.values())
((BufferBuilderStorageAccessor) MinecraftClient.getInstance().getBufferBuilders()).entityBuilders().remove(renderLayer);
}
@@ -144,5 +160,20 @@ public class CITEnchantment extends CIT {
256,
layer.build(false));
}
+
+ public VertexConsumer tryApply(VertexConsumer base, VertexConsumerProvider provider) {
+ if (appliedContext == null)
+ return null;
+
+ VertexConsumer applied = VertexConsumers.union(appliedContext.stream()
+ .map(cit -> provider.getBuffer(cit.renderLayers.get(GlintRenderLayer.this)))
+ .toArray(VertexConsumer[]::new));
+
+ return base == null ? applied : VertexConsumers.union(applied, base);
+ }
+ }
+
+ public interface Cached {
+ List<CITEnchantment> citresewn_getCachedCITEnchantment(Supplier<List<CITEnchantment>> realtime);
}
} \ No newline at end of file