Skip to content

Commit c670bd2

Browse files
committed
- heavy optimisaitions
1 parent ebc4cff commit c670bd2

File tree

15 files changed

+139
-74
lines changed

15 files changed

+139
-74
lines changed

CHANGELOG.md

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
1-
## v2.0.9 (1.21)
2-
- fixed workbench background
3-
- reduced obsidians attackspeed penalty
4-
- increased crying obsidians enchantablity
5-
- buffed copper
6-
- fixed material hover keeping a material even when nolonger hovered
7-
- fixed ui background being rendered twice
8-
- fixed sandstone giving durability instead of decreasing it
9-
- fixing translation field for materials
10-
- added better faking of tools repair and enchantments.
11-
- the Material Helper was also updated so it should work now
1+
## v2.0.10 (1.21)
2+
- fixed crash with Enchancement Mod
3+
- fixed duplicating throwing knifes when multishot
4+
- fixed sword sweeping on neoforge
5+
- strongly improved rendering performance

common/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ dependencies {
7373
//https://modrinth.com/mod/treechop/version/tIdTnzkf
7474

7575
modCompileOnly "maven.modrinth:treechop:${rootProject.fabric_treechop_version}"
76+
modCompileOnly "maven.modrinth:treechop:${rootProject.fabric_treechop_version}"
77+
modImplementation("maven.modrinth:immediatelyfast:1.6.5+1.21.1-fabric")
7678

7779
//modImplementation files('libs/arsenal-local.jar')
7880
//modImplementation files('libs/archery-local.jar')

common/src/main/java/smartin/miapi/client/MiapiClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ public static void init() {
139139

140140
ClientReloadShadersEvent.EVENT.register((resourceFactory, shadersSink) -> {
141141
ModularItemCache.discardCache();
142+
MaterialSpriteManager.clear();
142143
if (Minecraft.getInstance().level != null) {
143144
Minecraft.getInstance().execute(() -> {
144145
Map<ResourceLocation, String> cacheDatapack = new LinkedHashMap<>(ReloadEvents.DATA_PACKS);

common/src/main/java/smartin/miapi/client/gui/crafting/statdisplay/StatListWidget.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,12 @@ public static void onReload() {
8888
addStatDisplay(AttributeSingleDisplay
8989
.builder(Attributes.ATTACK_DAMAGE)
9090
.setTranslationKey("minecraft.damage")
91-
.setDefault(1)
91+
.setDefault(0)
9292
.setMax(13.0).build());
9393
addStatDisplay(AttributeSingleDisplay
9494
.builder(Attributes.ATTACK_SPEED)
9595
.setTranslationKey("minecraft.attack_speed")
96-
.setDefault(4)
96+
.setDefault(0)
9797
.setMax(4.0).build());
9898
addStatDisplay(new DpsStatDisplay());
9999
addStatDisplay(AttributeSingleDisplay
@@ -189,7 +189,7 @@ public static void onReload() {
189189
.setMax(2000)
190190
.setFormat("##")
191191
.setHoverFormat("##.##")
192-
.setCondition((old, current) -> old.isDamageableItem() &&
192+
.setCondition((old, current) -> old.isDamageableItem() ||
193193
current.isDamageableItem())
194194
.setTranslationKey(DurabilityProperty.KEY).build());
195195
addStatDisplay(SinglePropertyStatDisplay

common/src/main/java/smartin/miapi/client/model/BakedMiapiModel.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import net.minecraft.client.Minecraft;
99
import net.minecraft.client.renderer.LightTexture;
1010
import net.minecraft.client.renderer.MultiBufferSource;
11+
import net.minecraft.client.renderer.block.model.BakedQuad;
1112
import net.minecraft.client.renderer.block.model.ItemOverrides;
13+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
1214
import net.minecraft.client.resources.model.BakedModel;
1315
import net.minecraft.core.Direction;
1416
import net.minecraft.core.Holder;
@@ -31,8 +33,11 @@
3133
import smartin.miapi.modules.properties.render.AlphaOverwriteProperty;
3234
import smartin.miapi.modules.properties.render.ColorProperty;
3335
import smartin.miapi.modules.properties.render.EmissivityProperty;
36+
import smartin.miapi.modules.properties.render.colorproviders.ColorProvider;
3437
import smartin.miapi.modules.properties.util.DoubleOperationResolvable;
3538

39+
import java.util.List;
40+
3641
@Environment(EnvType.CLIENT)
3742
public class BakedMiapiModel implements MiapiModel {
3843
ModuleInstance instance;
@@ -95,12 +100,20 @@ public void render(PoseStack matrices, ItemStack stack, ItemDisplayContext trans
95100

96101
//render normally
97102
try {
103+
VertexConsumer consumer = null;
98104
for (Direction dir : Direction.values()) {
99-
currentModel.getQuads(null, dir, RandomSource.create()).forEach(quad -> {
100-
VertexConsumer vertexConsumer = modelHolder.colorProvider().getConsumer(vertexConsumers, quad.getSprite(), stack, instance, transformationMode);
101-
102-
vertexConsumer.putBulkData(matrices.last(), quad, colors[0], colors[1], colors[2], alpha, light, overlay);
103-
});
105+
List<BakedQuad> quads = currentModel.getQuads(null, dir, RandomSource.create());
106+
if (consumer == null && !quads.isEmpty()) {
107+
Minecraft.getInstance().getProfiler().push("BakedModel - get VC");
108+
TextureAtlasSprite first = quads.getFirst().getSprite();
109+
ColorProvider provider = modelHolder.colorProvider();
110+
consumer = provider.getConsumer(vertexConsumers, first, stack, instance, transformationMode);
111+
Minecraft.getInstance().getProfiler().pop();
112+
Minecraft.getInstance().getProfiler().push("BakedModel - quads");
113+
}
114+
for (BakedQuad quad : currentModel.getQuads(null, dir, RandomSource.create())) {
115+
consumer.putBulkData(matrices.last(), quad, colors[0], colors[1], colors[2], alpha, light, overlay);
116+
}
104117
}
105118
} catch (RuntimeException e) {
106119
Miapi.LOGGER.error("rendering error in module " + instance.moduleID + " " + MaterialProperty.getMaterial(instance), e);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package smartin.miapi.client.model;
2+
3+
import com.mojang.blaze3d.vertex.VertexConsumer;
4+
import dev.architectury.platform.Platform;
5+
6+
public class VcOptimisations {
7+
public static boolean IMMEDIATLY_FAST_LOADED = Platform.isModLoaded("immediatly_fast");
8+
9+
public static VertexConsumer optimize(VertexConsumer consumer) {
10+
if(IMMEDIATLY_FAST_LOADED){
11+
}
12+
return consumer;
13+
}
14+
}

common/src/main/java/smartin/miapi/item/FakeItemManager.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,17 @@ public static void getItemCall(ItemStack itemStack, Item item) {
2626
}
2727

2828
public static ItemStack getDefaultInstance(Item item) {
29-
return SHORT_CACHE.get().getOrDefault(item, LONG_CACHE.getOrDefault(item, new ItemStack(item))).copy();
29+
ItemStack itemStack = SHORT_CACHE.get().getOrDefault(item, LONG_CACHE.getOrDefault(item, new ItemStack(item))).copy();
30+
//Miapi.LOGGER.info("faking " + itemStack.getDisplayName().getString());
31+
return itemStack;
3032
}
3133

3234
@Nullable
3335
public static ItemStack getLastInstance(Item item) {
34-
return SHORT_CACHE.get().getOrDefault(item, LONG_CACHE.get(item));
36+
ItemStack itemStack = SHORT_CACHE.get().getOrDefault(item, LONG_CACHE.get(item));
37+
if(itemStack!=null){
38+
//Miapi.LOGGER.info("faking " + itemStack.getDisplayName().getString());
39+
}
40+
return itemStack;
3541
}
3642
}

common/src/main/java/smartin/miapi/item/modular/items/ModularToolMaterial.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.minecraft.world.item.crafting.Ingredient;
1010
import net.minecraft.world.level.block.Block;
1111
import org.lwjgl.system.NonnullDefault;
12+
import smartin.miapi.item.modular.VisualModularItem;
1213
import smartin.miapi.modules.properties.DurabilityProperty;
1314
import smartin.miapi.modules.properties.RepairPriority;
1415
import smartin.miapi.modules.properties.attributes.AttributeUtil;
@@ -52,6 +53,9 @@ public Ingredient getRepairIngredient() {
5253
}
5354

5455
public static Tier forItemStack(ItemStack itemStack) {
56+
if (itemStack == null || itemStack.isEmpty() || itemStack.getItem() == null || VisualModularItem.isVisualModularItem(itemStack)) {
57+
return new ModularToolMaterial();
58+
}
5559
AtomicReference<TagKey<Block>> getIncorrectBlocksForDrops = new AtomicReference<>(BlockTags.INCORRECT_FOR_WOODEN_TOOL);
5660
double maxSpeed = MiningLevelProperty.property.getData(itemStack).map(data -> {
5761
double max = 0;

common/src/main/java/smartin/miapi/item/modular/items/bows/ModularCrossbow.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
import net.minecraft.world.entity.EquipmentSlot;
1616
import net.minecraft.world.entity.LivingEntity;
1717
import net.minecraft.world.entity.player.Player;
18+
import net.minecraft.world.entity.projectile.AbstractArrow;
1819
import net.minecraft.world.entity.projectile.Projectile;
1920
import net.minecraft.world.item.*;
2021
import net.minecraft.world.item.component.ChargedProjectiles;
2122
import net.minecraft.world.item.enchantment.EnchantmentHelper;
2223
import net.minecraft.world.level.Level;
24+
import org.jetbrains.annotations.Nullable;
2325
import org.lwjgl.system.NonnullDefault;
2426
import smartin.miapi.Miapi;
2527
import smartin.miapi.attributes.AttributeRegistry;
@@ -126,14 +128,21 @@ public int getEnchantmentValue() {
126128
protected Projectile createProjectile(Level level, LivingEntity shooter, ItemStack weapon, ItemStack ammo, boolean isCrit) {
127129
if (IsCrossbowShootAble.canCrossbowShoot(ammo) && ammo.getItem() instanceof ProjectileItem projectileItem) {
128130
Projectile projectile = projectileItem.asProjectile(level, shooter.getEyePosition(), ammo, shooter.getDirection());
129-
if(projectile instanceof ItemProjectileEntity projectileEntity){
131+
if (projectile instanceof ItemProjectileEntity projectileEntity) {
130132
projectileEntity.setCritArrow(isCrit);
131133
}
132134
return projectile;
133135
}
134136
return super.createProjectile(level, shooter, weapon, ammo, isCrit);
135137
}
136138

139+
protected void shootProjectile(LivingEntity shooter, Projectile projectile, int index, float velocity, float inaccuracy, float angle, @Nullable LivingEntity target) {
140+
if(index!=0 && projectile instanceof ItemProjectileEntity entity){
141+
entity.pickup = AbstractArrow.Pickup.CREATIVE_ONLY;
142+
}
143+
super.shootProjectile(shooter, projectile, index, velocity, inaccuracy, angle, target);
144+
}
145+
137146
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand usedHand) {
138147
ItemStack crossbow = player.getItemInHand(usedHand);
139148
ChargedProjectiles chargedProjectiles = crossbow.get(DataComponents.CHARGED_PROJECTILES);

common/src/main/java/smartin/miapi/material/CodecMaterial.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.mojang.serialization.codecs.RecordCodecBuilder;
1212
import net.fabricmc.api.EnvType;
1313
import net.fabricmc.api.Environment;
14+
import net.minecraft.client.Minecraft;
1415
import net.minecraft.client.gui.GuiGraphics;
1516
import net.minecraft.core.registries.BuiltInRegistries;
1617
import net.minecraft.network.chat.Component;
@@ -439,9 +440,8 @@ public int getColor(ModuleInstance context) {
439440
@Environment(EnvType.CLIENT)
440441
@Override
441442
public MaterialRenderController getRenderController(ModuleInstance context, ItemDisplayContext mode) {
442-
if (context.contextStack != null &&
443-
ColorProperty.hasColor(context.contextStack, context) &&
444-
dyeAblePalette != null) {
443+
if (context.contextStack != null && dyeAblePalette != null &&
444+
ColorProperty.hasColor(context.contextStack, context)) {
445445
return dyeAblePalette;
446446
}
447447
if (palette == null) {

common/src/main/java/smartin/miapi/material/palette/SpriteColorer.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package smartin.miapi.material.palette;
22

3+
import com.mojang.blaze3d.platform.NativeImage;
4+
import com.mojang.blaze3d.vertex.VertexConsumer;
35
import net.fabricmc.api.EnvType;
46
import net.fabricmc.api.Environment;
57
import net.minecraft.client.renderer.MultiBufferSource;
@@ -13,10 +15,9 @@
1315
import net.minecraft.world.item.ItemStack;
1416
import smartin.miapi.client.atlas.MaterialSpriteManager;
1517
import smartin.miapi.client.renderer.RescaledVertexConsumer;
16-
import smartin.miapi.modules.ModuleInstance;
1718
import smartin.miapi.material.base.Material;
18-
import com.mojang.blaze3d.platform.NativeImage;
19-
import com.mojang.blaze3d.vertex.VertexConsumer;
19+
import smartin.miapi.modules.ModuleInstance;
20+
2021
import java.util.Map;
2122
import java.util.WeakHashMap;
2223
import java.util.function.Consumer;
@@ -69,12 +70,8 @@ public VertexConsumer getVertexConsumer(MultiBufferSource vertexConsumers, Textu
6970
ResourceLocation replaceId = MaterialSpriteManager.getMaterialSprite(originalSprite, material, this);
7071
RenderType atlasRenderLayer = RenderType.entityTranslucentCull(replaceId);
7172
VertexConsumer atlasConsumer = ItemRenderer.getFoilBufferDirect(vertexConsumers, atlasRenderLayer, true, false);
72-
return getVertexConsumer(atlasConsumer, originalSprite);
73-
}
74-
75-
public static RescaledVertexConsumer getVertexConsumer(VertexConsumer vertexConsumer, TextureAtlasSprite sprite) {
76-
RescaledVertexConsumer rescaled = lookupMap.computeIfAbsent(sprite, (s) -> new RescaledVertexConsumer(vertexConsumer, sprite));
77-
rescaled.delegate = vertexConsumer;
73+
RescaledVertexConsumer rescaled = lookupMap.computeIfAbsent(originalSprite, (s) -> new RescaledVertexConsumer(atlasConsumer, originalSprite));
74+
rescaled.delegate = atlasConsumer;
7875
return rescaled;
7976
}
8077

common/src/main/java/smartin/miapi/modules/MiapiPermissions.java

Lines changed: 53 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,31 @@
11
package smartin.miapi.modules;
22

3+
import net.minecraft.world.entity.player.Player;
34
import smartin.miapi.Miapi;
45
import smartin.miapi.config.MiapiConfig;
56

67
import java.net.URI;
78
import java.net.http.HttpClient;
89
import java.net.http.HttpRequest;
910
import java.net.http.HttpResponse;
10-
import java.util.ArrayList;
11-
import java.util.List;
12-
import java.util.UUID;
13-
import java.util.WeakHashMap;
14-
import net.minecraft.world.entity.player.Player;
11+
import java.util.*;
12+
import java.util.concurrent.ConcurrentHashMap;
1513

1614
public class MiapiPermissions {
1715
static HttpClient httpClient = HttpClient.newHttpClient();
18-
static WeakHashMap<Player, List<String>> playerPerms = new WeakHashMap<>();
16+
static Map<UUID, List<String>> playerPerms = new ConcurrentHashMap<>();
17+
static Set<UUID> loadingPerms = Collections.newSetFromMap(new ConcurrentHashMap<>());
1918

2019
public static boolean hasPerm(Player player, String perm) {
2120
if (MiapiConfig.getServerConfig().other.developmentMode) {
2221
return true;
2322
}
24-
if(perm.equals(player.getUUID().toString())){
25-
return true;
26-
}
27-
try {
28-
List<String> perms = MiapiPermissions.getPerms(player);
29-
return perms.contains(perm) || perms.contains("broken");
30-
} catch (Exception e) {
23+
if (perm.equals(player.getUUID().toString())) {
3124
return true;
3225
}
26+
27+
List<String> perms = getPerms(player);
28+
return perms.contains(perm) || perms.contains("broken");
3329
}
3430

3531
public static boolean hasPerm(Player player, List<String> perms) {
@@ -42,29 +38,53 @@ public static boolean hasPerm(Player player, List<String> perms) {
4238
}
4339

4440
public static List<String> getPerms(Player player) {
45-
if (playerPerms.containsKey(player)) {
46-
return playerPerms.get(player);
41+
UUID uuid = player.getUUID();
42+
if (playerPerms.containsKey(uuid)) {
43+
return playerPerms.get(uuid);
4744
}
48-
List<String> perms = getPerms(player.getUUID());
49-
perms.add("user");
50-
playerPerms.put(player, perms);
51-
return perms;
52-
}
5345

54-
public static List<String> getPerms(UUID playerUUID) {
55-
HttpRequest.Builder builder = HttpRequest.newBuilder(URI.create("http://trulymodular.dedyn.io:3000/perms/" + playerUUID.toString()));
56-
builder.GET();
57-
URI uri = URI.create("http://trulymodular.dedyn.io:3000/perms/" + playerUUID);
58-
builder.uri(uri);
59-
HttpRequest request = builder.build();
60-
try {
61-
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
62-
PermissionJson perms = Miapi.gson.fromJson(response.body(), PermissionJson.class);
63-
return perms.permissions;
64-
} catch (Exception suppressed) {
65-
Miapi.LOGGER.warn("Couldnt retrieve Miapi Permissions");
66-
return new ArrayList<>(List.of("broken"));
46+
// Temporary permission until fetched
47+
List<String> defaultPerms = new ArrayList<>(List.of("user"));
48+
playerPerms.put(uuid, defaultPerms);
49+
50+
if (!loadingPerms.contains(uuid)) {
51+
loadingPerms.add(uuid);
52+
fetchPermissionsAsync(uuid);
6753
}
54+
55+
return defaultPerms;
56+
}
57+
58+
private static void fetchPermissionsAsync(UUID playerUUID) {
59+
HttpRequest request = HttpRequest.newBuilder()
60+
.uri(URI.create("http://trulymodular.dedyn.io:3000/perms/" + playerUUID))
61+
.GET()
62+
.build();
63+
64+
httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString())
65+
.thenApply(HttpResponse::body)
66+
.thenAccept(responseBody -> {
67+
try {
68+
PermissionJson perms = Miapi.gson.fromJson(responseBody, PermissionJson.class);
69+
if (perms != null && perms.permissions != null) {
70+
perms.permissions.add("user");
71+
playerPerms.put(playerUUID, perms.permissions);
72+
} else {
73+
playerPerms.put(playerUUID, new ArrayList<>(List.of("broken", "user")));
74+
}
75+
} catch (Exception e) {
76+
Miapi.LOGGER.warn("Failed to parse Miapi Permissions for UUID " + playerUUID, e);
77+
playerPerms.put(playerUUID, new ArrayList<>(List.of("broken", "user")));
78+
} finally {
79+
loadingPerms.remove(playerUUID);
80+
}
81+
})
82+
.exceptionally(e -> {
83+
Miapi.LOGGER.warn("Could not retrieve Miapi Permissions for UUID " + playerUUID, e);
84+
playerPerms.put(playerUUID, new ArrayList<>(List.of("broken", "user")));
85+
loadingPerms.remove(playerUUID);
86+
return null;
87+
});
6888
}
6989

7090
private static class PermissionJson {

0 commit comments

Comments
 (0)