Skip to content

Commit

Permalink
updated to a more conflict-resistant form
Browse files Browse the repository at this point in the history
  • Loading branch information
Tigereye504 committed Dec 16, 2021
1 parent c206e18 commit 6dc1b05
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 2 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G
loader_version=0.12.8

# Mod Properties
mod_version = 0.3.2
mod_version = 0.4.0
maven_group = com.github.tigereye.modify_drops_api
archives_base_name = modify-drops-api

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ public static void register(){
GenerateLootCallbackAddLoot.EVENT.register(Listeners::AddLootSubEventListener);
GenerateLootCallbackModifyLoot.EVENT.register(Listeners::ModifyLootSubEventListener);
GenerateLootCallbackAddUnmodifiableLoot.EVENT.register(Listeners::AddUnmodifiableLootSubEventListener);

//simple test listener, adds a diamond to all loot tables
//GenerateBlockLootCallbackAddLoot.EVENT.register((type, context) -> {
// List<ItemStack> oneDiamondList = new ArrayList<>();
// oneDiamondList.add(new ItemStack(Items.DIAMOND));
// return oneDiamondList;
//});
}

private static List<ItemStack> AddLootSubEventListener(LootContextType type, LootContext context) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,35 @@
package net.tigereye.modifydropsapi.mixin;

import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.context.LootContext;
import net.tigereye.modifydropsapi.ModifyDropsAPI;
import net.tigereye.modifydropsapi.api.*;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

@Mixin(LootTable.class)
public class LootTableGenerateLootMixin {

List<ItemStack> interceptedLoot = new ArrayList<>();
Consumer<ItemStack> interceptedConsumer;

/*
@Overwrite
public void generateLoot(LootContext context, Consumer<ItemStack> lootConsumer) {
List<ItemStack> loot = new ArrayList<>();
((LootTable)(Object)this).generateUnprocessedLoot(context, loot::add);
ModifyDropsAPI.LOGGER.debug("modifyDropsAPI is modifying "+loot.size()+" drops");
ModifyDropsAPI.LOGGER.info("modifyDropsAPI is modifying "+loot.size()+" drops");
loot.addAll(GenerateLootCallbackAddLoot.EVENT.invoker().AddDrops(((LootTable)(Object)this).getType(),context));
loot = GenerateLootCallbackModifyLoot.EVENT.invoker().ModifyDrops(((LootTable)(Object)this).getType(),context, loot);
loot.addAll(GenerateLootCallbackAddUnmodifiableLoot.EVENT.invoker().AddDrops(((LootTable)(Object)this).getType(),context));
Expand All @@ -29,4 +40,27 @@ public void generateLoot(LootContext context, Consumer<ItemStack> lootConsumer)
processedConsumer.accept(stack);
}
}
*/

@ModifyVariable(method = "generateUnprocessedLoot", at = @At("HEAD"), ordinal = 0)
public Consumer<ItemStack> generateUnprocessedLootMixin_InterceptConsumerReplaceWithList(Consumer<ItemStack> lootConsumer){
interceptedLoot.clear();
interceptedConsumer = lootConsumer;
return interceptedLoot::add;
}

@Inject(method = "generateUnprocessedLoot", at = @At("TAIL"))
public void generateUnprocessedLootMixin_ModifyPopulatedListAndFeedConsumer(LootContext context, Consumer<ItemStack> lootConsumer, CallbackInfo ci){
ModifyDropsAPI.LOGGER.info("modifyDropsAPI is modifying "+interceptedLoot.size()+" drops");
interceptedLoot.addAll(GenerateLootCallbackAddLoot.EVENT.invoker().AddDrops(((LootTable)(Object)this).getType(),context));
interceptedLoot = GenerateLootCallbackModifyLoot.EVENT.invoker().ModifyDrops(((LootTable)(Object)this).getType(),context, interceptedLoot);
interceptedLoot.addAll(GenerateLootCallbackAddUnmodifiableLoot.EVENT.invoker().AddDrops(((LootTable)(Object)this).getType(),context));
ModifyDropsAPI.LOGGER.debug(interceptedLoot.size() + " itemStacks returned");
Consumer<ItemStack> processedConsumer = LootTable.processStacks(interceptedConsumer);
for (ItemStack stack:
interceptedLoot) {
processedConsumer.accept(stack);
}
}

}

0 comments on commit 6dc1b05

Please sign in to comment.