-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
66 changed files
with
3,255 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package ladysnake.impaled.client; | ||
|
||
import ladysnake.impaled.client.render.entity.ImpaledTridentEntityRenderer; | ||
import ladysnake.impaled.client.render.entity.model.ImpaledTridentEntityModel; | ||
import ladysnake.impaled.common.Impaled; | ||
import ladysnake.impaled.common.init.ImpaledEntityTypes; | ||
import ladysnake.impaled.common.init.ImpaledItems; | ||
import ladysnake.impaled.common.item.ImpaledTridentItem; | ||
import net.fabricmc.api.ClientModInitializer; | ||
import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; | ||
import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; | ||
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; | ||
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; | ||
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry; | ||
import net.fabricmc.fabric.api.resource.ResourceManagerHelper; | ||
import net.minecraft.client.render.entity.model.EntityModelLayer; | ||
import net.minecraft.client.render.entity.model.EntityModelLayers; | ||
import net.minecraft.client.util.ModelIdentifier; | ||
import net.minecraft.resource.ResourceType; | ||
import net.minecraft.util.Identifier; | ||
import net.minecraft.util.registry.Registry; | ||
|
||
public class ImpaledClient implements ClientModInitializer { | ||
public static final Identifier HELLFORK_RIPTIDE_TEXTURE = new Identifier(Impaled.MODID, "textures/entity/hellfork_riptide.png"); | ||
public static final Identifier SOULFORK_RIPTIDE_TEXTURE = new Identifier(Impaled.MODID, "textures/entity/soulfork_riptide.png"); | ||
public static final EntityModelLayer ATLAN = new EntityModelLayer(new Identifier(Impaled.MODID, "atlan"), "main"); | ||
|
||
@Override | ||
public void onInitializeClient() { | ||
EntityModelLayerRegistry.registerModelLayer(ATLAN, ImpaledTridentEntityModel::getAtlanTexturedModelData); | ||
|
||
for (ImpaledTridentItem item : ImpaledItems.ALL_TRIDENTS) { | ||
Identifier tridentId = Registry.ITEM.getId(item); | ||
Identifier texture = new Identifier(tridentId.getNamespace(), "textures/entity/" + tridentId.getPath() + ".png"); | ||
|
||
EntityModelLayer modelLayer = item == ImpaledItems.ATLAN ? ATLAN : EntityModelLayers.TRIDENT; | ||
ImpaledTridentItemRenderer tridentItemRenderer = new ImpaledTridentItemRenderer(tridentId, texture, modelLayer); | ||
ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(tridentItemRenderer); | ||
BuiltinItemRendererRegistry.INSTANCE.register(item, tridentItemRenderer); | ||
EntityRendererRegistry.register(item.getEntityType(), ctx -> new ImpaledTridentEntityRenderer(ctx, texture, modelLayer)); | ||
|
||
FabricModelPredicateProviderRegistry.register(item, new Identifier("throwing"), (stack, world, entity, seed) -> entity != null && entity.isUsingItem() && entity.getActiveItem() == stack ? 1.0F : 0.0F); | ||
ModelLoadingRegistry.INSTANCE.registerModelProvider((manager, out) -> out.accept(new ModelIdentifier(tridentId + "_in_inventory", "inventory"))); | ||
} | ||
|
||
EntityRendererRegistry.register(ImpaledEntityTypes.GUARDIAN_TRIDENT, ctx -> new ImpaledTridentEntityRenderer(ctx, new Identifier(Impaled.MODID, "textures/entity/guardian_trident.png"), EntityModelLayers.TRIDENT)); | ||
} | ||
} |
72 changes: 72 additions & 0 deletions
72
remappedSrc/ladysnake/impaled/client/ImpaledTridentItemRenderer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package ladysnake.impaled.client; | ||
|
||
import ladysnake.impaled.client.render.entity.model.ImpaledTridentEntityModel; | ||
import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; | ||
import net.fabricmc.fabric.api.resource.ResourceReloadListenerKeys; | ||
import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; | ||
import net.minecraft.client.MinecraftClient; | ||
import net.minecraft.client.render.VertexConsumer; | ||
import net.minecraft.client.render.VertexConsumerProvider; | ||
import net.minecraft.client.render.entity.model.EntityModelLayer; | ||
import net.minecraft.client.render.item.ItemRenderer; | ||
import net.minecraft.client.render.model.BakedModel; | ||
import net.minecraft.client.render.model.json.ModelTransformation; | ||
import net.minecraft.client.util.ModelIdentifier; | ||
import net.minecraft.client.util.math.MatrixStack; | ||
import net.minecraft.item.ItemStack; | ||
import net.minecraft.resource.ResourceManager; | ||
import net.minecraft.util.Identifier; | ||
|
||
import java.util.Collection; | ||
import java.util.Collections; | ||
|
||
public class ImpaledTridentItemRenderer implements BuiltinItemRendererRegistry.DynamicItemRenderer, SimpleSynchronousResourceReloadListener { | ||
private final Identifier id; | ||
private final Identifier tridentId; | ||
private final Identifier texture; | ||
private final EntityModelLayer modelLayer; | ||
private ItemRenderer itemRenderer; | ||
private ImpaledTridentEntityModel tridentModel; | ||
private BakedModel inventoryTridentModel; | ||
|
||
public ImpaledTridentItemRenderer(Identifier tridentId, Identifier texture, EntityModelLayer modelLayer) { | ||
this.id = new Identifier(tridentId.getNamespace(), tridentId.getPath() + "_renderer"); | ||
this.tridentId = tridentId; | ||
this.texture = texture; | ||
this.modelLayer = modelLayer; | ||
} | ||
|
||
@Override | ||
public Identifier getFabricId() { | ||
return this.id; | ||
} | ||
|
||
@Override | ||
public Collection<Identifier> getFabricDependencies() { | ||
return Collections.singletonList(ResourceReloadListenerKeys.MODELS); | ||
} | ||
|
||
@Override | ||
public void reload(ResourceManager manager) { | ||
MinecraftClient mc = MinecraftClient.getInstance(); | ||
this.itemRenderer = mc.getItemRenderer(); | ||
this.tridentModel = new ImpaledTridentEntityModel(mc.getEntityModelLoader().getModelPart(this.modelLayer)); | ||
this.inventoryTridentModel = mc.getBakedModelManager().getModel(new ModelIdentifier(this.tridentId + "_in_inventory", "inventory")); | ||
} | ||
|
||
@Override | ||
public void render(ItemStack stack, ModelTransformation.Mode renderMode, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { | ||
assert this.tridentModel != null; | ||
if (renderMode == ModelTransformation.Mode.GUI || renderMode == ModelTransformation.Mode.GROUND || renderMode == ModelTransformation.Mode.FIXED) { | ||
matrices.pop(); // cancel the previous transformation and pray that we are not breaking the state | ||
matrices.push(); | ||
itemRenderer.renderItem(stack, renderMode, false, matrices, vertexConsumers, light, overlay, this.inventoryTridentModel); | ||
} else { | ||
matrices.push(); | ||
matrices.scale(1.0F, -1.0F, -1.0F); | ||
VertexConsumer vertexConsumer = ItemRenderer.getDirectItemGlintConsumer(vertexConsumers, this.tridentModel.getLayer(this.texture), false, stack.hasGlint()); | ||
this.tridentModel.render(matrices, vertexConsumer, light, overlay, 1.0F, 1.0F, 1.0F, 1.0F); | ||
matrices.pop(); | ||
} | ||
} | ||
} |
43 changes: 43 additions & 0 deletions
43
remappedSrc/ladysnake/impaled/client/render/entity/ImpaledTridentEntityRenderer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package ladysnake.impaled.client.render.entity; | ||
|
||
import ladysnake.impaled.client.render.entity.model.ImpaledTridentEntityModel; | ||
import ladysnake.impaled.common.entity.ImpaledTridentEntity; | ||
import net.fabricmc.api.EnvType; | ||
import net.fabricmc.api.Environment; | ||
import net.minecraft.client.render.OverlayTexture; | ||
import net.minecraft.client.render.VertexConsumer; | ||
import net.minecraft.client.render.VertexConsumerProvider; | ||
import net.minecraft.client.render.entity.EntityRenderer; | ||
import net.minecraft.client.render.entity.EntityRendererFactory; | ||
import net.minecraft.client.render.entity.model.EntityModelLayer; | ||
import net.minecraft.client.render.item.ItemRenderer; | ||
import net.minecraft.client.util.math.MatrixStack; | ||
import net.minecraft.util.Identifier; | ||
import net.minecraft.util.math.MathHelper; | ||
import net.minecraft.util.math.Vec3f; | ||
|
||
@Environment(EnvType.CLIENT) | ||
public class ImpaledTridentEntityRenderer extends EntityRenderer<ImpaledTridentEntity> { | ||
private final ImpaledTridentEntityModel model; | ||
private final Identifier texture; | ||
|
||
public ImpaledTridentEntityRenderer(EntityRendererFactory.Context context, Identifier texture, EntityModelLayer modelLayer) { | ||
super(context); | ||
this.model = new ImpaledTridentEntityModel(context.getPart(modelLayer)); | ||
this.texture = texture; | ||
} | ||
|
||
public void render(ImpaledTridentEntity impaledTridentEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { | ||
matrixStack.push(); | ||
matrixStack.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(MathHelper.lerp(g, impaledTridentEntity.prevYaw, impaledTridentEntity.getYaw()) - 90.0F)); | ||
matrixStack.multiply(Vec3f.POSITIVE_Z.getDegreesQuaternion(MathHelper.lerp(g, impaledTridentEntity.prevPitch, impaledTridentEntity.getPitch()) + 90.0F)); | ||
VertexConsumer vertexConsumer = ItemRenderer.getDirectItemGlintConsumer(vertexConsumerProvider, this.model.getLayer(this.getTexture(impaledTridentEntity)), false, impaledTridentEntity.isEnchanted()); | ||
this.model.render(matrixStack, vertexConsumer, i, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); | ||
matrixStack.pop(); | ||
super.render(impaledTridentEntity, f, g, matrixStack, vertexConsumerProvider, i); | ||
} | ||
|
||
public Identifier getTexture(ImpaledTridentEntity impaledTridentEntity) { | ||
return this.texture; | ||
} | ||
} |
46 changes: 46 additions & 0 deletions
46
remappedSrc/ladysnake/impaled/client/render/entity/model/ImpaledTridentEntityModel.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package ladysnake.impaled.client.render.entity.model; | ||
|
||
import net.fabricmc.api.EnvType; | ||
import net.fabricmc.api.Environment; | ||
import net.minecraft.client.model.*; | ||
import net.minecraft.client.render.RenderLayer; | ||
import net.minecraft.client.render.VertexConsumer; | ||
import net.minecraft.client.util.math.MatrixStack; | ||
|
||
@Environment(EnvType.CLIENT) | ||
public class ImpaledTridentEntityModel extends Model { | ||
private final ModelPart root; | ||
|
||
public ImpaledTridentEntityModel(ModelPart root) { | ||
super(RenderLayer::getEntitySolid); | ||
this.root = root; | ||
} | ||
|
||
public static TexturedModelData getTexturedModelData() { | ||
ModelData modelData = new ModelData(); | ||
ModelPartData modelPartData = modelData.getRoot(); | ||
ModelPartData modelPartData2 = modelPartData.addChild("pole", ModelPartBuilder.create().uv(0, 6).cuboid(-0.5F, 2.0F, -0.5F, 1.0F, 25.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("base", ModelPartBuilder.create().uv(4, 0).cuboid(-1.5F, 0.0F, -0.5F, 3.0F, 2.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("left_spike", ModelPartBuilder.create().uv(4, 3).cuboid(-2.5F, -3.0F, -0.5F, 1.0F, 4.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("middle_spike", ModelPartBuilder.create().uv(0, 0).cuboid(-0.5F, -4.0F, -0.5F, 1.0F, 4.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("right_spike", ModelPartBuilder.create().uv(4, 3).mirrored().cuboid(1.5F, -3.0F, -0.5F, 1.0F, 4.0F, 1.0F), ModelTransform.NONE); | ||
return TexturedModelData.of(modelData, 32, 32); | ||
} | ||
|
||
public static TexturedModelData getAtlanTexturedModelData() { | ||
ModelData modelData = new ModelData(); | ||
ModelPartData modelPartData = modelData.getRoot(); | ||
ModelPartData modelPartData2 = modelPartData.addChild("pole", ModelPartBuilder.create().uv(0, 6).cuboid(-0.5F, 2.0F, -0.5F, 1.0F, 25.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("base", ModelPartBuilder.create().uv(4, 0).cuboid(-1.5F, 0.0F, -0.5F, 3.0F, 2.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("left_spike", ModelPartBuilder.create().uv(4, 3).cuboid(-2.5F, -3.0F, -0.5F, 1.0F, 4.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("middle_spike", ModelPartBuilder.create().uv(0, 0).cuboid(-0.5F, -4.0F, -0.5F, 1.0F, 4.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("right_spike", ModelPartBuilder.create().uv(4, 3).mirrored().cuboid(1.5F, -3.0F, -0.5F, 1.0F, 4.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("top_ornament", ModelPartBuilder.create().uv(4, 0).mirrored().cuboid(-1.5F, 3.0F, -0.5F, 3.0F, 1.0F, 1.0F), ModelTransform.NONE); | ||
modelPartData2.addChild("bottom_ornament", ModelPartBuilder.create().uv(4, 0).mirrored().cuboid(-1.5F, 24.0F, -0.5F, 3.0F, 2.0F, 1.0F), ModelTransform.NONE); | ||
return TexturedModelData.of(modelData, 32, 32); | ||
} | ||
|
||
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { | ||
this.root.render(matrices, vertices, light, overlay, red, green, blue, alpha); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package ladysnake.impaled.common; | ||
|
||
import ladysnake.impaled.common.init.ImpaledEntityTypes; | ||
import ladysnake.impaled.common.init.ImpaledItems; | ||
import net.fabricmc.api.ModInitializer; | ||
import net.fabricmc.fabric.api.loot.v1.FabricLootPoolBuilder; | ||
import net.fabricmc.fabric.api.loot.v1.event.LootTableLoadingCallback; | ||
import net.minecraft.loot.condition.LootCondition; | ||
import net.minecraft.loot.condition.RandomChanceLootCondition; | ||
import net.minecraft.loot.entry.ItemEntry; | ||
import net.minecraft.loot.provider.number.UniformLootNumberProvider; | ||
import net.minecraft.util.Identifier; | ||
|
||
public class Impaled implements ModInitializer { | ||
public static final String MODID = "impaled"; | ||
|
||
private static final Identifier BASTION_TREASURE_CHEST_LOOT_TABLE_ID = new Identifier("minecraft", "chests/bastion_treasure"); | ||
|
||
@Override | ||
public void onInitialize() { | ||
ImpaledEntityTypes.init(); | ||
ImpaledItems.init(); | ||
|
||
// add loot to dungeons, mineshafts, jungle temples, and stronghold libraries chests loot tables | ||
UniformLootNumberProvider lootTableRange = UniformLootNumberProvider.create(1, 1); | ||
LootCondition chanceLootCondition = RandomChanceLootCondition.builder(60).build(); | ||
LootTableLoadingCallback.EVENT.register((resourceManager, lootManager, id, supplier, setter) -> { | ||
if (BASTION_TREASURE_CHEST_LOOT_TABLE_ID.equals(id)) { | ||
FabricLootPoolBuilder poolBuilder = FabricLootPoolBuilder.builder() | ||
.rolls(lootTableRange) | ||
.withCondition(chanceLootCondition) | ||
.withEntry(ItemEntry.builder(ImpaledItems.ANCIENT_TRIDENT).build()); | ||
|
||
supplier.withPool(poolBuilder.build()); | ||
} | ||
}); | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
remappedSrc/ladysnake/impaled/common/damage/HellforkHeatDamageSource.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package ladysnake.impaled.common.damage; | ||
|
||
import net.minecraft.entity.damage.DamageSource; | ||
|
||
public class HellforkHeatDamageSource extends DamageSource { | ||
public static final DamageSource HELLFORK_HEAT = ((HellforkHeatDamageSource) new HellforkHeatDamageSource("hellfork_heat").setBypassesArmor()).setUnblockable(); | ||
|
||
protected HellforkHeatDamageSource(String name) { | ||
super(name); | ||
} | ||
} |
33 changes: 33 additions & 0 deletions
33
remappedSrc/ladysnake/impaled/common/enchantment/BetterImpaling.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package ladysnake.impaled.common.enchantment; | ||
|
||
import ladysnake.impaled.common.item.HellforkItem; | ||
import net.minecraft.enchantment.EnchantmentHelper; | ||
import net.minecraft.enchantment.Enchantments; | ||
import net.minecraft.entity.Entity; | ||
import net.minecraft.entity.LivingEntity; | ||
import net.minecraft.entity.effect.StatusEffects; | ||
import net.minecraft.item.ItemStack; | ||
|
||
public final class BetterImpaling { | ||
public static float getAttackDamage(ItemStack stack, Entity target) { | ||
int impalingLevel = EnchantmentHelper.getLevel(Enchantments.IMPALING, stack); | ||
|
||
if (impalingLevel > 0) { | ||
if (stack.getItem() instanceof HellforkItem) { | ||
if (isFireImmune(target)) { | ||
return impalingLevel * 2F; | ||
} | ||
} else if (target.isWet()) { | ||
return impalingLevel * 1.5F; | ||
} | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
private static boolean isFireImmune(Entity target) { | ||
if (target.isFireImmune()) return true; | ||
if (!(target instanceof LivingEntity)) return false; | ||
return ((LivingEntity) target).hasStatusEffect(StatusEffects.FIRE_RESISTANCE); | ||
} | ||
} |
40 changes: 40 additions & 0 deletions
40
remappedSrc/ladysnake/impaled/common/enchantment/BetterLoyalty.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
package ladysnake.impaled.common.enchantment; | ||
|
||
import ladysnake.sincereloyalty.LoyalTrident; | ||
import ladysnake.sincereloyalty.TridentRecaller; | ||
import net.minecraft.entity.EquipmentSlot; | ||
import net.minecraft.entity.player.PlayerEntity; | ||
import net.minecraft.item.ItemStack; | ||
import net.minecraft.nbt.NbtCompound; | ||
import net.minecraft.sound.SoundEvents; | ||
|
||
public final class BetterLoyalty { | ||
public static boolean tryInsertTrident(ItemStack stack, PlayerEntity player) { | ||
NbtCompound tag = stack.getSubNbt(LoyalTrident.MOD_NBT_KEY); | ||
if (tag != null) { | ||
TridentRecaller caller = (TridentRecaller) player; | ||
|
||
if (caller.getCurrentRecallStatus() == TridentRecaller.RecallStatus.RECALLING) { | ||
player.world.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.ITEM_TRIDENT_RETURN, player.getSoundCategory(), 0.7f, 0.5f); | ||
} | ||
|
||
caller.updateRecallStatus(TridentRecaller.RecallStatus.NONE); | ||
|
||
if (tag.contains(LoyalTrident.RETURN_SLOT_NBT_KEY)) { | ||
int preferredSlot = tag.getInt(LoyalTrident.RETURN_SLOT_NBT_KEY); | ||
tag.remove(LoyalTrident.RETURN_SLOT_NBT_KEY); | ||
if (preferredSlot == -1) { | ||
if (player.getOffHandStack().isEmpty()) { | ||
player.equipStack(EquipmentSlot.OFFHAND, stack.copy()); | ||
stack.setCount(0); | ||
return true; | ||
} | ||
} else if (player.getInventory().getStack(preferredSlot).isEmpty()) { | ||
player.getInventory().insertStack(preferredSlot, stack); | ||
return true; | ||
} | ||
} | ||
} | ||
return false; | ||
} | ||
} |
Oops, something went wrong.