diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 1fad353c2..0aaba5826 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -542,22 +542,22 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json d4cdc38cd19460fd9ba866f3ad3b2e4bd014cb98 assets/create/lang/en_ud.json -4ed8b6910b0787d9bfa3b1a3f9e891d67b9b8af6 assets/create/lang/en_us.json -780146d410f9416463587eb29c5ddd3ceda3df6b assets/create/lang/unfinished/de_de.json -43e74873dff9c74b965d71a096390f1300d96d75 assets/create/lang/unfinished/es_cl.json -caabbb6bbfed8b399ba71497a6ccf7de7b196264 assets/create/lang/unfinished/es_es.json -c66402dc057027d4a1a972830ae8f13812f70726 assets/create/lang/unfinished/fr_fr.json -367ceab5da165c8d52842337300a55f2238d8d93 assets/create/lang/unfinished/it_it.json -1371fe6852059b897b364de723663ba652b7690f assets/create/lang/unfinished/ja_jp.json -9ffb5cd3e5298a6b6d3d8eafb7b6be708390e375 assets/create/lang/unfinished/ko_kr.json -ddb5b7d7d8b8d798caca64ff4c26c28f223f8771 assets/create/lang/unfinished/nl_nl.json -b1eb44b1d043fd64b6d9d0455da939af893526c5 assets/create/lang/unfinished/pl_pl.json -695732ec36cf7b39e1dcf467a58e9b438bbf52d5 assets/create/lang/unfinished/pt_br.json -1b1dbd8df62df4424b6d576ad1ce8f0986829d4e assets/create/lang/unfinished/pt_pt.json -9a92874e612ddc59a7420bf401d719f792ac9467 assets/create/lang/unfinished/ro_ro.json -f0b799b93634d61d7799808d137003ab8c67c2c4 assets/create/lang/unfinished/ru_ru.json -b29afaece334e84972afc027f00b53e6d2501ebf assets/create/lang/unfinished/zh_cn.json -aa016cb464bd32865ef05034ad3bf317c14d7cdf assets/create/lang/unfinished/zh_tw.json +4111057d7de305bffb7133afbaea0aea45f7ce79 assets/create/lang/en_us.json +818f913210c5d3e21189a092759b4927ee032564 assets/create/lang/unfinished/de_de.json +23cb78876cf0892edc3b5b11d772d27969773b1c assets/create/lang/unfinished/es_cl.json +8d15c0a8f7d996667c6e38b2f84ed88542344929 assets/create/lang/unfinished/es_es.json +17ae724dfe4ca23b2e39157a9361b38094445e64 assets/create/lang/unfinished/fr_fr.json +c4a51cbb988e18ca1379eeb7256b70743df49bc2 assets/create/lang/unfinished/it_it.json +04d821a172dabdecc6d20eb44f409e9409e5066a assets/create/lang/unfinished/ja_jp.json +816a0b1dbc98a5ebdc013a19c1827dcff0f60461 assets/create/lang/unfinished/ko_kr.json +5ee0cf289312ad91cae5d3bf8e50b1aacb7e6508 assets/create/lang/unfinished/nl_nl.json +f35b613037e9d99dbeee151c1835222c26ce7b74 assets/create/lang/unfinished/pl_pl.json +436da9779b9e9cb943f88999fd77dad71f80779c assets/create/lang/unfinished/pt_br.json +80778b15cf9c92fd1baac3577d791ef7254aa080 assets/create/lang/unfinished/pt_pt.json +9175aa77343034a6cb50203d7ed26513ea1938b0 assets/create/lang/unfinished/ro_ro.json +95f7979d258cd2ddfc4166cae526b3571d17c630 assets/create/lang/unfinished/ru_ru.json +e0e311ce6878a910e9a14eef36c9d5faa6ff780b assets/create/lang/unfinished/zh_cn.json +bbdeb59c2b294eb6ef98aa75b610795f75a4dd7b assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 37c27255f..dbd3ef7a9 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -816,6 +816,7 @@ "death.attack.create.potato_cannon.item": "%1$s was shot by %2$s using %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock", "death.attack.create.cuckoo_clock_explosion.player": "%1$s was blown up by tampered cuckoo clock", + "death.attack.create.run_over": "%1$s was run over by %2$s", "create.block.deployer.damage_source_name": "a rogue Deployer", "create.block.cart_assembler.invalid": "Place your Cart Assembler on a rail block", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 45afee0cf..8c8585a46 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1528", + "_": "Missing Localizations: 1529", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "UNLOCALIZED: %1$s was shot by %2$s using %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s wurde durch eine falsche Kuckucksuhr gesprengt", "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "einem Finger", "create.block.cart_assembler.invalid": "Platziere deinen Lorenmonteur auf einer Schiene.", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_cl.json b/src/generated/resources/assets/create/lang/unfinished/es_cl.json index 10f72ab55..e9d9b33e9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_cl.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_cl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 550", + "_": "Missing Localizations: 551", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$s fué disparado por %2$s usando %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s fué reventado por el reloj cu-cú manipulado", "death.attack.create.cuckoo_clock_explosion.player": "%1$s fué reventado por el reloj cu-cú manipulado", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "Un Desplegador pillo", "create.block.cart_assembler.invalid": "Coloca tu ensamblador de Vagonetas en un bloque de rieles", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 7acebe2fd..f3be2ed94 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 221", + "_": "Missing Localizations: 222", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$s fue disparado por %2$s utilizando %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s fue volado por los aires por un reloj de cuco manipulado", "death.attack.create.cuckoo_clock_explosion.player": "%1$s fue volado por un reloj de cuco manipulado", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "Un desplegador rebelde", "create.block.cart_assembler.invalid": "Coloque su Ensamblador de vagonetas en un bloque de Raíles", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 10b41792c..02ecc0cdb 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1790", + "_": "Missing Localizations: 1791", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "UNLOCALIZED: %1$s was shot by %2$s using %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s a été explosé par un coucou trafiquée", "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "un déployeur voyou", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 06e7d6586..4ca91e75b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1479", + "_": "Missing Localizations: 1480", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "UNLOCALIZED: %1$s was shot by %2$s using %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s è saltato in aria da un orologio a cucù manomesso", "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "un disadattato", "create.block.cart_assembler.invalid": "Piazza il tuo assemblatore di carrelli da miniera su un binario", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 6db6b6ba6..b1d4b442d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 216", + "_": "Missing Localizations: 217", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$sは%2$sの%3$sに撃た抜かれた", "death.attack.create.cuckoo_clock_explosion": "%1$sは改造された鳩時計に爆破された", "death.attack.create.cuckoo_clock_explosion.player": "%1$sは何者かによって改造された鳩時計に爆破された", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "悪いデプロイヤー", "create.block.cart_assembler.invalid": "トロッコアセンブラはレールの上にのみ設置できます", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index e22507388..c9c7c3814 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 216", + "_": "Missing Localizations: 217", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$s이(가) %3$s을(를) 사용한 %2$s에게 맞아 죽었습니다.", "death.attack.create.cuckoo_clock_explosion": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다", "death.attack.create.cuckoo_clock_explosion.player": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "기계 손", "create.block.cart_assembler.invalid": "카트 조립기를 레일 위에 설치하세요", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 0328f5636..d37e1ff8f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 2142", + "_": "Missing Localizations: 2143", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "UNLOCALIZED: %1$s was shot by %2$s using %3$s", "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index c127081cb..4fcdd20c8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 589", + "_": "Missing Localizations: 590", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "Gracz %1$s został zestrzelowny przez %2$s z użyciem %3$s", "death.attack.create.cuckoo_clock_explosion": "Gracz %1$s został wysadzony w powietrze przez uszkodzony zegar z kukułką", "death.attack.create.cuckoo_clock_explosion.player": "Gracz %1$s został wysadzony w powietrze przez uszkodzony zegar z kukułką", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "zbuntowany aplikator", "create.block.cart_assembler.invalid": "Postaw monter wagoników na torze", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index e2a9cd8ec..3df38f1ad 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1390", + "_": "Missing Localizations: 1391", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$s foi atirado por %2$s usando %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s foi explodido por relógio cuco adulterado", "death.attack.create.cuckoo_clock_explosion.player": "%1$s foi explodido por relógio cuco adulterado", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json index 229d0bde6..37fb8b33f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1762", + "_": "Missing Localizations: 1763", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$s foi atirado por %2$s usando %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s foi explodido por relógio cuco adulterado", "death.attack.create.cuckoo_clock_explosion.player": "%1$s foi explodido por relógio cuco adulterado", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", diff --git a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json index 79d5d56fe..f8ea537b8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json +++ b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 217", + "_": "Missing Localizations: 218", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$s a fost împușcat de către %2$s folosind %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s a fost aruncat în aer de către un ceas cucu manipulat", "death.attack.create.cuckoo_clock_explosion.player": "%1$s a fost aruncat în aer de către un ceas cucu manipulat", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "un Deployer necinstit", "create.block.cart_assembler.invalid": "Plasează Asamblatorul tău De Vagonet pe un bloc de șină", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 60eea18f8..246f5a384 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 594", + "_": "Missing Localizations: 595", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$s был застрелен %2$s при помощи «%3$s»", "death.attack.create.cuckoo_clock_explosion": "%1$s взорвали подделанные часы с кукушкой", "death.attack.create.cuckoo_clock_explosion.player": "%1$s был взорван подделанными часами с кукушкой", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "автономным активатором", "create.block.cart_assembler.invalid": "Поместите сборщик вагонеток на блок рельс", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 7121759f5..2cf9ed0eb 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 216", + "_": "Missing Localizations: 217", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$s被%2$s用%3$s射死了", "death.attack.create.cuckoo_clock_explosion": "%1$s被布谷鸟钟炸得粉身碎骨", "death.attack.create.cuckoo_clock_explosion.player": "%1$s被布谷鸟钟炸得粉身碎骨", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "二五仔机械手", "create.block.cart_assembler.invalid": "请将矿车装配器放置在铁轨上", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index cb9e90669..97199a10d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 608", + "_": "Missing Localizations: 609", "_": "->------------------------] Game Elements [------------------------<-", @@ -817,6 +817,7 @@ "death.attack.create.potato_cannon.item": "%1$s 被 %2$s 用馬鈴薯大砲塞了滿肚子 %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s 被布穀鳥鐘炸得粉身碎骨", "death.attack.create.cuckoo_clock_explosion.player": "%1$s 被布穀鳥鐘炸得粉身碎骨", + "death.attack.create.run_over": "UNLOCALIZED: %1$s was run over by %2$s", "create.block.deployer.damage_source_name": "機械手", "create.block.cart_assembler.invalid": "將您的礦車裝修站放在鐵軌上", diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java index 95dde8b12..c0ed4f5fc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java @@ -17,9 +17,11 @@ import com.simibubi.create.content.contraptions.components.actors.BlockBreakingM import com.simibubi.create.content.contraptions.components.actors.HarvesterMovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity.ContraptionRotationState; import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket; +import com.simibubi.create.content.logistics.trains.entity.CarriageContraptionEntity; import com.simibubi.create.foundation.collision.ContinuousOBBCollider.ContinuousSeparationManifold; import com.simibubi.create.foundation.collision.Matrix3d; import com.simibubi.create.foundation.collision.OrientedBB; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.Iterate; @@ -34,6 +36,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; +import net.minecraft.world.damagesource.EntityDamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; @@ -235,11 +238,11 @@ public class ContraptionCollider { .containsKey(pos)) { BlockState blockState = contraption.getBlocks() .get(pos).state; - + MovingInteractionBehaviour movingInteractionBehaviour = contraption.interactors.get(pos); if (movingInteractionBehaviour != null) movingInteractionBehaviour.handleEntityCollision(entity, pos, contraptionEntity); - + bounce = BlockHelper.getBounceMultiplier(blockState.getBlock()); slide = Math.max(0, blockState.getFriction(contraption.world, pos, entity) - .6f); } @@ -280,6 +283,7 @@ public class ContraptionCollider { .add(0, contraptionMotion.y, 0); if (motionZ != 0 && Math.abs(intersectZ) > horizonalEpsilon && motionZ > 0 == intersectZ < 0) entityMotion = entityMotion.multiply(1, 1, 0); + } if (bounce == 0 && slide > 0 && hasNormal && anyCollision && rotation.hasVerticalRotation()) { @@ -304,6 +308,29 @@ public class ContraptionCollider { entityPosition.z + allowedMovement.z); entityPosition = entity.position(); + if (contraptionEntity instanceof CarriageContraptionEntity cce && entity.isOnGround()) { + if (AllConfigs.SERVER.trains.trainsCauseDamage.get()) { + Vec3 diffMotion = contraptionMotion.subtract(entity.getDeltaMovement()); + if (diffMotion.length() > 0.35f && contraptionMotion.length() > 0.35f) { + EntityDamageSource pSource = new EntityDamageSource("create.run_over", contraptionEntity); + double damage = diffMotion.length(); + if (playerType == PlayerType.CLIENT) + AllPackets.channel + .sendToServer(new TrainCollisionPacket((int) (damage * 16), contraptionEntity.getId())); + else + entity.hurt(pSource, (int) (damage * 16)); + if (!(entity instanceof Player p) || !p.isCreative() && !p.isSpectator()) + entityMotion = entityMotion.add(entity.position() + .subtract(contraptionPosition) + .multiply(1, 0, 1) + .normalize() + .add(0, .25, 0) + .scale(damage * 4)) + .add(diffMotion); + } + } + } + entity.hurtMarked = true; Vec3 contactPointMotion = Vec3.ZERO; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TrainCollisionPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TrainCollisionPacket.java new file mode 100644 index 000000000..29dda2427 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TrainCollisionPacket.java @@ -0,0 +1,52 @@ +package com.simibubi.create.content.contraptions.components.structureMovement; + +import java.util.function.Supplier; + +import com.simibubi.create.content.logistics.trains.entity.CarriageContraptionEntity; +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.damagesource.EntityDamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraftforge.network.NetworkEvent.Context; + +public class TrainCollisionPacket extends SimplePacketBase { + + int damage; + int contraptionEntityId; + + public TrainCollisionPacket(int damage, int contraptionEntityId) { + this.damage = damage; + this.contraptionEntityId = contraptionEntityId; + } + + public TrainCollisionPacket(FriendlyByteBuf buffer) { + contraptionEntityId = buffer.readInt(); + damage = buffer.readInt(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeInt(contraptionEntityId); + buffer.writeInt(damage); + } + + @Override + public void handle(Supplier context) { + Context ctx = context.get(); + ctx.enqueueWork(() -> { + ServerPlayer player = ctx.getSender(); + Level level = player.level; + + Entity entity = level.getEntity(contraptionEntityId); + if (!(entity instanceof CarriageContraptionEntity cce)) + return; + + player.hurt(new EntityDamageSource("create.run_over", cce), (int) damage); + }); + ctx.setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageContraptionEntity.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageContraptionEntity.java index 24fea6dd9..d53682631 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageContraptionEntity.java @@ -308,6 +308,13 @@ public class CarriageContraptionEntity extends OrientedContraptionEntity { train.navigation.waitingForSignal = null; return true; } + + @Override + public Component getDisplayName() { + if (carriage == null) + return Lang.translate("train"); + return carriage.train.name; + } double navDistanceTotal = 0; diff --git a/src/main/java/com/simibubi/create/foundation/config/CTrains.java b/src/main/java/com/simibubi/create/foundation/config/CTrains.java index 921ef500f..bc3e8f97d 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CTrains.java +++ b/src/main/java/com/simibubi/create/foundation/config/CTrains.java @@ -2,6 +2,7 @@ package com.simibubi.create.foundation.config; public class CTrains extends ConfigBase { + public final ConfigBool trainsCauseDamage = b(true, "trainsCauseDamage", Comments.trainsCauseDamage); public final ConfigFloat trainTopSpeed = f(36, 0, "trainTopSpeed", Comments.mps, Comments.trainTopSpeed); public final ConfigFloat trainTurningTopSpeed = f(18, 0, "trainTurningTopSpeed", Comments.mps, Comments.trainTurningTopSpeed); @@ -30,6 +31,7 @@ public class CTrains extends ConfigBase { static String trainTopSpeed = "The top speed of any assembled Train."; static String trainTurningTopSpeed = "The top speed of Trains during a turn."; static String trainAcceleration = "The acceleration of any assembled Train."; + static String trainsCauseDamage = "Whether moving Trains can hurt colliding mobs and players."; } } diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index d86b30875..aa09b9a75 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -10,6 +10,7 @@ import java.util.function.Supplier; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionDisassemblyPacket; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionStallPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.TrainCollisionPacket; import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionUpdatePacket; import com.simibubi.create.content.contraptions.components.structureMovement.glue.GlueEffectPacket; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueRemovalPacket; @@ -132,6 +133,7 @@ public enum AllPackets { PLACE_CURVED_TRACK(PlaceExtendedCurvePacket.class, PlaceExtendedCurvePacket::new, PLAY_TO_SERVER), GLUE_IN_AREA(SuperGlueSelectionPacket.class, SuperGlueSelectionPacket::new, PLAY_TO_SERVER), GLUE_REMOVED(SuperGlueRemovalPacket.class, SuperGlueRemovalPacket::new, PLAY_TO_SERVER), + TRAIN_COLLISION(TrainCollisionPacket.class, TrainCollisionPacket::new, PLAY_TO_SERVER), // Server to Client SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new, PLAY_TO_CLIENT), diff --git a/src/main/resources/assets/create/lang/default/interface.json b/src/main/resources/assets/create/lang/default/interface.json index 492e0767f..b1bb5a284 100644 --- a/src/main/resources/assets/create/lang/default/interface.json +++ b/src/main/resources/assets/create/lang/default/interface.json @@ -17,7 +17,9 @@ "death.attack.create.potato_cannon.item": "%1$s was shot by %2$s using %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock", "death.attack.create.cuckoo_clock_explosion.player": "%1$s was blown up by tampered cuckoo clock", + "death.attack.create.run_over": "%1$s was run over by %2$s", "create.block.deployer.damage_source_name": "a rogue Deployer", + "create.block.cart_assembler.invalid": "Place your Cart Assembler on a rail block", "create.menu.return": "Return to Menu",