Tagon

Custom drop MC 1.19.2

Nov 17th, 2022
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.10 KB | None | 0 0
  1. package pl.faxu.cobblestonedrops;
  2.  
  3. import com.google.common.base.Supplier;
  4. import com.google.common.base.Suppliers;
  5. import com.google.common.collect.ImmutableSet;
  6. import com.google.gson.JsonDeserializationContext;
  7. import com.google.gson.JsonObject;
  8. import com.google.gson.JsonSerializationContext;
  9. import com.mojang.logging.LogUtils;
  10. import com.mojang.serialization.Codec;
  11. import com.mojang.serialization.codecs.RecordCodecBuilder;
  12. import it.unimi.dsi.fastutil.objects.ObjectArrayList;
  13. import net.minecraft.core.Registry;
  14. import net.minecraft.resources.ResourceLocation;
  15. import net.minecraft.tags.TagKey;
  16. import net.minecraft.util.GsonHelper;
  17. import net.minecraft.world.item.*;
  18. import net.minecraft.world.level.block.Block;
  19. import net.minecraft.world.level.block.state.BlockState;
  20. import net.minecraft.world.level.storage.loot.LootContext;
  21. import net.minecraft.world.level.storage.loot.parameters.LootContextParam;
  22. import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
  23. import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
  24. import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType;
  25. import net.minecraftforge.common.MinecraftForge;
  26. import net.minecraftforge.common.loot.IGlobalLootModifier;
  27. import net.minecraftforge.common.loot.LootModifier;
  28. import net.minecraftforge.eventbus.api.IEventBus;
  29. import net.minecraftforge.fml.common.Mod;
  30. import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
  31. import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
  32. import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
  33. import net.minecraftforge.registries.DeferredRegister;
  34. import net.minecraftforge.registries.ForgeRegistries;
  35. import net.minecraftforge.registries.RegistryObject;
  36. import org.jetbrains.annotations.NotNull;
  37. import org.slf4j.Logger;
  38.  
  39. import java.util.Set;
  40.  
  41.  
  42. // The value here should match an entry in the META-INF/mods.toml file
  43. @Mod(CobblestoneDrops.MODID)
  44. public class CobblestoneDrops
  45. {
  46.     public static final String MODID = "cobblestonedrops";
  47.  
  48.     public CobblestoneDrops()
  49.     {
  50.         LOGGER.info("[CD_DEBUG]: Intiate modEventBus");
  51.         IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
  52.  
  53.         LOGGER.info("[CD_DEBUG]: Add listener of commonSetup()");
  54.         // Register the commonSetup method for modloading
  55.         modEventBus.addListener(this::commonSetup);
  56.  
  57.         LOGGER.info("[CD_DEBUG]: Register BLOCKS to modEventBus");
  58.         // Register the Deferred Register to the mod event bus so blocks get registered
  59.         BLOCKS.register(modEventBus);
  60.  
  61.         LOGGER.info("[CD_DEBUG]: Register ITEMS to modEventBus");
  62.         // Register the Deferred Register to the mod event bus so items get registered
  63.         ITEMS.register(modEventBus);
  64.  
  65.         LOGGER.info("[CD_DEBUG]: Register LOOT ITEM CONDITIONS to modEventBus");
  66.         LOOT_ITEM_CONDITIONS.register(modEventBus);
  67.        
  68.         LOGGER.info("[CD_DEBUG]: Register GLM to modEventBus");
  69.         GLM.register(modEventBus);
  70.  
  71.         LOGGER.info("[CD_DEBUG]: Register to Forge Event Bus");
  72.         // Register ourselves for server and other game events we are interested in
  73.         MinecraftForge.EVENT_BUS.register(this);
  74.     }
  75.  
  76.     public static final DeferredRegister<LootItemConditionType> LOOT_ITEM_CONDITIONS = DeferredRegister.create(Registry.LOOT_ITEM_REGISTRY, MODID);
  77.     public static final RegistryObject<LootItemConditionType> BLOCK_TAG_LOOT_ITEM = LOOT_ITEM_CONDITIONS.register("blocktag", () -> new LootItemConditionType(new BlockTagLootItemCondition.Serializer()));
  78.     public static final DeferredRegister<Codec<? extends IGlobalLootModifier>> GLM = DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, MODID);
  79.     public static final RegistryObject<Codec<CobblestoneDropsModifier>> SINGLE_ITEM_LOOT_MODIFIER = GLM.register("singleitem", CobblestoneDropsModifier.CODEC);
  80.     public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MODID);
  81.     public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID);
  82.     private static final Logger LOGGER = LogUtils.getLogger();
  83.  
  84.     private void commonSetup(final FMLCommonSetupEvent event)
  85.     {
  86.         // Some common setup code
  87.         LOGGER.info("[CD_DEBUG]: commonSetup");
  88.     }
  89.  
  90.     @EventBusSubscriber(modid = MODID, bus = EventBusSubscriber.Bus.MOD)
  91.     private static class CobblestoneDropsModifier extends LootModifier {
  92.         public static final Supplier<Codec<CobblestoneDropsModifier>> CODEC = Suppliers.memoize(() -> RecordCodecBuilder.create(inst -> codecStart(inst)
  93.                 .and(ForgeRegistries.ITEMS.getCodec().fieldOf("item").forGetter(m -> m.item))
  94.                 .apply(inst, CobblestoneDropsModifier::new)
  95.         ));
  96.  
  97.         private final Item item;
  98.  
  99.         public CobblestoneDropsModifier(LootItemCondition[] conditions, Item item) {
  100.             super(conditions);
  101.             this.item = item;
  102.             LOGGER.info("[CD_DEBUG]: Does it?");
  103.         }
  104.  
  105.         @Override
  106.         public Codec<? extends IGlobalLootModifier> codec() {
  107.             return CODEC.get();
  108.         }
  109.  
  110.         @Override
  111.         protected @NotNull ObjectArrayList<ItemStack> doApply(ObjectArrayList<ItemStack> generatedLoot, LootContext context) {
  112.             LOGGER.info("[CD_DEBUG]: doApply");
  113.             generatedLoot.add(new ItemStack(item, 1));
  114.             return generatedLoot;
  115.         }
  116.     }
  117.  
  118.     public static class BlockTagLootItemCondition implements LootItemCondition {
  119.         final TagKey<Block> blockTag;
  120.  
  121.         BlockTagLootItemCondition(TagKey<Block> blockTag) {
  122.             this.blockTag = blockTag;
  123.         }
  124.  
  125.         public LootItemConditionType getType() {
  126.             return CobblestoneDrops.BLOCK_TAG_LOOT_ITEM.get();
  127.         }
  128.  
  129.         public Set<LootContextParam<?>> getReferencedContextParams() {
  130.             return ImmutableSet.of(LootContextParams.BLOCK_STATE);
  131.         }
  132.  
  133.         public boolean test(LootContext p_81772_) {
  134.             BlockState blockstate = p_81772_.getParamOrNull(LootContextParams.BLOCK_STATE);
  135.             return blockstate != null && blockstate.is(this.blockTag);
  136.         }
  137.  
  138.         public static class Serializer implements net.minecraft.world.level.storage.loot.Serializer<BlockTagLootItemCondition> {
  139.             public void serialize(JsonObject p_81795_, BlockTagLootItemCondition p_81796_, JsonSerializationContext p_81797_) {
  140.                 p_81795_.addProperty("blocktag", p_81796_.blockTag.location().toString());
  141.                 LOGGER.info("[CD_DEBUG]: json addProperty");
  142.             }
  143.  
  144.             public BlockTagLootItemCondition deserialize(JsonObject p_81805_, JsonDeserializationContext p_81806_) {
  145.                 ResourceLocation resourcelocation = new ResourceLocation(GsonHelper.getAsString(p_81805_, "blocktag"));
  146.                 TagKey<Block> blockTag = TagKey.create(Registry.BLOCK_REGISTRY, resourcelocation);
  147.                 LOGGER.info("[CD_DEBUG]: json blockTag");
  148.                 return new BlockTagLootItemCondition(blockTag);
  149.             }
  150.         }
  151.     }
  152. }
  153.  
Add Comment
Please, Sign In to add comment