Skip to content

Commit

Permalink
fix #3633
Browse files Browse the repository at this point in the history
Co-authored-by: TheBv <thebv939@gmail.com>
  • Loading branch information
SiverDX authored and TheBv committed Dec 26, 2023
1 parent 5a9af8b commit e0e7d72
Show file tree
Hide file tree
Showing 8 changed files with 119 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"values": [
"iceandfire:dragonsteel_lightning_sword",
"iceandfire:dragonbone_sword_lightning"
]
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"type": "iceandfire:gorgon_temple",
"biomes": "#iceandfire:has_structure/mausoleum",
"biomes": "#iceandfire:has_structure/gorgon_temple",
"max_distance_from_center": 16,
"project_start_to_heightmap": "WORLD_SURFACE_WG",
"size": 2,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.github.alexthe666.iceandfire.IceAndFire;
import com.github.alexthe666.iceandfire.datagen.tags.BannerPatternTagGenerator;
import com.github.alexthe666.iceandfire.datagen.tags.IafBlockTags;
import com.github.alexthe666.iceandfire.datagen.tags.IafItemTags;
import com.github.alexthe666.iceandfire.datagen.tags.POITagGenerator;
import net.minecraft.DetectedVersion;
import net.minecraft.core.HolderLookup;
Expand All @@ -11,6 +13,7 @@
import net.minecraft.network.chat.Component;
import net.minecraft.server.packs.PackType;
import net.minecraft.server.packs.metadata.pack.PackMetadataSection;
import net.minecraftforge.common.data.BlockTagsProvider;
import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.data.event.GatherDataEvent;
Expand Down Expand Up @@ -43,6 +46,9 @@ public static void gatherData(GatherDataEvent event) {
Arrays.stream(PackType.values()).collect(Collectors.toMap(Function.identity(), DetectedVersion.BUILT_IN::getPackVersion)))));
generator.addProvider(event.includeServer(), new IafBiomeTagGenerator(output, lookupProvider, helper));
generator.addProvider(event.includeClient(), new AtlasGenerator(output, helper));
BlockTagsProvider blocktags = new IafBlockTags(output, provider, helper);
generator.addProvider(event.includeServer(), blocktags);
generator.addProvider(event.includeServer(), new IafItemTags(output, provider, blocktags.contentsGetter(), helper));

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.github.alexthe666.iceandfire.datagen.tags;

import com.github.alexthe666.iceandfire.IceAndFire;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraftforge.common.data.BlockTagsProvider;
import net.minecraftforge.common.data.ExistingFileHelper;

import java.util.concurrent.CompletableFuture;

public class IafBlockTags extends BlockTagsProvider {

public IafBlockTags(PackOutput output, CompletableFuture<HolderLookup.Provider> future, ExistingFileHelper helper) {
super(output, future, IceAndFire.MODID, helper);
}

@Override
protected void addTags(HolderLookup.Provider pProvider) {
}

@Override
public String getName() {
return "Ice and Fire Block Tags";
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.github.alexthe666.iceandfire.datagen.tags;

import com.github.alexthe666.iceandfire.IceAndFire;
import com.github.alexthe666.iceandfire.item.IafItemRegistry;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.data.tags.ItemTagsProvider;
import net.minecraft.data.tags.TagsProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.common.data.ExistingFileHelper;

import java.util.concurrent.CompletableFuture;

public class IafItemTags extends ItemTagsProvider {
public static TagKey<Item> MAKE_ITEM_DROPS_FIREIMMUNE = createKey("make_item_drops_fireimmune");

public IafItemTags(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider, CompletableFuture<TagsProvider.TagLookup<Block>> blockTags, ExistingFileHelper helper) {
super(output, lookupProvider, blockTags, IceAndFire.MODID, helper);
}

@Override
protected void addTags(HolderLookup.Provider provider) {
tag(MAKE_ITEM_DROPS_FIREIMMUNE)
.add(IafItemRegistry.DRAGONSTEEL_LIGHTNING_SWORD.get())
.add(IafItemRegistry.DRAGONBONE_SWORD_LIGHTNING.get());
}

private static TagKey<Item> createKey(final String name) {
return ItemTags.create(new ResourceLocation(IceAndFire.MODID, name));
}

@Override
public String getName() {
return "Ice and Fire Item Tags";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.github.alexthe666.iceandfire.IafConfig;
import com.github.alexthe666.iceandfire.IceAndFire;
import com.github.alexthe666.iceandfire.block.IafBlockRegistry;
import com.github.alexthe666.iceandfire.datagen.tags.IafItemTags;
import com.github.alexthe666.iceandfire.entity.*;
import com.github.alexthe666.iceandfire.entity.ai.AiDebug;
import com.github.alexthe666.iceandfire.entity.ai.EntitySheepAIFollowCyclops;
Expand Down Expand Up @@ -64,7 +65,7 @@
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.EntityHitResult;
import net.minecraftforge.event.LootTableLoadEvent;
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
import net.minecraftforge.event.entity.EntityStruckByLightningEvent;
import net.minecraftforge.event.entity.ProjectileImpactEvent;
import net.minecraftforge.event.entity.living.*;
import net.minecraftforge.event.entity.player.AttackEntityEvent;
Expand All @@ -73,12 +74,14 @@
import net.minecraftforge.event.level.BlockEvent;
import net.minecraftforge.event.server.ServerAboutToStartEvent;
import net.minecraftforge.event.village.VillagerTradesEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.registries.ForgeRegistries;

import javax.annotation.Nullable;
import java.util.*;
import java.util.stream.Collectors;

@Mod.EventBusSubscriber(modid = IceAndFire.MODID)
public class ServerEvents {
Expand Down Expand Up @@ -289,6 +292,29 @@ public void onEntityDrop(LivingDropsEvent event) {
}
}

@SubscribeEvent(priority = EventPriority.LOWEST)
public void makeItemDropsFireImmune(LivingDropsEvent event) {
boolean makeFireImmune = false;

if (event.getSource().getDirectEntity() instanceof LightningBolt bolt && bolt.getTags().contains(BOLT_DONT_DESTROY_ITEMS)) {
makeFireImmune = true;
} else if (event.getSource().getEntity() instanceof Player player && player.getItemInHand(player.getUsedItemHand()).is(IafItemTags.MAKE_ITEM_DROPS_FIREIMMUNE)) {
makeFireImmune = true;
}

if (makeFireImmune) {
Set<ItemEntity> fireImmuneDrops = event.getDrops().stream().map(itemEntity -> new ItemEntity(itemEntity.level(), itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(), itemEntity.getItem()) {
@Override
public boolean fireImmune() {
return true;
}
}).collect(Collectors.toSet());

event.getDrops().clear();
event.getDrops().addAll(fireImmuneDrops);
}
}

@SubscribeEvent
public void onLivingAttacked(final LivingAttackEvent event) {
if (event.getSource() != null && event.getSource().getEntity() != null) {
Expand Down Expand Up @@ -652,4 +678,13 @@ public void onVillagerTrades(VillagerTradesEvent event) {
IafVillagerRegistry.addScribeTrades(event.getTrades());
}
}

public static String BOLT_DONT_DESTROY_ITEMS = "skip_items";

@SubscribeEvent
public void onLightningHit(EntityStruckByLightningEvent event) {
if (event.getLightning().getTags().contains(BOLT_DONT_DESTROY_ITEMS) && event.getEntity() instanceof ItemEntity) {
event.setCanceled(true);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.github.alexthe666.iceandfire.IafConfig;
import com.github.alexthe666.iceandfire.entity.EntityDeathWorm;
import com.github.alexthe666.iceandfire.entity.props.FrozenProperties;
import com.github.alexthe666.iceandfire.event.ServerEvents;
import com.google.common.collect.Multimap;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
Expand Down Expand Up @@ -92,6 +93,7 @@ default void hurtEnemy(T item, ItemStack stack, LivingEntity target, LivingEntit
}
if (!attacker.level().isClientSide && flag) {
LightningBolt lightningboltentity = EntityType.LIGHTNING_BOLT.create(target.level());
lightningboltentity.getTags().add(ServerEvents.BOLT_DONT_DESTROY_ITEMS);
lightningboltentity.moveTo(target.position());
if (!target.level().isClientSide) {
target.level().addFreshEntity(lightningboltentity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.github.alexthe666.iceandfire.entity.EntityFireDragon;
import com.github.alexthe666.iceandfire.entity.EntityIceDragon;
import com.github.alexthe666.iceandfire.entity.props.FrozenProperties;
import com.github.alexthe666.iceandfire.event.ServerEvents;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.world.effect.MobEffectInstance;
Expand Down Expand Up @@ -52,6 +53,7 @@ public boolean hurtEnemy(@NotNull ItemStack stack, @NotNull LivingEntity target,
}
if (!attacker.level().isClientSide && flag) {
LightningBolt lightningboltentity = EntityType.LIGHTNING_BOLT.create(target.level());
lightningboltentity.getTags().add(ServerEvents.BOLT_DONT_DESTROY_ITEMS);
lightningboltentity.moveTo(target.position());
if (!target.level().isClientSide) {
target.level().addFreshEntity(lightningboltentity);
Expand Down

0 comments on commit e0e7d72

Please sign in to comment.