diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/storage/loot/LootDataManagerBridge.java b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/storage/loot/LootDataManagerBridge.java new file mode 100644 index 00000000..71f87a57 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/storage/loot/LootDataManagerBridge.java @@ -0,0 +1,8 @@ +package io.izzel.arclight.common.bridge.core.world.storage.loot; + +import net.minecraft.world.level.storage.loot.LootTable; + +public interface LootDataManagerBridge { + + boolean bridge$isRegistered(LootTable lootTable); +} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/storage/loot/LootDataManagerMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/storage/loot/LootDataManagerMixin.java index 96404bf5..4ff69572 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/storage/loot/LootDataManagerMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/storage/loot/LootDataManagerMixin.java @@ -1,10 +1,12 @@ package io.izzel.arclight.common.mixin.core.world.level.storage.loot; import com.google.common.collect.ImmutableMap; +import io.izzel.arclight.common.bridge.core.world.storage.loot.LootDataManagerBridge; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.storage.loot.LootDataId; import net.minecraft.world.level.storage.loot.LootDataManager; import net.minecraft.world.level.storage.loot.LootDataType; +import net.minecraft.world.level.storage.loot.LootTable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -14,7 +16,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Map; @Mixin(LootDataManager.class) -public class LootDataManagerMixin { +public class LootDataManagerMixin implements LootDataManagerBridge { // @formatter:off @Shadow private Map, ?> elements; @@ -28,4 +30,9 @@ public class LootDataManagerMixin { this.elements.forEach((key, lootTable) -> lootTableToKeyBuilder.put(lootTable, key.location())); this.lootTableToKey = lootTableToKeyBuilder.buildKeepingLast(); } + + @Override + public boolean bridge$isRegistered(LootTable lootTable) { + return this.lootTableToKey.containsKey(lootTable); + } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/storage/loot/LootTableMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/storage/loot/LootTableMixin.java index 69bd4778..cd19bb57 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/storage/loot/LootTableMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/storage/loot/LootTableMixin.java @@ -1,6 +1,8 @@ package io.izzel.arclight.common.mixin.core.world.level.storage.loot; +import io.izzel.arclight.common.bridge.core.world.storage.loot.LootDataManagerBridge; import io.izzel.arclight.common.bridge.core.world.storage.loot.LootTableBridge; +import io.izzel.arclight.common.mod.server.ArclightServer; import io.izzel.arclight.mixin.Eject; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.resources.ResourceLocation; @@ -41,6 +43,9 @@ public abstract class LootTableMixin implements LootTableBridge { if (!context.hasParam(LootContextParams.ORIGIN) && !context.hasParam(LootContextParams.THIS_ENTITY)) { return list; } + if (!((LootDataManagerBridge) ArclightServer.getMinecraftServer().getLootData()).bridge$isRegistered((LootTable) (Object) this)) { + return list; + } LootGenerateEvent event = CraftEventFactory.callLootGenerateEvent(inv, (LootTable) (Object) this, context, list, false); if (event.isCancelled()) { ci.cancel(); @@ -54,11 +59,14 @@ public abstract class LootTableMixin implements LootTableBridge { LootContext context = (new LootContext.Builder(lootparams)).withOptionalRandomSeed(i).create(this.randomSequence); ObjectArrayList objectarraylist = this.getRandomItems(context); RandomSource randomsource = context.getRandom(); - LootGenerateEvent event = CraftEventFactory.callLootGenerateEvent(inv, (LootTable) (Object) this, context, objectarraylist, plugin); - if (event.isCancelled()) { - return; + + if (((LootDataManagerBridge) ArclightServer.getMinecraftServer().getLootData()).bridge$isRegistered((LootTable) (Object) this)) { + LootGenerateEvent event = CraftEventFactory.callLootGenerateEvent(inv, (LootTable) (Object) this, context, objectarraylist, plugin); + if (event.isCancelled()) { + return; + } + objectarraylist = event.getLoot().stream().map(CraftItemStack::asNMSCopy).collect(ObjectArrayList.toList()); } - objectarraylist = event.getLoot().stream().map(CraftItemStack::asNMSCopy).collect(ObjectArrayList.toList()); List list = this.getAvailableSlots(inv, randomsource); this.shuffleAndSplitItems(objectarraylist, list.size(), randomsource); diff --git a/buildSrc/src/main/groovy/io/izzel/arclight/gradle/tasks/UploadFilesTask.groovy b/buildSrc/src/main/groovy/io/izzel/arclight/gradle/tasks/UploadFilesTask.groovy index 014e3392..1e24e451 100644 --- a/buildSrc/src/main/groovy/io/izzel/arclight/gradle/tasks/UploadFilesTask.groovy +++ b/buildSrc/src/main/groovy/io/izzel/arclight/gradle/tasks/UploadFilesTask.groovy @@ -69,10 +69,14 @@ abstract class UploadFilesTask extends DefaultTask { } } link("/arclight/branches/${branch.get()}/versions-snapshot/${version.get()}/${modloader}", [type: 'object', value: sha1]) + link("/arclight/branches/${branch.get()}/loaders/${modloader}/versions-snapshot/${version.get()}", [type: 'object', value: sha1]) link("/arclight/branches/${branch.get()}/latest-snapshot", [type: 'link', value: "/arclight/branches/${branch.get()}/versions-snapshot/${version.get()}", cache_seconds: 3600]) + link("/arclight/branches/${branch.get()}/loaders/${modloader}/latest-snapshot", [type: 'link', value: "/arclight/branches/${branch.get()}/loaders/${modloader}/versions-snapshot/${version.get()}", cache_seconds: 3600]) if (!snapshot.get()) { link("/arclight/branches/${branch.get()}/versions-stable/${version.get()}/${modloader}", [type: 'object', value: sha1]) + link("/arclight/branches/${branch.get()}/loaders/${modloader}/versions-stable/${version.get()}", [type: 'object', value: sha1]) link("/arclight/branches/${branch.get()}/latest-stable", [type: 'link', value: "/arclight/branches/${branch.get()}/versions-stable/${version.get()}", cache_seconds: 86400]) + link("/arclight/branches/${branch.get()}/loaders/${modloader}/latest-stable", [type: 'link', value: "/arclight/branches/${branch.get()}/loaders/${modloader}/versions-stable/${version.get()}", cache_seconds: 86400]) } }