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 jupiter_version=5.9.2
curios_version=4440173 curios_version=4440173
cosmetic_armor_reworked_id=4439659 cosmetic_armor_reworked_id=4439659
ad_astra_id=4594155 ad_astra_id=4452072
botarium_id=4594094 botarium_id=4416456
resourceful_lib_id=4598948 resourceful_lib_id=4378849
resourceful_config_id=4576455 resourceful_config_id=4441381
jade_id=4434045 jade_id=4434045
configured_id=4462894 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) event.generator.addProvider(event.includeServer(), matterData)
val registrySetBuilder = RegistrySetBuilder() val registrySetBuilder = RegistrySetBuilder()
.add(Registries.DAMAGE_TYPE, ::registerDamageTypes)
.add(Registries.CONFIGURED_FEATURE, ::registerConfiguredFeatures) .add(Registries.CONFIGURED_FEATURE, ::registerConfiguredFeatures)
.add(Registries.PLACED_FEATURE, ::registerPlacedFeatures) .add(Registries.PLACED_FEATURE, ::registerPlacedFeatures)
event.generator.addProvider(event.includeServer(), DatapackBuiltinEntriesProvider(event.generator.packOutput, event.lookupProvider, registrySetBuilder, setOf(MOD_ID))) event.generator.addProvider(event.includeServer(), DatapackBuiltinEntriesProvider(event.generator.packOutput, event.lookupProvider, registrySetBuilder, setOf(MOD_ID)))
registerDamageTypeTags(tagsProvider.damageTypes)
AddEnglishLanguage(languageProvider) AddEnglishLanguage(languageProvider)
AddRussianLanguage(languageProvider) AddRussianLanguage(languageProvider)

View File

@ -30,7 +30,7 @@ open class AndroidFeatureType<T : AndroidFeature> {
} }
open val displayContents: ComponentContents by lazy { open val displayContents: ComponentContents by lazy {
TranslatableContents(displayId, null, arrayOf()) TranslatableContents(displayId)
} }
open val displayName: Component by lazy { 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.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.MDamageTypes import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MSoundEvents 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.ShockwaveDamageMobTrigger
import ru.dbotthepony.mc.otm.triggers.ShockwaveTrigger import ru.dbotthepony.mc.otm.triggers.ShockwaveTrigger
import kotlin.math.pow import kotlin.math.pow
@ -121,7 +121,7 @@ class ShockwaveFeature(capability: MatteryPlayerCapability) : AndroidSwitchableF
seen.add(entity) seen.add(entity)
val multiplier = (1.0 - distanceMultiplier).pow(0.5) 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() val damage = multiplier.toFloat() * AndroidConfig.Shockwave.DAMAGE.toFloat() * AndroidConfig.Shockwave.WARDEN_DAMAGE_MULT.toFloat()
entity.hurt(source, damage) entity.hurt(source, damage)
entity.deltaMovement += (entity.position - ply.position).normalize() * (multiplier * 3.0) 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 // don't hurt items, arrows, etc etc
if (entity is LivingEntity) { 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() val damage = multiplier.toFloat() * AndroidConfig.Shockwave.DAMAGE.toFloat()
entity.hurt(source, damage) entity.hurt(source, damage)
entity.deltaMovement += (entity.position - ply.position).normalize() * (multiplier * 3.0) 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.item.TooltipFlag
import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.BlockGetter
import net.minecraft.world.level.Level 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.BasePressurePlateBlock
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.SoundType 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.TranslatableComponent
import ru.dbotthepony.mc.otm.core.get 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( override fun appendHoverText(
p_49816_: ItemStack, p_49816_: ItemStack,
p_49817_: BlockGetter?, p_49817_: BlockGetter?,
@ -42,6 +43,14 @@ class TritaniumPressurePlate(color: DyeColor?) : BasePressurePlateBlock(Properti
p_49915_.add(BlockStateProperties.POWERED) 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 { override fun getSignalStrength(level: Level, pos: BlockPos): Int {
if (level.getEntitiesOfClass(ServerPlayer::class.java, TOUCH_AABB.move(pos)).isNotEmpty()) { if (level.getEntitiesOfClass(ServerPlayer::class.java, TOUCH_AABB.move(pos)).isNotEmpty()) {
return 15 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.Entity
import net.minecraft.world.entity.EquipmentSlot import net.minecraft.world.entity.EquipmentSlot
import net.minecraft.world.entity.LivingEntity 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.item.ItemEntity
import net.minecraft.world.entity.player.Player import net.minecraft.world.entity.player.Player
import net.minecraft.world.level.Level 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.AABB
import net.minecraft.world.phys.Vec3 import net.minecraft.world.phys.Vec3
import net.minecraftforge.common.Tags import net.minecraftforge.common.Tags
import net.minecraftforge.registries.ForgeRegistries
import ru.dbotthepony.mc.otm.block.BlackHoleBlock import ru.dbotthepony.mc.otm.block.BlackHoleBlock
import ru.dbotthepony.mc.otm.block.entity.tech.GravitationStabilizerBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.GravitationStabilizerBlockEntity
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
import ru.dbotthepony.mc.otm.block.entity.blackhole.ExplosionQueue.Companion.queueForLevel import ru.dbotthepony.mc.otm.block.entity.blackhole.ExplosionQueue.Companion.queueForLevel
import ru.dbotthepony.mc.otm.config.ServerConfig 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.getExplosionResistance
import ru.dbotthepony.mc.otm.core.gracefulBlockBreak import ru.dbotthepony.mc.otm.core.gracefulBlockBreak
import ru.dbotthepony.mc.otm.core.math.Decimal 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.core.nbt.set
import ru.dbotthepony.mc.otm.matter.MatterManager import ru.dbotthepony.mc.otm.matter.MatterManager
import ru.dbotthepony.mc.otm.registry.MDamageTypes import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.triggers.BlackHoleTrigger import ru.dbotthepony.mc.otm.triggers.BlackHoleTrigger
import kotlin.math.pow import kotlin.math.pow
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -121,7 +117,7 @@ class BlackHoleBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : Mattery
} else { } else {
level.explode( level.explode(
null, null,
MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.HAWKING_RADIATION)), MDamageTypes.HAWKING_RADIATION,
null, null,
blockPos.x + 0.5, blockPos.x + 0.5,
blockPos.y + 0.5, blockPos.y + 0.5,
@ -240,7 +236,7 @@ class BlackHoleBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : Mattery
} }
if (distance < gravitationStrength + 1.0) { if (distance < gravitationStrength + 1.0) {
val source = MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EVENT_HORIZON)) val source = MDamageTypes.EVENT_HORIZON
val damage = (gravitationStrength / distance).toFloat() val damage = (gravitationStrength / distance).toFloat()
if (living is Player) { if (living is Player) {
@ -258,7 +254,7 @@ class BlackHoleBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : Mattery
setDeltaMovement(item, center, distance) setDeltaMovement(item, center, distance)
if (distance < gravitationStrength + 1) { 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) { if (item.item.item === MItems.GRAVITATIONAL_DISRUPTOR) {
collapse() collapse()
} else { } else {

View File

@ -6,7 +6,6 @@ import net.minecraft.nbt.DoubleTag
import net.minecraft.nbt.ListTag import net.minecraft.nbt.ListTag
import net.minecraft.nbt.Tag import net.minecraft.nbt.Tag
import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerLevel
import net.minecraft.util.datafix.DataFixTypes
import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.BlockGetter
import net.minecraft.world.level.Explosion import net.minecraft.world.level.Explosion
import net.minecraft.world.level.ExplosionDamageCalculator 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.math.up
import ru.dbotthepony.mc.otm.core.nbt.set import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.registry.MDamageTypes 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 java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
import kotlin.collections.HashMap 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) { fun explode(level: Level) {
level.explode( level.explode(
null, null,
MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.HAWKING_RADIATION)), MDamageTypes.HAWKING_RADIATION,
BlackHoleExplosionDamageCalculator, BlackHoleExplosionDamageCalculator,
x, x,
y, y,

View File

@ -128,7 +128,7 @@ class PoweredFurnaceBlockEntity(
return JobContainer.success( return JobContainer.success(
ItemJob( ItemJob(
recipe.getResultItem(level.registryAccess()).copyWithCount(toProcess), recipe.getResultItem().copyWithCount(toProcess),
recipe.workTime * MachinesConfig.PLATE_PRESS.workTimeMultiplier, recipe.workTime * MachinesConfig.PLATE_PRESS.workTimeMultiplier,
MachinesConfig.PLATE_PRESS.energyConsumption * toProcess, MachinesConfig.PLATE_PRESS.energyConsumption * toProcess,
experience = recipe.experience.sample(level.random) * 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.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry 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.AndroidResearchTrigger
import ru.dbotthepony.mc.otm.triggers.AndroidTravelUnderwater import ru.dbotthepony.mc.otm.triggers.AndroidTravelUnderwater
import ru.dbotthepony.mc.otm.triggers.BecomeAndroidDeathTrigger import ru.dbotthepony.mc.otm.triggers.BecomeAndroidDeathTrigger
@ -532,7 +531,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
return JobContainer.noItem() return JobContainer.noItem()
} else { } else {
val actual = recipe.get() val actual = recipe.get()
val item = actual.value.assemble(input, level.registryAccess()) val item = actual.value.assemble(input)
input[0].shrink(1) input[0].shrink(1)
input.setChanged(0) input.setChanged(0)
return JobContainer.success(ItemJob(item, actual.value.cookingTime.toDouble(), ExopackConfig.FURNACE_POWER_CONSUMPTION, actual.value.experience)) 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() becomeAndroid()
if (!ply.abilities.invulnerable) 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() becomeHumane()
if (!ply.abilities.invulnerable) 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 (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 nextDischargeHurt = 20
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -314,7 +314,7 @@ private class AndroidResearchButton(
val stack = graphics.pose val stack = graphics.pose
stack.pushPose() stack.pushPose()
stack.translate(1f, 1f, 0f) stack.translate(1f, 1f, 0f)
screen.renderItemStack(graphics, itemstack) screen.renderItemStack(absoluteX + 1, absoluteY + 1, itemstack)
stack.popPose() stack.popPose()
clearDepth(graphics) 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.Planet
import earth.terrarium.ad_astra.common.data.PlanetData import earth.terrarium.ad_astra.common.data.PlanetData
import earth.terrarium.ad_astra.common.item.armor.SpaceSuit 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.minecraft.world.entity.player.Player
import net.minecraftforge.event.entity.living.LivingHurtEvent import net.minecraftforge.event.entity.living.LivingHurtEvent
import net.minecraftforge.fml.ModList import net.minecraftforge.fml.ModList
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.config.ServerCompatConfig import ru.dbotthepony.mc.otm.config.ServerCompatConfig
import ru.dbotthepony.mc.otm.core.damageType import ru.dbotthepony.mc.otm.registry.CosmicRaysDamageSource
import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
val isAdAstraLoaded by lazy { val isAdAstraLoaded by lazy {
ModList.get().isLoaded(AdAstra.MOD_ID) ModList.get().isLoaded(AdAstra.MOD_ID)
@ -28,7 +26,7 @@ fun onDamageEvent(event: LivingHurtEvent) {
if (ServerCompatConfig.AdAstra.ANDROIDS_DO_NOT_NEED_OXYGEN) { if (ServerCompatConfig.AdAstra.ANDROIDS_DO_NOT_NEED_OXYGEN) {
if (ply.matteryPlayer?.isAndroid != true) return if (ply.matteryPlayer?.isAndroid != true) return
if (event.source.`is`(ModDamageSources.OXYGEN)) { if (event.source == ModDamageSource.OXYGEN) {
event.amount = 0f event.amount = 0f
event.isCanceled = true event.isCanceled = true
} }
@ -52,7 +50,7 @@ fun onMatteryTick(event: MatteryPlayerCapability.PostTick) {
val yesTritanium = yesTritanium0 + yesTritanium1 val yesTritanium = yesTritanium0 + yesTritanium1
if (rand.nextDouble() <= (noSpacesuits - yesTritanium) * ServerCompatConfig.AdAstra.ANDROID_COSMIC_RAYS_CHANCE) { 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 // 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 TextComponent(value: String): MutableComponent = MutableComponent.create(LiteralContents(value))
fun <T> IForgeRegistry<T>.getKeyNullable(value: T): ResourceLocation? { 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.EntityHitResult
import net.minecraft.world.phys.HitResult import net.minecraft.world.phys.HitResult
import net.minecraftforge.event.ForgeEventFactory 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.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MEntityTypes 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) { class PlasmaProjectile(level: Level) : Projectile(MEntityTypes.PLASMA as EntityType<out Projectile>, level) {
var inflictor: ItemStack? = null var inflictor: ItemStack? = null
@ -38,7 +37,7 @@ class PlasmaProjectile(level: Level) : Projectile(MEntityTypes.PLASMA as EntityT
super.onHitEntity(p_37259_) super.onHitEntity(p_37259_)
if (!level.isClientSide) { 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.config.ItemsConfig
import ru.dbotthepony.mc.otm.core.* import ru.dbotthepony.mc.otm.core.*
import ru.dbotthepony.mc.otm.core.math.Decimal 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.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.runIfClient import ru.dbotthepony.mc.otm.runIfClient
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -171,7 +171,7 @@ class CrudeBatteryItem : BatteryItem(ItemsConfig.Batteries.CRUDE) {
mattery.androidEnergy.item = copyStack mattery.androidEnergy.item = copyStack
val extraDamageMult = level.random.nextFloat() 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() val debuffDuration = 100 + (100 * (1f - extraDamageMult)).roundToInt()
player.addEffect(MobEffectInstance(MobEffects.BLINDNESS, debuffDuration), player) 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.Container
import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionHand
import net.minecraft.world.InteractionResult import net.minecraft.world.InteractionResult
import net.minecraft.world.damagesource.DamageSource
import net.minecraft.world.entity.vehicle.AbstractMinecart import net.minecraft.world.entity.vehicle.AbstractMinecart
import net.minecraft.world.entity.vehicle.MinecartChest import net.minecraft.world.entity.vehicle.MinecartChest
import net.minecraft.world.item.* import net.minecraft.world.item.*
@ -155,7 +156,7 @@ class ChestUpgraderItem : Item(Properties().stacksTo(1)) {
} }
cart.clearContent() cart.clearContent()
(cart as AbstractMinecart).destroy(cart.damageSources().generic()) (cart as AbstractMinecart).destroy(DamageSource.GENERIC)
level.addFreshEntity(newCart) level.addFreshEntity(newCart)
level.gameEvent(GameEvent.ENTITY_PLACE, event.pos, GameEvent.Context.of(event.entity, level.getBlockState(event.pos.below()))) 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.onceServer
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.client.minecraft 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.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.runIfClient import ru.dbotthepony.mc.otm.runIfClient
class ExopackProbeItem : Item(Properties().stacksTo(1).rarity(Rarity.EPIC)) { 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.granted1").withStyle(ChatFormatting.GRAY), false)
player.displayClientMessage(TranslatableComponent("otm.exopack.granted2").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) { for (i in 3 .. 7) {
onceServer((i - 1) * 100) { 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.*
import ru.dbotthepony.mc.otm.core.math.* import ru.dbotthepony.mc.otm.core.math.*
import ru.dbotthepony.mc.otm.core.nbt.set 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.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger
import java.util.function.Predicate 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) { if (player.random.nextDouble() <= ToolsConfig.ExplosiveHammer.FLY_OFF_DAMAGE_CHANCE) {
player.invulnerableTime = 0 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) 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) itemStack.shrink(itemStack.count)
} else if (player.random.nextDouble() <= ToolsConfig.ExplosiveHammer.SELF_HARM_CHANCE) { } else if (player.random.nextDouble() <= ToolsConfig.ExplosiveHammer.SELF_HARM_CHANCE) {
player.invulnerableTime = 0 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) 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 rayBox = aabb.move(rayPos)
val entities = level.getEntities(null, rayBox) { it is LivingEntity && it.isAlive && !it.isSpectator && hitEntities.add(it) } as List<LivingEntity> 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) { for (it in entities) {
val damage = canTravel * ToolsConfig.ExplosiveHammer.TRAVEL_DAMAGE_MULT 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) { if (attacker.random.nextDouble() <= ToolsConfig.ExplosiveHammer.FLY_OFF_DAMAGE_CHANCE) {
attacker.invulnerableTime = 0 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) 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) { } else if (attacker.random.nextDouble() <= ToolsConfig.ExplosiveHammer.SELF_HARM_CHANCE) {
attacker.invulnerableTime = 0 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) 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.core.BlockPos
import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.CompoundTag
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import net.minecraft.tags.BlockTags
import net.minecraft.world.entity.EquipmentSlot import net.minecraft.world.entity.EquipmentSlot
import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.ai.attributes.Attribute 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.Decimal
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
import ru.dbotthepony.mc.otm.core.TranslatableComponent 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.math.defineDecimal
import ru.dbotthepony.mc.otm.core.ifPresentK import ru.dbotthepony.mc.otm.core.ifPresentK
import ru.dbotthepony.mc.otm.core.math.nextVariance import ru.dbotthepony.mc.otm.core.math.nextVariance
import ru.dbotthepony.mc.otm.core.orNull import ru.dbotthepony.mc.otm.core.orNull
import ru.dbotthepony.mc.otm.core.util.WriteOnce 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.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
@ -108,7 +107,7 @@ class EnergySwordItem : Item(Properties().stacksTo(1).rarity(Rarity.RARE)), Vani
victim.matteryPlayer?.let { victim.matteryPlayer?.let {
if (it.isAndroid) { if (it.isAndroid) {
victim.invulnerableTime = 0 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 { victim.matteryPlayer?.let {
if (it.isAndroid && it.androidEnergy.extractEnergyExact(ENERGY_ZAP, false)) { if (it.isAndroid && it.androidEnergy.extractEnergyExact(ENERGY_ZAP, false)) {
it.androidEnergy.extractEnergy(attacker.level.random.nextVariance(ENERGY_ZAP_VARIANCE), 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.Ingredient
import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.RecipeType 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.minecraft.world.level.ItemLike
import net.minecraftforge.common.capabilities.ForgeCapabilities import net.minecraftforge.common.capabilities.ForgeCapabilities
import net.minecraftforge.common.crafting.IShapedRecipe 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 = 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 { try {
ResolvedRecipe( ResolvedRecipe(
it.value.ingredients.stream() it.value.ingredients.stream()
.filter { !it.isActuallyEmpty } .filter { !it.isActuallyEmpty }
.map { it.items.stream().filter { it.isNotEmpty }.map(::RecipeEntry) }, .map { it.items.stream().filter { it.isNotEmpty }.map(::RecipeEntry) },
ImmutableStack(it.value.getResultItem(server.registryAccess())), ImmutableStack(it.value.getResultItem()),
isCritical = isCritical, isCritical = isCritical,
name = it.id, name = it.id,
allowBacktrack = allowBacktrack allowBacktrack = allowBacktrack
@ -500,7 +500,7 @@ object MatterManager {
stream.map { stream.map {
try { try {
// avoid reality snap when recipe has no output // avoid reality snap when recipe has no output
val resultItem = it.value.getResultItem(server.registryAccess()) val resultItem = it.value.getResultItem()
if (resultItem.isEmpty) { if (resultItem.isEmpty) {
null null
@ -549,7 +549,7 @@ object MatterManager {
for (item in it.value.ingredients[c].items) { for (item in it.value.ingredients[c].items) {
container[c] = item container[c] = item
if (!it.value.assemble(container, server.registryAccess()).isEmpty) { if (!it.value.assemble(container).isEmpty) {
val residue = it.value.getRemainingItems(container) val residue = it.value.getRemainingItems(container)
val thisResidue = residue[c] val thisResidue = residue[c]
@ -604,13 +604,13 @@ object MatterManager {
val allowBacktrack = data["allow_backtrack"]?.asBoolean ?: true val allowBacktrack = data["allow_backtrack"]?.asBoolean ?: true
var stream = server.recipeManager.byType(findRecipeType).values.stream().filter { !it.value.isIncomplete } 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 { try {
val ingredients = ArrayList<Ingredient>() val ingredients = ArrayList<Ingredient>()
val recipe = it.value as SmithingTransformRecipe val recipe = it.value as UpgradeRecipe
ingredients.add(recipe.base) ingredients.add(recipe.base)
ingredients.add(recipe.addition) ingredients.add(recipe.addition)
@ -619,7 +619,7 @@ object MatterManager {
ingredients.stream() ingredients.stream()
.filter { !it.isActuallyEmpty } .filter { !it.isActuallyEmpty }
.map { it.items.stream().filter { it.isNotEmpty }.map(::RecipeEntry) }, .map { it.items.stream().filter { it.isNotEmpty }.map(::RecipeEntry) },
ImmutableStack(it.value.getResultItem(server.registryAccess())), ImmutableStack(it.value.resultItem),
isCritical = isCritical, isCritical = isCritical,
name = it.id, name = it.id,
allowBacktrack = allowBacktrack allowBacktrack = allowBacktrack

View File

@ -68,11 +68,11 @@ abstract class MatteryCookingRecipe(
override fun isIncomplete(): Boolean = input.isActuallyEmpty || output.isActuallyEmpty 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 canCraftInDimensions(width: Int, height: Int): Boolean = true
override fun getResultItem(registry: RegistryAccess): ItemStack = outputStack override fun getResultItem(): ItemStack = outputStack
abstract fun toFinished(): FinishedRecipe 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.ChatFormatting
import net.minecraft.core.BlockPos import net.minecraft.core.BlockPos
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import net.minecraft.sounds.SoundEvents
import net.minecraft.util.valueproviders.UniformInt import net.minecraft.util.valueproviders.UniformInt
import net.minecraft.world.entity.Entity import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.EntityType 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.WallBlock
import net.minecraft.world.level.block.state.BlockBehaviour import net.minecraft.world.level.block.state.BlockBehaviour
import net.minecraft.world.level.block.state.BlockState 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.Material
import net.minecraft.world.level.material.MaterialColor import net.minecraft.world.level.material.MaterialColor
import net.minecraft.world.level.material.PushReaction
import net.minecraftforge.eventbus.api.IEventBus import net.minecraftforge.eventbus.api.IEventBus
import net.minecraftforge.registries.DeferredRegister import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistries import net.minecraftforge.registries.ForgeRegistries
@ -229,7 +227,7 @@ object MBlocks {
.noOcclusion() .noOcclusion()
.destroyTime(3f) .destroyTime(3f)
.requiresCorrectToolForDrops(), .requiresCorrectToolForDrops(),
BlockSetType.IRON SoundEvents.IRON_DOOR_CLOSE, SoundEvents.IRON_DOOR_OPEN
) { ) {
override fun appendHoverText( override fun appendHoverText(
p_49816_: ItemStack, p_49816_: ItemStack,
@ -264,7 +262,7 @@ object MBlocks {
.noOcclusion().destroyTime(3f) .noOcclusion().destroyTime(3f)
.requiresCorrectToolForDrops() .requiresCorrectToolForDrops()
.isValidSpawn { _: BlockState, _: BlockGetter, _: BlockPos, _: EntityType<*>? -> false }, .isValidSpawn { _: BlockState, _: BlockGetter, _: BlockPos, _: EntityType<*>? -> false },
BlockSetType.IRON SoundEvents.IRON_DOOR_CLOSE, SoundEvents.IRON_DOOR_OPEN
) { ) {
override fun appendHoverText( override fun appendHoverText(
p_49816_: ItemStack, p_49816_: ItemStack,

View File

@ -3,16 +3,16 @@ package ru.dbotthepony.mc.otm.registry
import net.minecraft.world.damagesource.DamageSource import net.minecraft.world.damagesource.DamageSource
object MDamageTypes { object MDamageTypes {
val BECOME_ANDROID = DamageSource("become_android") val BECOME_ANDROID = ImmutableDamageSource(DamageSource("become_android").bypassArmor().bypassInvul().bypassMagic().bypassEnchantments())
val BECOME_HUMANE = DamageSource("become_humane") val BECOME_HUMANE = ImmutableDamageSource(DamageSource("become_humane").bypassArmor().bypassInvul().bypassMagic().bypassEnchantments())
val EVENT_HORIZON = DamageSource("event_horizon") val EVENT_HORIZON = ImmutableDamageSource(DamageSource("event_horizon").bypassArmor())
val HAWKING_RADIATION = DamageSource("hawking_radiation") val HAWKING_RADIATION = ImmutableDamageSource(DamageSource("hawking_radiation").bypassArmor())
val EXOPACK_PROBE = DamageSource("exopack_probe") val EXOPACK_PROBE = ImmutableDamageSource(DamageSource("exopack_probe").bypassArmor().bypassMagic().bypassEnchantments())
val EMP = DamageSource("emp") val EMP = ImmutableDamageSource(DamageSource("emp").bypassArmor())
val SHOCKWAVE = DamageSource("shockwave") val SHOCKWAVE = ImmutableDamageSource(DamageSource("shockwave").bypassArmor())
val PLASMA = DamageSource("plasma") val PLASMA = ImmutableDamageSource(DamageSource("plasma"))
val COSMIC_RAYS = DamageSource("cosmic_rays") val COSMIC_RAYS = ImmutableDamageSource(DamageSource("cosmic_rays").bypassArmor().bypassMagic().bypassEnchantments())
val EXPLOSIVE_HAMMER = DamageSource("explosive_hammer") val EXPLOSIVE_HAMMER = ImmutableDamageSource(DamageSource("explosive_hammer"))
val HAMMER_NAIL = DamageSource("hammer_nail") val HAMMER_NAIL = ImmutableDamageSource(DamageSource("hammer_nail"))
val ANDROID_DISCHARGE = DamageSource("android_discharge") 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))) 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) { private fun registerEvent(event: RegisterEvent) {
// mojang moment // 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_24905_ # sourceEntity
public net.minecraft.advancements.critereon.DamagePredicate f_24904_ # takenDamage public net.minecraft.advancements.critereon.DamagePredicate f_24904_ # takenDamage
public net.minecraft.advancements.critereon.DamagePredicate f_24907_ # type 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