Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pl.faxu.cobblestonedrops;
- import com.google.common.base.Supplier;
- import com.google.common.base.Suppliers;
- import com.google.common.collect.ImmutableSet;
- import com.google.gson.JsonDeserializationContext;
- import com.google.gson.JsonObject;
- import com.google.gson.JsonSerializationContext;
- import com.mojang.logging.LogUtils;
- import com.mojang.serialization.Codec;
- import com.mojang.serialization.codecs.RecordCodecBuilder;
- import it.unimi.dsi.fastutil.objects.ObjectArrayList;
- import net.minecraft.core.Registry;
- import net.minecraft.resources.ResourceLocation;
- import net.minecraft.tags.TagKey;
- import net.minecraft.util.GsonHelper;
- import net.minecraft.world.item.*;
- import net.minecraft.world.level.block.Block;
- import net.minecraft.world.level.block.state.BlockState;
- import net.minecraft.world.level.storage.loot.LootContext;
- import net.minecraft.world.level.storage.loot.parameters.LootContextParam;
- import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
- import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
- import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType;
- import net.minecraftforge.common.MinecraftForge;
- import net.minecraftforge.common.loot.IGlobalLootModifier;
- import net.minecraftforge.common.loot.LootModifier;
- import net.minecraftforge.eventbus.api.IEventBus;
- import net.minecraftforge.fml.common.Mod;
- import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
- import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
- import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
- import net.minecraftforge.registries.DeferredRegister;
- import net.minecraftforge.registries.ForgeRegistries;
- import net.minecraftforge.registries.RegistryObject;
- import org.jetbrains.annotations.NotNull;
- import org.slf4j.Logger;
- import java.util.Set;
- // The value here should match an entry in the META-INF/mods.toml file
- @Mod(CobblestoneDrops.MODID)
- public class CobblestoneDrops
- {
- public static final String MODID = "cobblestonedrops";
- public CobblestoneDrops()
- {
- LOGGER.info("[CD_DEBUG]: Intiate modEventBus");
- IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
- LOGGER.info("[CD_DEBUG]: Add listener of commonSetup()");
- // Register the commonSetup method for modloading
- modEventBus.addListener(this::commonSetup);
- LOGGER.info("[CD_DEBUG]: Register BLOCKS to modEventBus");
- // Register the Deferred Register to the mod event bus so blocks get registered
- BLOCKS.register(modEventBus);
- LOGGER.info("[CD_DEBUG]: Register ITEMS to modEventBus");
- // Register the Deferred Register to the mod event bus so items get registered
- ITEMS.register(modEventBus);
- LOGGER.info("[CD_DEBUG]: Register LOOT ITEM CONDITIONS to modEventBus");
- LOOT_ITEM_CONDITIONS.register(modEventBus);
- LOGGER.info("[CD_DEBUG]: Register GLM to modEventBus");
- GLM.register(modEventBus);
- LOGGER.info("[CD_DEBUG]: Register to Forge Event Bus");
- // Register ourselves for server and other game events we are interested in
- MinecraftForge.EVENT_BUS.register(this);
- }
- public static final DeferredRegister<LootItemConditionType> LOOT_ITEM_CONDITIONS = DeferredRegister.create(Registry.LOOT_ITEM_REGISTRY, MODID);
- public static final RegistryObject<LootItemConditionType> BLOCK_TAG_LOOT_ITEM = LOOT_ITEM_CONDITIONS.register("blocktag", () -> new LootItemConditionType(new BlockTagLootItemCondition.Serializer()));
- public static final DeferredRegister<Codec<? extends IGlobalLootModifier>> GLM = DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, MODID);
- public static final RegistryObject<Codec<CobblestoneDropsModifier>> SINGLE_ITEM_LOOT_MODIFIER = GLM.register("singleitem", CobblestoneDropsModifier.CODEC);
- public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MODID);
- public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID);
- private static final Logger LOGGER = LogUtils.getLogger();
- private void commonSetup(final FMLCommonSetupEvent event)
- {
- // Some common setup code
- LOGGER.info("[CD_DEBUG]: commonSetup");
- }
- @EventBusSubscriber(modid = MODID, bus = EventBusSubscriber.Bus.MOD)
- private static class CobblestoneDropsModifier extends LootModifier {
- public static final Supplier<Codec<CobblestoneDropsModifier>> CODEC = Suppliers.memoize(() -> RecordCodecBuilder.create(inst -> codecStart(inst)
- .and(ForgeRegistries.ITEMS.getCodec().fieldOf("item").forGetter(m -> m.item))
- .apply(inst, CobblestoneDropsModifier::new)
- ));
- private final Item item;
- public CobblestoneDropsModifier(LootItemCondition[] conditions, Item item) {
- super(conditions);
- this.item = item;
- LOGGER.info("[CD_DEBUG]: Does it?");
- }
- @Override
- public Codec<? extends IGlobalLootModifier> codec() {
- return CODEC.get();
- }
- @Override
- protected @NotNull ObjectArrayList<ItemStack> doApply(ObjectArrayList<ItemStack> generatedLoot, LootContext context) {
- LOGGER.info("[CD_DEBUG]: doApply");
- generatedLoot.add(new ItemStack(item, 1));
- return generatedLoot;
- }
- }
- public static class BlockTagLootItemCondition implements LootItemCondition {
- final TagKey<Block> blockTag;
- BlockTagLootItemCondition(TagKey<Block> blockTag) {
- this.blockTag = blockTag;
- }
- public LootItemConditionType getType() {
- return CobblestoneDrops.BLOCK_TAG_LOOT_ITEM.get();
- }
- public Set<LootContextParam<?>> getReferencedContextParams() {
- return ImmutableSet.of(LootContextParams.BLOCK_STATE);
- }
- public boolean test(LootContext p_81772_) {
- BlockState blockstate = p_81772_.getParamOrNull(LootContextParams.BLOCK_STATE);
- return blockstate != null && blockstate.is(this.blockTag);
- }
- public static class Serializer implements net.minecraft.world.level.storage.loot.Serializer<BlockTagLootItemCondition> {
- public void serialize(JsonObject p_81795_, BlockTagLootItemCondition p_81796_, JsonSerializationContext p_81797_) {
- p_81795_.addProperty("blocktag", p_81796_.blockTag.location().toString());
- LOGGER.info("[CD_DEBUG]: json addProperty");
- }
- public BlockTagLootItemCondition deserialize(JsonObject p_81805_, JsonDeserializationContext p_81806_) {
- ResourceLocation resourcelocation = new ResourceLocation(GsonHelper.getAsString(p_81805_, "blocktag"));
- TagKey<Block> blockTag = TagKey.create(Registry.BLOCK_REGISTRY, resourcelocation);
- LOGGER.info("[CD_DEBUG]: json blockTag");
- return new BlockTagLootItemCondition(blockTag);
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment