More backporting

This commit is contained in:
DBotThePony 2024-01-01 22:01:57 +07:00
parent 2a117a540e
commit 7b415fbce3
Signed by: DBot
GPG Key ID: DCC23B5715498507
31 changed files with 330 additions and 185 deletions

View File

@ -23,10 +23,10 @@ jei_version=12.4.0.22
jupiter_version=5.9.2
curios_version=4440173
cosmetic_armor_reworked_id=4439659
ad_astra_id=4594155
botarium_id=4594094
resourceful_lib_id=4598948
resourceful_config_id=4576455
ad_astra_id=4452072
botarium_id=4416456
resourceful_lib_id=4378849
resourceful_config_id=4441381
jade_id=4434045
configured_id=4462894

View File

@ -1,55 +0,0 @@
package ru.dbotthepony.mc.otm.datagen
import net.minecraft.core.RegistrySetBuilder
import net.minecraft.core.registries.Registries
import net.minecraft.data.worldgen.BootstapContext
import net.minecraft.tags.DamageTypeTags
import net.minecraft.world.damagesource.DamageScaling
import net.minecraft.world.damagesource.DamageType
import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider
import net.minecraftforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.datagen.tags.TagsProvider
import ru.dbotthepony.mc.otm.registry.MDamageTypes
fun registerDamageTypes(context: BootstapContext<DamageType>) {
context.register(MDamageTypes.EXOPACK_PROBE, DamageType("otm_exopack_probe", DamageScaling.NEVER, 4.0f))
context.register(MDamageTypes.BECOME_ANDROID, DamageType("otm_become_android", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.BECOME_HUMANE, DamageType("otm_become_humane", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.EVENT_HORIZON, DamageType("otm_event_horizon", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.HAWKING_RADIATION, DamageType("otm_hawking_radiation", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.EMP, DamageType("otm_emp", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.SHOCKWAVE, DamageType("otm_shockwave", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.PLASMA, DamageType("otm_plasma", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.COSMIC_RAYS, DamageType("otm_cosmic_rays", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.EXPLOSIVE_HAMMER, DamageType("otm_explosive_hammer", DamageScaling.NEVER, 0.1f))
context.register(MDamageTypes.HAMMER_NAIL, DamageType("otm_hammer_nail", DamageScaling.NEVER, 0.1f))
context.register(MDamageTypes.ANDROID_DISCHARGE, DamageType("otm_android_discharge", DamageScaling.NEVER, 4.0f))
}
fun registerDamageTypeTags(provider: TagsProvider.Delegate<DamageType>) {
val ignoreArmor = provider.Appender(DamageTypeTags.BYPASSES_ARMOR)
val ignoreMagic = provider.Appender(DamageTypeTags.BYPASSES_ENCHANTMENTS)
val ignoreInvl = provider.Appender(DamageTypeTags.BYPASSES_INVULNERABILITY)
ignoreArmor
.add(MDamageTypes.EXOPACK_PROBE)
.add(MDamageTypes.BECOME_ANDROID)
.add(MDamageTypes.BECOME_HUMANE)
.add(MDamageTypes.EVENT_HORIZON)
.add(MDamageTypes.EMP)
.add(MDamageTypes.SHOCKWAVE)
.add(MDamageTypes.COSMIC_RAYS)
.add(MDamageTypes.ANDROID_DISCHARGE)
ignoreMagic
.add(MDamageTypes.EXOPACK_PROBE)
.add(MDamageTypes.BECOME_ANDROID)
.add(MDamageTypes.BECOME_HUMANE)
.add(MDamageTypes.COSMIC_RAYS)
.add(MDamageTypes.ANDROID_DISCHARGE)
ignoreInvl
.add(MDamageTypes.BECOME_HUMANE)
.add(MDamageTypes.BECOME_ANDROID)
.add(MDamageTypes.ANDROID_DISCHARGE)
}

View File

@ -521,14 +521,11 @@ object DataGen {
event.generator.addProvider(event.includeServer(), matterData)
val registrySetBuilder = RegistrySetBuilder()
.add(Registries.DAMAGE_TYPE, ::registerDamageTypes)
.add(Registries.CONFIGURED_FEATURE, ::registerConfiguredFeatures)
.add(Registries.PLACED_FEATURE, ::registerPlacedFeatures)
event.generator.addProvider(event.includeServer(), DatapackBuiltinEntriesProvider(event.generator.packOutput, event.lookupProvider, registrySetBuilder, setOf(MOD_ID)))
registerDamageTypeTags(tagsProvider.damageTypes)
AddEnglishLanguage(languageProvider)
AddRussianLanguage(languageProvider)

View File

@ -30,7 +30,7 @@ open class AndroidFeatureType<T : AndroidFeature> {
}
open val displayContents: ComponentContents by lazy {
TranslatableContents(displayId, null, arrayOf())
TranslatableContents(displayId)
}
open val displayName: Component by lazy {

View File

@ -32,7 +32,7 @@ import ru.dbotthepony.mc.otm.onceServer
import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MSoundEvents
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.registry.ShockwaveDamageSource
import ru.dbotthepony.mc.otm.triggers.ShockwaveDamageMobTrigger
import ru.dbotthepony.mc.otm.triggers.ShockwaveTrigger
import kotlin.math.pow
@ -121,7 +121,7 @@ class ShockwaveFeature(capability: MatteryPlayerCapability) : AndroidSwitchableF
seen.add(entity)
val multiplier = (1.0 - distanceMultiplier).pow(0.5)
val source = MatteryDamageSource(ply.level.registryAccess().damageType(MDamageTypes.SHOCKWAVE), ply)
val source = ShockwaveDamageSource(ply)
val damage = multiplier.toFloat() * AndroidConfig.Shockwave.DAMAGE.toFloat() * AndroidConfig.Shockwave.WARDEN_DAMAGE_MULT.toFloat()
entity.hurt(source, damage)
entity.deltaMovement += (entity.position - ply.position).normalize() * (multiplier * 3.0)
@ -137,7 +137,7 @@ class ShockwaveFeature(capability: MatteryPlayerCapability) : AndroidSwitchableF
// don't hurt items, arrows, etc etc
if (entity is LivingEntity) {
val source = MatteryDamageSource(ply.level.registryAccess().damageType(MDamageTypes.SHOCKWAVE), ply)
val source = ShockwaveDamageSource(ply)
val damage = multiplier.toFloat() * AndroidConfig.Shockwave.DAMAGE.toFloat()
entity.hurt(source, damage)
entity.deltaMovement += (entity.position - ply.position).normalize() * (multiplier * 3.0)

View File

@ -11,6 +11,7 @@ import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.TooltipFlag
import net.minecraft.world.level.BlockGetter
import net.minecraft.world.level.Level
import net.minecraft.world.level.LevelAccessor
import net.minecraft.world.level.block.BasePressurePlateBlock
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.SoundType
@ -21,7 +22,7 @@ import net.minecraft.world.level.material.Material
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.get
class TritaniumPressurePlate(color: DyeColor?) : BasePressurePlateBlock(Properties.of(Material.METAL, color ?: DyeColor.LIGHT_BLUE).sound(SoundType.METAL).explosionResistance(80f).noOcclusion().destroyTime(3f).requiresCorrectToolForDrops(), BlockSetType.IRON) {
class TritaniumPressurePlate(color: DyeColor?) : BasePressurePlateBlock(Properties.of(Material.METAL, color ?: DyeColor.LIGHT_BLUE).sound(SoundType.METAL).explosionResistance(80f).noOcclusion().destroyTime(3f).requiresCorrectToolForDrops()) {
override fun appendHoverText(
p_49816_: ItemStack,
p_49817_: BlockGetter?,
@ -42,6 +43,14 @@ class TritaniumPressurePlate(color: DyeColor?) : BasePressurePlateBlock(Properti
p_49915_.add(BlockStateProperties.POWERED)
}
override fun playOnSound(level: LevelAccessor, pos: BlockPos) {
level.playSound(null, pos, SoundEvents.METAL_PRESSURE_PLATE_CLICK_ON, SoundSource.BLOCKS, 0.3f, 0.9f)
}
override fun playOffSound(level: LevelAccessor, pos: BlockPos) {
level.playSound(null, pos, SoundEvents.METAL_PRESSURE_PLATE_CLICK_OFF, SoundSource.BLOCKS, 0.3f, 0.9f)
}
override fun getSignalStrength(level: Level, pos: BlockPos): Int {
if (level.getEntitiesOfClass(ServerPlayer::class.java, TOUCH_AABB.move(pos)).isNotEmpty()) {
return 15

View File

@ -9,7 +9,6 @@ import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.EquipmentSlot
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.boss.wither.WitherBoss
import net.minecraft.world.entity.item.ItemEntity
import net.minecraft.world.entity.player.Player
import net.minecraft.world.level.Level
@ -20,13 +19,11 @@ import net.minecraft.world.level.levelgen.structure.BoundingBox
import net.minecraft.world.phys.AABB
import net.minecraft.world.phys.Vec3
import net.minecraftforge.common.Tags
import net.minecraftforge.registries.ForgeRegistries
import ru.dbotthepony.mc.otm.block.BlackHoleBlock
import ru.dbotthepony.mc.otm.block.entity.tech.GravitationStabilizerBlockEntity
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
import ru.dbotthepony.mc.otm.block.entity.blackhole.ExplosionQueue.Companion.queueForLevel
import ru.dbotthepony.mc.otm.config.ServerConfig
import ru.dbotthepony.mc.otm.core.damageType
import ru.dbotthepony.mc.otm.core.getExplosionResistance
import ru.dbotthepony.mc.otm.core.gracefulBlockBreak
import ru.dbotthepony.mc.otm.core.math.Decimal
@ -39,7 +36,6 @@ import ru.dbotthepony.mc.otm.core.nbt.map
import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.matter.MatterManager
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.triggers.BlackHoleTrigger
import kotlin.math.pow
import kotlin.math.roundToInt
@ -121,7 +117,7 @@ class BlackHoleBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : Mattery
} else {
level.explode(
null,
MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.HAWKING_RADIATION)),
MDamageTypes.HAWKING_RADIATION,
null,
blockPos.x + 0.5,
blockPos.y + 0.5,
@ -240,7 +236,7 @@ class BlackHoleBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : Mattery
}
if (distance < gravitationStrength + 1.0) {
val source = MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EVENT_HORIZON))
val source = MDamageTypes.EVENT_HORIZON
val damage = (gravitationStrength / distance).toFloat()
if (living is Player) {
@ -258,7 +254,7 @@ class BlackHoleBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : Mattery
setDeltaMovement(item, center, distance)
if (distance < gravitationStrength + 1) {
if (item.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EVENT_HORIZON)), (gravitationStrength / distance).toFloat()) && item.isRemoved) {
if (item.hurt(MDamageTypes.EVENT_HORIZON, (gravitationStrength / distance).toFloat()) && item.isRemoved) {
if (item.item.item === MItems.GRAVITATIONAL_DISRUPTOR) {
collapse()
} else {

View File

@ -6,7 +6,6 @@ import net.minecraft.nbt.DoubleTag
import net.minecraft.nbt.ListTag
import net.minecraft.nbt.Tag
import net.minecraft.server.level.ServerLevel
import net.minecraft.util.datafix.DataFixTypes
import net.minecraft.world.level.BlockGetter
import net.minecraft.world.level.Explosion
import net.minecraft.world.level.ExplosionDamageCalculator
@ -32,8 +31,6 @@ import ru.dbotthepony.mc.otm.core.math.rotateAroundAxis
import ru.dbotthepony.mc.otm.core.math.up
import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
@ -539,7 +536,7 @@ private data class QueuedExplosion(val x: Double, val y: Double, val z: Double,
fun explode(level: Level) {
level.explode(
null,
MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.HAWKING_RADIATION)),
MDamageTypes.HAWKING_RADIATION,
BlackHoleExplosionDamageCalculator,
x,
y,

View File

@ -128,7 +128,7 @@ class PoweredFurnaceBlockEntity(
return JobContainer.success(
ItemJob(
recipe.getResultItem(level.registryAccess()).copyWithCount(toProcess),
recipe.getResultItem().copyWithCount(toProcess),
recipe.workTime * MachinesConfig.PLATE_PRESS.workTimeMultiplier,
MachinesConfig.PLATE_PRESS.energyConsumption * toProcess,
experience = recipe.experience.sample(level.random) * toProcess))

View File

@ -114,7 +114,6 @@ import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.triggers.AndroidResearchTrigger
import ru.dbotthepony.mc.otm.triggers.AndroidTravelUnderwater
import ru.dbotthepony.mc.otm.triggers.BecomeAndroidDeathTrigger
@ -532,7 +531,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
return JobContainer.noItem()
} else {
val actual = recipe.get()
val item = actual.value.assemble(input, level.registryAccess())
val item = actual.value.assemble(input)
input[0].shrink(1)
input.setChanged(0)
return JobContainer.success(ItemJob(item, actual.value.cookingTime.toDouble(), ExopackConfig.FURNACE_POWER_CONSUMPTION, actual.value.experience))
@ -685,7 +684,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
becomeAndroid()
if (!ply.abilities.invulnerable)
ply.hurt(MatteryDamageSource(ply.level.registryAccess().damageType(MDamageTypes.BECOME_ANDROID)), ply.maxHealth * 2)
ply.hurt(MDamageTypes.BECOME_ANDROID, ply.maxHealth * 2)
}
/**
@ -747,7 +746,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
becomeHumane()
if (!ply.abilities.invulnerable)
ply.hurt(MatteryDamageSource(ply.level.registryAccess().damageType(MDamageTypes.BECOME_HUMANE)), ply.maxHealth * 2)
ply.hurt(MDamageTypes.BECOME_HUMANE, ply.maxHealth * 2)
}
/**
@ -1272,7 +1271,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
}
if (androidEnergy.batteryLevel <= Decimal.TEN) {
if (--nextDischargeHurt <= 0 && ply.hurt(DamageSource(ply.level.registryAccess().damageType(MDamageTypes.ANDROID_DISCHARGE)), 1f)) {
if (--nextDischargeHurt <= 0 && ply.hurt(MDamageTypes.ANDROID_DISCHARGE, 1f)) {
nextDischargeHurt = 20
}

View File

@ -107,13 +107,14 @@ class MGUIGraphics(val pose: PoseStack) {
RenderSystem.setShader { GameRenderer.getPositionColorShader() }
bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR)
val matrix4f = pose.last().pose()
val colorEvent = ForgeHooksClient.onRenderTooltipColor(itemStack, pose, x, y, preEvent.font, mapped)
TooltipRenderUtil.renderTooltipBackground(GuiComponent::fillGradient, matrix4f, bufferbuilder, x, y, i, j, 400, colorEvent.backgroundStart, colorEvent.backgroundEnd, colorEvent.borderStart, colorEvent.borderEnd)
TooltipRenderUtil.renderTooltipBackground(GuiComponent::fillGradient, matrix4f, bufferbuilder, x, y, i, j, 400)
RenderSystem.enableDepthTest()
RenderSystem.disableTexture()
RenderSystem.enableBlend()
RenderSystem.defaultBlendFunc()
BufferUploader.drawWithShader(bufferbuilder.end())
RenderSystem.disableBlend()
RenderSystem.enableTexture()
pose.translate(0.0f, 0.0f, 400.0f)
var yCurrent = y
@ -152,7 +153,7 @@ class MGUIGraphics(val pose: PoseStack) {
scale: Float = 1f,
color: RGBAColor = RGBAColor.WHITE,
drawShadow: Boolean = false,
displayMode: Font.DisplayMode = Font.DisplayMode.NORMAL,
displayMode: Boolean = false,
packedLightCoords: Int = 15728880,
effectColor: Int = 0,
shadowColor: RGBAColor = RGBAColor.BLACK,
@ -202,7 +203,7 @@ class MGUIGraphics(val pose: PoseStack) {
scale: Float = 1f,
color: RGBAColor = RGBAColor.WHITE,
drawShadow: Boolean = false,
displayMode: Font.DisplayMode = Font.DisplayMode.NORMAL,
displayMode: Boolean = false,
packedLightCoords: Int = 15728880,
effectColor: Int = 0,
shadowColor: RGBAColor = RGBAColor.BLACK,
@ -252,7 +253,7 @@ class MGUIGraphics(val pose: PoseStack) {
scale: Float = 1f,
color: RGBAColor = RGBAColor.WHITE,
drawShadow: Boolean = false,
displayMode: Font.DisplayMode = Font.DisplayMode.NORMAL,
displayMode: Boolean = false,
packedLightCoords: Int = 15728880,
effectColor: Int = 0,
shadowColor: RGBAColor = RGBAColor.BLACK,

View File

@ -34,11 +34,11 @@ open class EditBoxPanel<out S : Screen>(
}
override fun configureNew(widget: EditBox, recreation: Boolean) {
widget.isFocused = isFocusedThis
widget.changeFocus(isFocusedThis)
}
override fun onFocusChanged() {
widget?.isFocused = isFocusedThis
widget?.changeFocus(isFocusedThis)
}
override fun mouseClickedInner(x: Double, y: Double, button: Int): Boolean {
@ -49,7 +49,7 @@ open class EditBoxPanel<out S : Screen>(
override fun keyPressedInternal(key: Int, scancode: Int, mods: Int): Boolean {
if (key == InputConstants.KEY_ESCAPE && widget?.isActive == true) {
widget?.isFocused = false
widget?.changeFocus(false)
return true
}

View File

@ -32,7 +32,7 @@ abstract class AbstractSlotPanel<out S : MatteryScreen<*>> @JvmOverloads constru
RenderSystem.setShader(GameRenderer::getPositionTexShader)
if (!itemstack.isEmpty) {
screen.renderItemStack(graphics, itemstack, countOverride)
screen.renderItemStack(absoluteX + 1, absoluteY + 1, itemstack, countOverride)
clearDepth(graphics)
}

View File

@ -42,7 +42,7 @@ abstract class UserFilteredSlotPanel<out S : MatteryScreen<*>, out T : Slot>(
if (slotFilter !== Items.AIR) {
val itemStack = ItemStack(slotFilter!!, 1)
screen.renderItemStack(graphics, itemStack, null)
screen.renderItemStack(absoluteX + 1, absoluteY + 1, itemStack, null)
clearDepth(graphics)
graphics.renderRect(0f, 0f, width, height, color = SLOT_FILTER_COLOR)

View File

@ -314,7 +314,7 @@ private class AndroidResearchButton(
val stack = graphics.pose
stack.pushPose()
stack.translate(1f, 1f, 0f)
screen.renderItemStack(graphics, itemstack)
screen.renderItemStack(absoluteX + 1, absoluteY + 1, itemstack)
stack.popPose()
clearDepth(graphics)

View File

@ -4,17 +4,15 @@ import earth.terrarium.ad_astra.AdAstra
import earth.terrarium.ad_astra.common.data.Planet
import earth.terrarium.ad_astra.common.data.PlanetData
import earth.terrarium.ad_astra.common.item.armor.SpaceSuit
import earth.terrarium.ad_astra.common.registry.ModDamageSources
import earth.terrarium.ad_astra.common.registry.ModDamageSource
import net.minecraft.world.entity.player.Player
import net.minecraftforge.event.entity.living.LivingHurtEvent
import net.minecraftforge.fml.ModList
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.config.ServerCompatConfig
import ru.dbotthepony.mc.otm.core.damageType
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.CosmicRaysDamageSource
import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
val isAdAstraLoaded by lazy {
ModList.get().isLoaded(AdAstra.MOD_ID)
@ -28,7 +26,7 @@ fun onDamageEvent(event: LivingHurtEvent) {
if (ServerCompatConfig.AdAstra.ANDROIDS_DO_NOT_NEED_OXYGEN) {
if (ply.matteryPlayer?.isAndroid != true) return
if (event.source.`is`(ModDamageSources.OXYGEN)) {
if (event.source == ModDamageSource.OXYGEN) {
event.amount = 0f
event.isCanceled = true
}
@ -52,7 +50,7 @@ fun onMatteryTick(event: MatteryPlayerCapability.PostTick) {
val yesTritanium = yesTritanium0 + yesTritanium1
if (rand.nextDouble() <= (noSpacesuits - yesTritanium) * ServerCompatConfig.AdAstra.ANDROID_COSMIC_RAYS_CHANCE) {
event.player.hurt(MatteryDamageSource(event.level.registryAccess().damageType(MDamageTypes.COSMIC_RAYS)), 1f)
event.player.hurt(CosmicRaysDamageSource(), 1f)
}
}
}

View File

@ -62,7 +62,7 @@ fun <V : Any> Codec<V>.fromNetwork(buff: FriendlyByteBuf): V {
}
// 1.19 being 1.19
fun TranslatableComponent(key: String, vararg values: Any): MutableComponent = MutableComponent.create(TranslatableContents(key, null, values))
fun TranslatableComponent(key: String, vararg values: Any): MutableComponent = MutableComponent.create(TranslatableContents(key, *values))
fun TextComponent(value: String): MutableComponent = MutableComponent.create(LiteralContents(value))
fun <T> IForgeRegistry<T>.getKeyNullable(value: T): ResourceLocation? {

View File

@ -12,10 +12,9 @@ import net.minecraft.world.phys.BlockHitResult
import net.minecraft.world.phys.EntityHitResult
import net.minecraft.world.phys.HitResult
import net.minecraftforge.event.ForgeEventFactory
import ru.dbotthepony.mc.otm.core.damageType
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MEntityTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.registry.PlasmaDamageSource
class PlasmaProjectile(level: Level) : Projectile(MEntityTypes.PLASMA as EntityType<out Projectile>, level) {
var inflictor: ItemStack? = null
@ -38,7 +37,7 @@ class PlasmaProjectile(level: Level) : Projectile(MEntityTypes.PLASMA as EntityT
super.onHitEntity(p_37259_)
if (!level.isClientSide) {
p_37259_.entity.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.PLASMA), owner, inflictor), damage)
p_37259_.entity.hurt(PlasmaDamageSource(owner, inflictor), damage)
}
}

View File

@ -24,8 +24,8 @@ import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.config.ItemsConfig
import ru.dbotthepony.mc.otm.core.*
import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.registry.EMPDamageSource
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.runIfClient
import kotlin.math.roundToInt
@ -171,7 +171,7 @@ class CrudeBatteryItem : BatteryItem(ItemsConfig.Batteries.CRUDE) {
mattery.androidEnergy.item = copyStack
val extraDamageMult = level.random.nextFloat()
player.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EMP), inflictor = itemStack), 1.5f + extraDamageMult * 3.5f)
player.hurt(EMPDamageSource(inflictor = itemStack), 1.5f + extraDamageMult * 3.5f)
val debuffDuration = 100 + (100 * (1f - extraDamageMult)).roundToInt()
player.addEffect(MobEffectInstance(MobEffects.BLINDNESS, debuffDuration), player)

View File

@ -7,6 +7,7 @@ import net.minecraft.server.level.ServerLevel
import net.minecraft.world.Container
import net.minecraft.world.InteractionHand
import net.minecraft.world.InteractionResult
import net.minecraft.world.damagesource.DamageSource
import net.minecraft.world.entity.vehicle.AbstractMinecart
import net.minecraft.world.entity.vehicle.MinecartChest
import net.minecraft.world.item.*
@ -155,7 +156,7 @@ class ChestUpgraderItem : Item(Properties().stacksTo(1)) {
}
cart.clearContent()
(cart as AbstractMinecart).destroy(cart.damageSources().generic())
(cart as AbstractMinecart).destroy(DamageSource.GENERIC)
level.addFreshEntity(newCart)
level.gameEvent(GameEvent.ENTITY_PLACE, event.pos, GameEvent.Context.of(event.entity, level.getBlockState(event.pos.below())))

View File

@ -13,9 +13,8 @@ import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.onceServer
import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.core.damageType
import ru.dbotthepony.mc.otm.registry.ExopackDamageSource
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.runIfClient
class ExopackProbeItem : Item(Properties().stacksTo(1).rarity(Rarity.EPIC)) {
@ -66,7 +65,7 @@ class ExopackProbeItem : Item(Properties().stacksTo(1).rarity(Rarity.EPIC)) {
player.displayClientMessage(TranslatableComponent("otm.exopack.granted1").withStyle(ChatFormatting.GRAY), false)
player.displayClientMessage(TranslatableComponent("otm.exopack.granted2").withStyle(ChatFormatting.GRAY), false)
player.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EXOPACK_PROBE), inflictor = copy), 10f)
player.hurt(ExopackDamageSource(inflictor = copy), 10f)
for (i in 3 .. 7) {
onceServer((i - 1) * 100) {

View File

@ -39,8 +39,9 @@ import ru.dbotthepony.mc.otm.config.ToolsConfig
import ru.dbotthepony.mc.otm.core.*
import ru.dbotthepony.mc.otm.core.math.*
import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.registry.ExplosiveHammerDamageSource
import ru.dbotthepony.mc.otm.registry.HammerNailDamageSource
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger
import java.util.function.Predicate
@ -123,14 +124,14 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
if (player.random.nextDouble() <= ToolsConfig.ExplosiveHammer.FLY_OFF_DAMAGE_CHANCE) {
player.invulnerableTime = 0
val dmg = ToolsConfig.ExplosiveHammer.FLY_OFF_MIN_DAMAGE + player.random.nextDouble() * (ToolsConfig.ExplosiveHammer.FLY_OFF_MAX_DAMAGE - ToolsConfig.ExplosiveHammer.FLY_OFF_MIN_DAMAGE)
player.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EXPLOSIVE_HAMMER), inflictor = copy), dmg.toFloat())
player.hurt(ExplosiveHammerDamageSource(inflictor = copy), dmg.toFloat())
}
itemStack.shrink(itemStack.count)
} else if (player.random.nextDouble() <= ToolsConfig.ExplosiveHammer.SELF_HARM_CHANCE) {
player.invulnerableTime = 0
val dmg = ToolsConfig.ExplosiveHammer.SELF_HARM_MIN_DAMAGE + player.random.nextDouble() * (ToolsConfig.ExplosiveHammer.SELF_HARM_MAX_DAMAGE - ToolsConfig.ExplosiveHammer.SELF_HARM_MIN_DAMAGE)
player.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EXPLOSIVE_HAMMER), inflictor = copy), dmg.toFloat())
player.hurt(ExplosiveHammerDamageSource(inflictor = copy), dmg.toFloat())
}
}
}
@ -205,7 +206,7 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
val rayBox = aabb.move(rayPos)
val entities = level.getEntities(null, rayBox) { it is LivingEntity && it.isAlive && !it.isSpectator && hitEntities.add(it) } as List<LivingEntity>
val damageSource = MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.HAMMER_NAIL), attacker, itemStack)
val damageSource = HammerNailDamageSource(attacker, itemStack)
for (it in entities) {
val damage = canTravel * ToolsConfig.ExplosiveHammer.TRAVEL_DAMAGE_MULT
@ -257,12 +258,12 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
if (attacker.random.nextDouble() <= ToolsConfig.ExplosiveHammer.FLY_OFF_DAMAGE_CHANCE) {
attacker.invulnerableTime = 0
val dmg = ToolsConfig.ExplosiveHammer.FLY_OFF_MIN_DAMAGE + attacker.random.nextDouble() * (ToolsConfig.ExplosiveHammer.FLY_OFF_MAX_DAMAGE - ToolsConfig.ExplosiveHammer.FLY_OFF_MIN_DAMAGE)
attacker.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EXPLOSIVE_HAMMER), inflictor = copy), dmg.toFloat())
attacker.hurt(ExplosiveHammerDamageSource(inflictor = copy), dmg.toFloat())
}
} else if (attacker.random.nextDouble() <= ToolsConfig.ExplosiveHammer.SELF_HARM_CHANCE) {
attacker.invulnerableTime = 0
val dmg = ToolsConfig.ExplosiveHammer.SELF_HARM_MIN_DAMAGE + attacker.random.nextDouble() * (ToolsConfig.ExplosiveHammer.SELF_HARM_MAX_DAMAGE - ToolsConfig.ExplosiveHammer.SELF_HARM_MIN_DAMAGE)
attacker.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EXPLOSIVE_HAMMER), inflictor = copy), dmg.toFloat())
attacker.hurt(ExplosiveHammerDamageSource(inflictor = copy), dmg.toFloat())
}
}
}

View File

@ -6,7 +6,6 @@ import net.minecraft.ChatFormatting
import net.minecraft.core.BlockPos
import net.minecraft.nbt.CompoundTag
import net.minecraft.network.chat.Component
import net.minecraft.tags.BlockTags
import net.minecraft.world.entity.EquipmentSlot
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.attributes.Attribute
@ -40,12 +39,12 @@ import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.damageType
import ru.dbotthepony.mc.otm.core.math.defineDecimal
import ru.dbotthepony.mc.otm.core.ifPresentK
import ru.dbotthepony.mc.otm.core.math.nextVariance
import ru.dbotthepony.mc.otm.core.orNull
import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.registry.EMPDamageSource
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
@ -108,7 +107,7 @@ class EnergySwordItem : Item(Properties().stacksTo(1).rarity(Rarity.RARE)), Vani
victim.matteryPlayer?.let {
if (it.isAndroid) {
victim.invulnerableTime = 0
victim.hurt(MatteryDamageSource(attacker.level.registryAccess().damageType(MDamageTypes.EMP), attacker, itemStack), 8f)
victim.hurt(EMPDamageSource(attacker, itemStack), 8f)
}
}
@ -121,7 +120,7 @@ class EnergySwordItem : Item(Properties().stacksTo(1).rarity(Rarity.RARE)), Vani
victim.matteryPlayer?.let {
if (it.isAndroid && it.androidEnergy.extractEnergyExact(ENERGY_ZAP, false)) {
it.androidEnergy.extractEnergy(attacker.level.random.nextVariance(ENERGY_ZAP_VARIANCE), false)
victim.hurt(MatteryDamageSource(attacker.level.registryAccess().damageType(MDamageTypes.EMP), attacker, itemStack), 8f)
victim.hurt(EMPDamageSource(attacker, itemStack), 8f)
}
}
}

View File

@ -45,7 +45,7 @@ import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.Ingredient
import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.RecipeType
import net.minecraft.world.item.crafting.SmithingTransformRecipe
import net.minecraft.world.item.crafting.UpgradeRecipe
import net.minecraft.world.level.ItemLike
import net.minecraftforge.common.capabilities.ForgeCapabilities
import net.minecraftforge.common.crafting.IShapedRecipe
@ -451,13 +451,13 @@ object MatterManager {
stream = stream.filter { it.value.ingredients.stream().flatMap { it.items.stream() }.noneMatch { it.isDamageableItem } }
}
stream.filter { it.value.getResultItem(server.registryAccess()).isNotEmpty }.map {
stream.filter { it.value.getResultItem().isNotEmpty }.map {
try {
ResolvedRecipe(
it.value.ingredients.stream()
.filter { !it.isActuallyEmpty }
.map { it.items.stream().filter { it.isNotEmpty }.map(::RecipeEntry) },
ImmutableStack(it.value.getResultItem(server.registryAccess())),
ImmutableStack(it.value.getResultItem()),
isCritical = isCritical,
name = it.id,
allowBacktrack = allowBacktrack
@ -500,7 +500,7 @@ object MatterManager {
stream.map {
try {
// avoid reality snap when recipe has no output
val resultItem = it.value.getResultItem(server.registryAccess())
val resultItem = it.value.getResultItem()
if (resultItem.isEmpty) {
null
@ -549,7 +549,7 @@ object MatterManager {
for (item in it.value.ingredients[c].items) {
container[c] = item
if (!it.value.assemble(container, server.registryAccess()).isEmpty) {
if (!it.value.assemble(container).isEmpty) {
val residue = it.value.getRemainingItems(container)
val thisResidue = residue[c]
@ -604,13 +604,13 @@ object MatterManager {
val allowBacktrack = data["allow_backtrack"]?.asBoolean ?: true
var stream = server.recipeManager.byType(findRecipeType).values.stream().filter { !it.value.isIncomplete }
stream = stream.filter { it.value is SmithingTransformRecipe }
stream = stream.filter { it.value is UpgradeRecipe }
stream.filter { it.value.getResultItem(server.registryAccess()).isNotEmpty }.map {
stream.filter { it.value.getResultItem().isNotEmpty }.map {
try {
val ingredients = ArrayList<Ingredient>()
val recipe = it.value as SmithingTransformRecipe
val recipe = it.value as UpgradeRecipe
ingredients.add(recipe.base)
ingredients.add(recipe.addition)
@ -619,7 +619,7 @@ object MatterManager {
ingredients.stream()
.filter { !it.isActuallyEmpty }
.map { it.items.stream().filter { it.isNotEmpty }.map(::RecipeEntry) },
ImmutableStack(it.value.getResultItem(server.registryAccess())),
ImmutableStack(it.value.resultItem),
isCritical = isCritical,
name = it.id,
allowBacktrack = allowBacktrack

View File

@ -68,11 +68,11 @@ abstract class MatteryCookingRecipe(
override fun isIncomplete(): Boolean = input.isActuallyEmpty || output.isActuallyEmpty
override fun assemble(container: Container, registry: RegistryAccess): ItemStack = outputStack.copy()
override fun assemble(container: Container): ItemStack = outputStack.copy()
override fun canCraftInDimensions(width: Int, height: Int): Boolean = true
override fun getResultItem(registry: RegistryAccess): ItemStack = outputStack
override fun getResultItem(): ItemStack = outputStack
abstract fun toFinished(): FinishedRecipe
}

View File

@ -0,0 +1,222 @@
package ru.dbotthepony.mc.otm.registry
import net.minecraft.network.chat.Component
import net.minecraft.world.damagesource.DamageSource
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.item.ItemStack
import net.minecraft.world.phys.Vec3
import ru.dbotthepony.mc.otm.core.TranslatableComponent
class ImmutableDamageSource(private val parent: DamageSource) : DamageSource(parent.msgId) {
override fun equals(other: Any?): Boolean {
return parent == other
}
override fun hashCode(): Int {
return parent.hashCode()
}
override fun toString(): String {
return parent.toString()
}
override fun isProjectile(): Boolean {
return parent.isProjectile
}
override fun setProjectile(): DamageSource {
throw UnsupportedOperationException()
}
override fun isExplosion(): Boolean {
return parent.isExplosion
}
override fun setExplosion(): DamageSource {
throw UnsupportedOperationException()
}
override fun isBypassArmor(): Boolean {
return parent.isBypassArmor
}
override fun isDamageHelmet(): Boolean {
return parent.isDamageHelmet
}
override fun getFoodExhaustion(): Float {
return parent.foodExhaustion
}
override fun isBypassInvul(): Boolean {
return parent.isBypassInvul
}
override fun isBypassMagic(): Boolean {
return parent.isBypassMagic
}
override fun getDirectEntity(): Entity? {
return parent.directEntity
}
override fun getEntity(): Entity? {
return parent.entity
}
override fun bypassArmor(): DamageSource {
throw UnsupportedOperationException()
}
override fun damageHelmet(): DamageSource {
throw UnsupportedOperationException()
}
override fun bypassInvul(): DamageSource {
throw UnsupportedOperationException()
}
override fun bypassMagic(): DamageSource {
throw UnsupportedOperationException()
}
override fun setIsFire(): DamageSource {
throw UnsupportedOperationException()
}
override fun setNoAggro(): DamageSource {
throw UnsupportedOperationException()
}
override fun getLocalizedDeathMessage(p_19343_: LivingEntity): Component {
return super.getLocalizedDeathMessage(p_19343_)
}
override fun isFire(): Boolean {
return parent.isFire
}
override fun isNoAggro(): Boolean {
return parent.isNoAggro
}
override fun getMsgId(): String {
return parent.getMsgId()
}
override fun setScalesWithDifficulty(): DamageSource {
throw UnsupportedOperationException()
}
override fun scalesWithDifficulty(): Boolean {
return parent.scalesWithDifficulty()
}
override fun isMagic(): Boolean {
return parent.isMagic
}
override fun setMagic(): DamageSource {
throw UnsupportedOperationException()
}
override fun isFall(): Boolean {
return parent.isFall
}
override fun setIsFall(): DamageSource {
throw UnsupportedOperationException()
}
override fun isCreativePlayer(): Boolean {
return parent.isCreativePlayer
}
override fun getSourcePosition(): Vec3? {
return parent.sourcePosition
}
}
abstract class MatteryDamageSource(name: String, private val entity: Entity? = null, val inflictor: ItemStack? = null) : DamageSource(name) {
override fun getLocalizedDeathMessage(victim: LivingEntity): Component {
val itemStack = inflictor ?: (entity as LivingEntity?)?.mainHandItem ?: ItemStack.EMPTY
if (!itemStack.isEmpty && itemStack.hasCustomHoverName()) {
return TranslatableComponent("death.attack.$msgId.player.item", victim.displayName, entity!!.displayName, itemStack.displayName)
}
if (entity != null) {
return TranslatableComponent("death.attack.$msgId.player", victim.displayName, entity.displayName)
}
return TranslatableComponent("death.attack.$msgId", victim.displayName)
}
final override fun getEntity(): Entity? {
return entity
}
}
class EMPDamageSource(entity: Entity? = null, inflictor: ItemStack? = null) : MatteryDamageSource(MRegistry.DAMAGE_EMP_NAME, entity, inflictor) {
init {
bypassArmor()
bypassMagic()
}
override fun scalesWithDifficulty(): Boolean {
return false
}
}
class ExopackDamageSource(entity: Entity? = null, inflictor: ItemStack? = null) : MatteryDamageSource(MRegistry.DAMAGE_EXOPACK_PROBE_ID, entity, inflictor) {
init {
bypassArmor()
bypassMagic()
bypassEnchantments()
}
override fun scalesWithDifficulty(): Boolean {
return false
}
}
class CosmicRaysDamageSource(entity: Entity? = null, inflictor: ItemStack? = null) : MatteryDamageSource(MRegistry.DAMAGE_COSMIC_RAYS_NAME, entity, inflictor) {
init {
bypassArmor()
bypassMagic()
bypassEnchantments()
}
override fun scalesWithDifficulty(): Boolean {
return false
}
}
class ExplosiveHammerDamageSource(entity: Entity? = null, inflictor: ItemStack? = null) : MatteryDamageSource(MRegistry.DAMAGE_EXPLOSIVE_HAMMER_NAME, entity, inflictor) {
override fun scalesWithDifficulty(): Boolean {
return false
}
}
class ShockwaveDamageSource(entity: Entity? = null, inflictor: ItemStack? = null) : MatteryDamageSource(MRegistry.DAMAGE_SHOCKWAVE_NAME, entity, inflictor) {
init {
bypassArmor()
}
override fun scalesWithDifficulty(): Boolean {
return false
}
}
class PlasmaDamageSource(entity: Entity? = null, inflictor: ItemStack? = null) : MatteryDamageSource(MRegistry.DAMAGE_PLASMA_NAME, entity, inflictor) {
override fun scalesWithDifficulty(): Boolean {
return false
}
}
class HammerNailDamageSource(entity: Entity? = null, inflictor: ItemStack? = null) : MatteryDamageSource(MRegistry.DAMAGE_HAMMER_NAIL_NAME, entity, inflictor) {
override fun scalesWithDifficulty(): Boolean {
return false
}
}

View File

@ -3,6 +3,7 @@ package ru.dbotthepony.mc.otm.registry
import net.minecraft.ChatFormatting
import net.minecraft.core.BlockPos
import net.minecraft.network.chat.Component
import net.minecraft.sounds.SoundEvents
import net.minecraft.util.valueproviders.UniformInt
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.EntityType
@ -25,11 +26,8 @@ import net.minecraft.world.level.block.TrapDoorBlock
import net.minecraft.world.level.block.WallBlock
import net.minecraft.world.level.block.state.BlockBehaviour
import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.block.state.properties.BlockSetType
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument
import net.minecraft.world.level.material.Material
import net.minecraft.world.level.material.MaterialColor
import net.minecraft.world.level.material.PushReaction
import net.minecraftforge.eventbus.api.IEventBus
import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistries
@ -229,7 +227,7 @@ object MBlocks {
.noOcclusion()
.destroyTime(3f)
.requiresCorrectToolForDrops(),
BlockSetType.IRON
SoundEvents.IRON_DOOR_CLOSE, SoundEvents.IRON_DOOR_OPEN
) {
override fun appendHoverText(
p_49816_: ItemStack,
@ -264,7 +262,7 @@ object MBlocks {
.noOcclusion().destroyTime(3f)
.requiresCorrectToolForDrops()
.isValidSpawn { _: BlockState, _: BlockGetter, _: BlockPos, _: EntityType<*>? -> false },
BlockSetType.IRON
SoundEvents.IRON_DOOR_CLOSE, SoundEvents.IRON_DOOR_OPEN
) {
override fun appendHoverText(
p_49816_: ItemStack,

View File

@ -3,16 +3,16 @@ package ru.dbotthepony.mc.otm.registry
import net.minecraft.world.damagesource.DamageSource
object MDamageTypes {
val BECOME_ANDROID = DamageSource("become_android")
val BECOME_HUMANE = DamageSource("become_humane")
val EVENT_HORIZON = DamageSource("event_horizon")
val HAWKING_RADIATION = DamageSource("hawking_radiation")
val EXOPACK_PROBE = DamageSource("exopack_probe")
val EMP = DamageSource("emp")
val SHOCKWAVE = DamageSource("shockwave")
val PLASMA = DamageSource("plasma")
val COSMIC_RAYS = DamageSource("cosmic_rays")
val EXPLOSIVE_HAMMER = DamageSource("explosive_hammer")
val HAMMER_NAIL = DamageSource("hammer_nail")
val ANDROID_DISCHARGE = DamageSource("android_discharge")
val BECOME_ANDROID = ImmutableDamageSource(DamageSource("become_android").bypassArmor().bypassInvul().bypassMagic().bypassEnchantments())
val BECOME_HUMANE = ImmutableDamageSource(DamageSource("become_humane").bypassArmor().bypassInvul().bypassMagic().bypassEnchantments())
val EVENT_HORIZON = ImmutableDamageSource(DamageSource("event_horizon").bypassArmor())
val HAWKING_RADIATION = ImmutableDamageSource(DamageSource("hawking_radiation").bypassArmor())
val EXOPACK_PROBE = ImmutableDamageSource(DamageSource("exopack_probe").bypassArmor().bypassMagic().bypassEnchantments())
val EMP = ImmutableDamageSource(DamageSource("emp").bypassArmor())
val SHOCKWAVE = ImmutableDamageSource(DamageSource("shockwave").bypassArmor())
val PLASMA = ImmutableDamageSource(DamageSource("plasma"))
val COSMIC_RAYS = ImmutableDamageSource(DamageSource("cosmic_rays").bypassArmor().bypassMagic().bypassEnchantments())
val EXPLOSIVE_HAMMER = ImmutableDamageSource(DamageSource("explosive_hammer"))
val HAMMER_NAIL = ImmutableDamageSource(DamageSource("hammer_nail"))
val ANDROID_DISCHARGE = ImmutableDamageSource(DamageSource("android_discharge").bypassArmor().bypassInvul().bypassMagic().bypassEnchantments())
}

View File

@ -221,6 +221,18 @@ object MRegistry {
WallBlock(BlockBehaviour.Properties.copy(TRITANIUM_STRIPED_BLOCK.getBlock(colorA, colorB)))
})
const val DAMAGE_BECOME_ANDROID_ID = "otm_become_android"
const val DAMAGE_BECOME_HUMANE_ID = "otm_become_humane"
const val DAMAGE_EVENT_HORIZON_ID = "otm_event_horizon"
const val DAMAGE_HAWKING_RADIATION_ID = "otm_hawking_radiation"
const val DAMAGE_EXOPACK_PROBE_ID = "otm_exopack_probe"
const val DAMAGE_EMP_NAME = "otm_emp"
const val DAMAGE_SHOCKWAVE_NAME = "otm_shockwave"
const val DAMAGE_PLASMA_NAME = "otm_plasma"
const val DAMAGE_COSMIC_RAYS_NAME = "otm_cosmic_rays"
const val DAMAGE_EXPLOSIVE_HAMMER_NAME = "otm_explosive_hammer"
const val DAMAGE_HAMMER_NAIL_NAME = "otm_hammer_nail"
private fun registerEvent(event: RegisterEvent) {
// mojang moment

View File

@ -1,35 +0,0 @@
package ru.dbotthepony.mc.otm.registry
import net.minecraft.core.Holder
import net.minecraft.network.chat.Component
import net.minecraft.world.damagesource.DamageSource
import net.minecraft.world.damagesource.DamageType
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.item.ItemStack
import net.minecraft.world.phys.Vec3
import ru.dbotthepony.mc.otm.core.TranslatableComponent
class MatteryDamageSource(
type: Holder<DamageType>,
entity: Entity? = null,
inflictor: ItemStack? = null,
entityInflictor: Entity? = null,
pos: Vec3? = null
) : DamageSource(type, entity, entityInflictor, pos) {
val inflictor = inflictor?.copy()
override fun getLocalizedDeathMessage(victim: LivingEntity): Component {
val itemStack = inflictor ?: (entity as? LivingEntity)?.mainHandItem ?: ItemStack.EMPTY
if (!itemStack.isEmpty && itemStack.hasCustomHoverName()) {
return TranslatableComponent("death.attack.$msgId.player.item", victim.displayName, entity!!.displayName, itemStack.displayName)
}
if (entity != null) {
return TranslatableComponent("death.attack.$msgId.player", victim.displayName, entity!!.displayName)
}
return TranslatableComponent("death.attack.$msgId", victim.displayName)
}
}

View File

@ -190,3 +190,10 @@ public net.minecraft.advancements.critereon.DamagePredicate f_24903_ # dealtDama
public net.minecraft.advancements.critereon.DamagePredicate f_24905_ # sourceEntity
public net.minecraft.advancements.critereon.DamagePredicate f_24904_ # takenDamage
public net.minecraft.advancements.critereon.DamagePredicate f_24907_ # type
public net.minecraft.world.item.crafting.UpgradeRecipe f_44519_ # addition
public net.minecraft.world.item.crafting.UpgradeRecipe f_44518_ # base
public net.minecraft.world.item.crafting.UpgradeRecipe f_44521_ # id
public net.minecraft.world.item.crafting.UpgradeRecipe f_44520_ # result
public net.minecraft.client.gui.components.AbstractWidget m_93696_()Z # isFocused