Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e64c7c97d | ||
|
|
bca73c93cc | ||
|
|
913e79fe5b | ||
|
|
b1334a0455 | ||
|
|
ce9495c79c | ||
|
|
ff8270d18a | ||
|
|
3f33549760 | ||
|
|
d034607032 | ||
|
|
e9a11c0ab9 | ||
|
|
e0d90fc56a | ||
|
|
cac23d12a1 | ||
|
|
b982772d31 | ||
|
|
e4ca0db2a2 | ||
|
|
f0cd2a51d1 | ||
|
|
9d37862144 | ||
|
|
c31fb76215 | ||
|
|
b6563af2b1 | ||
|
|
1a0030a680 | ||
|
|
78c858b753 |
@@ -5,8 +5,8 @@
|
|||||||
[](https://raw.githubusercontent.com/TeamMidnightDust/MidnightControls/master/LICENSE)
|
[](https://raw.githubusercontent.com/TeamMidnightDust/MidnightControls/master/LICENSE)
|
||||||

|

|
||||||
[![Mod loader: Quilt/Fabric]][quilt] <!-- modrinth_exclude.start -->
|
[![Mod loader: Quilt/Fabric]][quilt] <!-- modrinth_exclude.start -->
|
||||||

|
[](https://github.com/TeamMidnightDust/MidnightControls/releases)
|
||||||
[](https://www.curseforge.com/minecraft/mc-mods/midnightcontrols)
|
[](https://www.curseforge.com/minecraft/mc-mods/midnightcontrols)
|
||||||
<!-- modrinth_exclude.end -->
|
<!-- modrinth_exclude.end -->
|
||||||
|
|
||||||
A Fabric Minecraft mod which adds better controls, reach-around and controller support.
|
A Fabric Minecraft mod which adds better controls, reach-around and controller support.
|
||||||
|
|||||||
10
build.gradle
@@ -104,10 +104,14 @@ dependencies {
|
|||||||
modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}"
|
modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}"
|
||||||
|
|
||||||
// Compatibility mods
|
// Compatibility mods
|
||||||
modImplementation("maven.modrinth:ok-zoomer:${project.ok_zoomer_version}")
|
|
||||||
modImplementation "io.github.ennuil:LibZoomer:${project.libzoomer_version}"
|
// Ok Zoomer and LibZoomer are temporarily disabled for the time being, as we are currently using Reflection at runtime instead in OkZoomerCompat due to there being two major, completely incompatible API versions.
|
||||||
|
// modImplementation("maven.modrinth:ok-zoomer:${project.ok_zoomer_version}")
|
||||||
|
// modImplementation "io.github.ennuil:LibZoomer:${project.libzoomer_version}"
|
||||||
|
|
||||||
modImplementation "org.quiltmc:quilt-json5:1.0.0"
|
modImplementation "org.quiltmc:quilt-json5:1.0.0"
|
||||||
modImplementation("me.shedaniel:RoughlyEnoughItems-runtime-fabric:${project.rei_version}")
|
//modImplementation "maven.modrinth:sodium:${project.sodium_version}"
|
||||||
|
//modImplementation("maven.modrinth:emi:${project.emi_version}")
|
||||||
modImplementation "maven.modrinth:emotecraft:${project.emotecraft_version}"
|
modImplementation "maven.modrinth:emotecraft:${project.emotecraft_version}"
|
||||||
modImplementation "io.github.kosmx:bendy-lib:${project.bendylib_version}"
|
modImplementation "io.github.kosmx:bendy-lib:${project.bendylib_version}"
|
||||||
|
|
||||||
|
|||||||
269
controller_banner.svg
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="1920"
|
||||||
|
height="1080"
|
||||||
|
viewBox="0 0 1920 1080"
|
||||||
|
version="1.1"
|
||||||
|
id="SVGRoot"
|
||||||
|
sodipodi:docname="controller_banner.svg"
|
||||||
|
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
|
||||||
|
inkscape:export-filename="/home/martin/Bilder/Bilder/MidnightControlsBanner.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview893"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:pageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:zoom="0.40120419"
|
||||||
|
inkscape:cx="928.45492"
|
||||||
|
inkscape:cy="816.29258"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1050"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="30"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid956" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs888">
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient2059">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ed02a0;stop-opacity:0.72909278"
|
||||||
|
offset="0"
|
||||||
|
id="stop2055" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#8900cb;stop-opacity:0.73234183"
|
||||||
|
offset="1"
|
||||||
|
id="stop2057" />
|
||||||
|
</linearGradient>
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="powerclip"
|
||||||
|
id="path-effect904"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
inverse="true"
|
||||||
|
flatten="false"
|
||||||
|
hide_clip="false"
|
||||||
|
message="Füllregel Gerade-Ungerade im <b>Füllung und Kontur</b>-Dialog verwenden, wenn das Anwenden des Ausschnitts mit nachfolgendem Umwandeln in Pfade kein Ergebnis bringt" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="powerclip"
|
||||||
|
id="path-effect900"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
inverse="true"
|
||||||
|
flatten="false"
|
||||||
|
hide_clip="false"
|
||||||
|
message="Füllregel Gerade-Ungerade im <b>Füllung und Kontur</b>-Dialog verwenden, wenn das Anwenden des Ausschnitts mit nachfolgendem Umwandeln in Pfade kein Ergebnis bringt" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="powerclip"
|
||||||
|
id="path-effect896"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
inverse="true"
|
||||||
|
flatten="false"
|
||||||
|
hide_clip="false"
|
||||||
|
message="Füllregel Gerade-Ungerade im <b>Füllung und Kontur</b>-Dialog verwenden, wenn das Anwenden des Ausschnitts mit nachfolgendem Umwandeln in Pfade kein Ergebnis bringt" />
|
||||||
|
<rect
|
||||||
|
x="500"
|
||||||
|
y="800"
|
||||||
|
width="840"
|
||||||
|
height="220"
|
||||||
|
id="rect7833" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient1152">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ed02a0;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop1148" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#8900cb;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop1150" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient2059"
|
||||||
|
id="linearGradient1154"
|
||||||
|
x1="0"
|
||||||
|
y1="0"
|
||||||
|
x2="1920"
|
||||||
|
y2="1080"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient1152"
|
||||||
|
id="linearGradient4289"
|
||||||
|
x1="-398"
|
||||||
|
y1="56"
|
||||||
|
x2="1522"
|
||||||
|
y2="1136"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(398,-56)" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient1152"
|
||||||
|
id="linearGradient7579"
|
||||||
|
x1="-398"
|
||||||
|
y1="56"
|
||||||
|
x2="1522"
|
||||||
|
y2="1136"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(398,-56)" />
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath878">
|
||||||
|
<path
|
||||||
|
id="path880"
|
||||||
|
style="display:none;fill:url(#linearGradient882);stroke-width:1.00028"
|
||||||
|
d="m 1170.0221,-4.111892 a 21.817197,20.751893 3.393352 0 0 -8.3753,3.68511674 21.817197,20.751893 3.393352 0 0 -4.1775,28.99380526 l 0.2304,0.284584 a 21.817197,20.751893 3.393352 0 0 30.5488,3.770316 21.817197,20.751893 3.393352 0 0 3.9128,-29.0289691 21.817197,20.751893 3.393352 0 0 -22.1392,-7.7048529 z M 858.04762,85.714292 c -7.15183,1.731644 -11.32417,8.932859 -9.35312,16.146398 l 22.2005,81.24794 c 1.97106,7.21354 9.31675,11.62594 16.46858,9.8943 L 1086.714,144.73497 c 7.1518,-1.73163 11.3223,-8.9324 9.3512,-16.14595 l -22.2005,-81.247936 c -1.971,-7.213536 -9.3149,-11.626381 -16.4667,-9.894748 z M 756.02165,124.73884 a 50.906793,48.421082 3.3933293 0 0 -19.54511,8.59585 50.906793,48.421082 3.3933293 0 0 -9.74699,67.65414 l 0.53564,0.66651 a 50.906793,48.421082 3.3933293 0 0 71.28286,8.79621 50.906793,48.421082 3.3933293 0 0 9.13065,-67.73384 50.906793,48.421082 3.3933293 0 0 -51.65705,-17.97887 z M 1139.8366,44.661798 a 21.817197,20.751893 3.393352 0 0 -8.3752,3.685094 21.817197,20.751893 3.393352 0 0 -4.1775,28.993805 l 0.2304,0.284584 a 21.817197,20.751893 3.393352 0 0 30.5487,3.770339 21.817197,20.751893 3.393352 0 0 3.9147,-29.029436 21.817197,20.751893 3.393352 0 0 -22.1411,-7.704386 z m 84.4396,-20.445031 a 21.817197,20.751893 3.393352 0 0 -8.3754,3.685117 21.817197,20.751893 3.393352 0 0 -4.1774,28.993806 l 0.2285,0.285027 a 21.817197,20.751893 3.393352 0 0 30.5488,3.77034 21.817197,20.751893 3.393352 0 0 3.9147,-29.02946 21.817197,20.751893 3.393352 0 0 -22.1392,-7.70483 z M 1193.05,74.672751 a 21.817197,20.751893 3.393352 0 0 -8.3759,3.68321 21.817197,20.751893 3.393352 0 0 -4.1769,28.995709 l 0.2303,0.28458 a 21.817197,20.751893 3.393352 0 0 30.5488,3.77035 21.817197,20.751893 3.393352 0 0 3.9128,-29.029006 21.817197,20.751893 3.393352 0 0 -22.1391,-7.704843 z M 865.52481,226.88685 c -7.36616,1.78355 -11.66248,9.20165 -9.63236,16.63136 l 5.86309,21.45735 -27.90161,6.7557 c -7.15183,1.73165 -11.32229,8.9324 -9.35123,16.14595 l 2.77837,10.1681 c 1.97106,7.21354 9.31487,11.6264 16.46669,9.89476 l 27.90161,-6.75571 6.22966,22.7989 c 2.03012,7.42971 9.59558,11.97577 16.96174,10.19223 l 8.59091,-2.08008 c 7.36616,-1.78354 11.6606,-9.2012 9.63048,-16.63091 l -6.22966,-22.7989 23.68151,-5.73391 c 7.15183,-1.73165 11.32229,-8.93242 9.35123,-16.14595 l -2.77837,-10.16811 c -1.97106,-7.21354 -9.31486,-11.62639 -16.46669,-9.89474 l -23.68151,5.73391 -5.86309,-21.45735 c -2.03012,-7.42971 -9.5937,-11.97623 -16.95987,-10.19269 z m 272.15169,-63.56116 a 50.906793,48.421082 3.3933293 0 0 -19.5432,8.59539 50.906793,48.421082 3.3933293 0 0 -9.747,67.65414 l 0.5356,0.66651 a 50.906793,48.421082 3.3933293 0 0 71.2829,8.79621 50.906793,48.421082 3.3933293 0 0 9.1307,-67.73384 50.906793,48.421082 3.3933293 0 0 -51.659,-17.97841 z" />
|
||||||
|
<path
|
||||||
|
id="lpe_path-effect896"
|
||||||
|
style="fill:url(#linearGradient882);stroke-width:1.00028"
|
||||||
|
class="powerclip"
|
||||||
|
d="M 636.0108,56.943474 H 846.95389 V 569.86886 H 636.0108 Z m 534.0113,-61.055366 a 21.817197,20.751893 3.393352 0 0 -8.3753,3.68511674 21.817197,20.751893 3.393352 0 0 -4.1775,28.99380526 l 0.2304,0.284584 a 21.817197,20.751893 3.393352 0 0 30.5488,3.770316 21.817197,20.751893 3.393352 0 0 3.9128,-29.0289691 21.817197,20.751893 3.393352 0 0 -22.1392,-7.7048529 z M 858.04762,85.714292 c -7.15183,1.731644 -11.32417,8.932859 -9.35312,16.146398 l 22.2005,81.24794 c 1.97106,7.21354 9.31675,11.62594 16.46858,9.8943 L 1086.714,144.73497 c 7.1518,-1.73163 11.3223,-8.9324 9.3512,-16.14595 l -22.2005,-81.247936 c -1.971,-7.213536 -9.3149,-11.626381 -16.4667,-9.894748 z M 756.02165,124.73884 a 50.906793,48.421082 3.3933293 0 0 -19.54511,8.59585 50.906793,48.421082 3.3933293 0 0 -9.74699,67.65414 l 0.53564,0.66651 a 50.906793,48.421082 3.3933293 0 0 71.28286,8.79621 50.906793,48.421082 3.3933293 0 0 9.13065,-67.73384 50.906793,48.421082 3.3933293 0 0 -51.65705,-17.97887 z M 1139.8366,44.661798 a 21.817197,20.751893 3.393352 0 0 -8.3752,3.685094 21.817197,20.751893 3.393352 0 0 -4.1775,28.993805 l 0.2304,0.284584 a 21.817197,20.751893 3.393352 0 0 30.5487,3.770339 21.817197,20.751893 3.393352 0 0 3.9147,-29.029436 21.817197,20.751893 3.393352 0 0 -22.1411,-7.704386 z m 84.4396,-20.445031 a 21.817197,20.751893 3.393352 0 0 -8.3754,3.685117 21.817197,20.751893 3.393352 0 0 -4.1774,28.993806 l 0.2285,0.285027 a 21.817197,20.751893 3.393352 0 0 30.5488,3.77034 21.817197,20.751893 3.393352 0 0 3.9147,-29.02946 21.817197,20.751893 3.393352 0 0 -22.1392,-7.70483 z M 1193.05,74.672751 a 21.817197,20.751893 3.393352 0 0 -8.3759,3.68321 21.817197,20.751893 3.393352 0 0 -4.1769,28.995709 l 0.2303,0.28458 a 21.817197,20.751893 3.393352 0 0 30.5488,3.77035 21.817197,20.751893 3.393352 0 0 3.9128,-29.029006 21.817197,20.751893 3.393352 0 0 -22.1391,-7.704843 z M 865.52481,226.88685 c -7.36616,1.78355 -11.66248,9.20165 -9.63236,16.63136 l 5.86309,21.45735 -27.90161,6.7557 c -7.15183,1.73165 -11.32229,8.9324 -9.35123,16.14595 l 2.77837,10.1681 c 1.97106,7.21354 9.31487,11.6264 16.46669,9.89476 l 27.90161,-6.75571 6.22966,22.7989 c 2.03012,7.42971 9.59558,11.97577 16.96174,10.19223 l 8.59091,-2.08008 c 7.36616,-1.78354 11.6606,-9.2012 9.63048,-16.63091 l -6.22966,-22.7989 23.68151,-5.73391 c 7.15183,-1.73165 11.32229,-8.93242 9.35123,-16.14595 l -2.77837,-10.16811 c -1.97106,-7.21354 -9.31486,-11.62639 -16.46669,-9.89474 l -23.68151,5.73391 -5.86309,-21.45735 c -2.03012,-7.42971 -9.5937,-11.97623 -16.95987,-10.19269 z m 272.15169,-63.56116 a 50.906793,48.421082 3.3933293 0 0 -19.5432,8.59539 50.906793,48.421082 3.3933293 0 0 -9.747,67.65414 l 0.5356,0.66651 a 50.906793,48.421082 3.3933293 0 0 71.2829,8.79621 50.906793,48.421082 3.3933293 0 0 9.1307,-67.73384 50.906793,48.421082 3.3933293 0 0 -51.659,-17.97841 z" />
|
||||||
|
</clipPath>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient1152"
|
||||||
|
id="linearGradient882"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.96459266,-0.23355313,0.26584317,0.97291549,369.02066,-147.43741)"
|
||||||
|
x1="-398"
|
||||||
|
y1="56"
|
||||||
|
x2="1522"
|
||||||
|
y2="1136" />
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath884">
|
||||||
|
<path
|
||||||
|
id="path886"
|
||||||
|
style="display:none;fill:url(#linearGradient888);stroke-width:1.00027"
|
||||||
|
d="m 1026.6374,528.82806 a 20.752793,21.815894 86.926601 0 0 -9.2243,-0.58528 20.752793,21.815894 86.926601 0 0 -18.53105,23.48045 l 0.0557,0.35396 a 20.752793,21.815894 86.926601 0 0 24.81605,17.20206 20.752793,21.815894 86.926601 0 0 18.3173,-23.63171 20.752793,21.815894 86.926601 0 0 -15.4337,-16.81948 z M 707.37883,465.4963 c -7.15078,-1.7386 -14.49832,2.66675 -16.47273,9.87849 l -22.23828,81.2277 c -1.97441,7.21175 2.19438,14.41711 9.34515,16.15571 l 199.32113,48.46175 c 7.15073,1.73859 14.49643,-2.66722 16.47084,-9.87896 l 22.23828,-81.2277 c 1.97441,-7.21174 -2.19254,-14.41666 -9.34327,-16.15524 z M 598.02135,453.23104 a 48.423182,50.903752 86.926623 0 0 -21.5241,-1.36927 48.423182,50.903752 86.926623 0 0 -43.23978,54.7896 l 0.12713,0.82721 a 48.423182,50.903752 86.926623 0 0 57.90649,40.13811 48.423182,50.903752 86.926623 0 0 42.74098,-55.13985 48.423182,50.903752 86.926623 0 0 -36.01072,-39.2458 z m 377.16446,104.5578 a 20.752793,21.815894 86.926601 0 0 -9.22414,-0.58526 20.752793,21.815894 86.926601 0 0 -18.53108,23.48045 l 0.0557,0.35396 a 20.752793,21.815894 86.926601 0 0 24.8159,17.20204 20.752793,21.815894 86.926601 0 0 18.31921,-23.63124 20.752793,21.815894 86.926601 0 0 -15.43563,-16.81995 z m 84.42719,20.52712 a 20.752793,21.815894 86.926601 0 0 -9.2243,-0.58529 20.752793,21.815894 86.926601 0 0 -18.531,23.48045 l 0.054,0.35352 a 20.752793,21.815894 86.926601 0 0 24.8159,17.20204 20.752793,21.815894 86.926601 0 0 18.3193,-23.63122 20.752793,21.815894 86.926601 0 0 -15.4338,-16.8195 z m -53.2258,29.9599 a 20.752793,21.815894 86.926601 0 0 -9.22373,-0.58718 20.752793,21.815894 86.926601 0 0 -18.53161,23.48235 l 0.0557,0.35395 a 20.752793,21.815894 86.926601 0 0 24.81584,17.20205 20.752793,21.815894 86.926601 0 0 18.3174,-23.63169 20.752793,21.815894 86.926601 0 0 -15.4337,-16.81948 z M 641.50831,592.48259 c -7.36508,-1.79069 -14.93245,2.74811 -16.96603,10.17597 l -5.87307,21.452 -27.8975,-6.78283 c -7.15078,-1.7386 -14.49644,2.6672 -16.47085,9.87895 l -2.7831,10.16557 c -1.97441,7.21174 2.1925,14.41666 9.34328,16.15525 l 27.8975,6.78284 -6.24026,22.79322 c -2.03358,7.42786 2.25909,14.85024 9.62417,16.64094 l 8.58964,2.08844 c 7.36508,1.7907 14.93057,-2.74856 16.96415,-10.17642 l 6.24026,-22.79322 23.67803,5.75693 c 7.15078,1.7386 14.49644,-2.66722 16.47085,-9.87896 l 2.7831,-10.16557 c 1.97441,-7.21175 -2.1925,-14.41665 -9.34328,-16.15525 l -23.67803,-5.75693 5.87307,-21.45201 c 2.03358,-7.42785 -2.25721,-14.84978 -9.62229,-16.64048 z m 270.91446,68.20272 a 48.423182,50.903752 86.926623 0 0 -21.52221,-1.3688 48.423182,50.903752 86.926623 0 0 -43.23975,54.78961 l 0.12708,0.8272 a 48.423182,50.903752 86.926623 0 0 57.90652,40.13811 48.423182,50.903752 86.926623 0 0 42.74097,-55.13984 48.423182,50.903752 86.926623 0 0 -36.01261,-39.24628 z" />
|
||||||
|
<path
|
||||||
|
id="lpe_path-effect900"
|
||||||
|
style="fill:url(#linearGradient888);stroke-width:1.00027"
|
||||||
|
class="powerclip"
|
||||||
|
d="M 912.35657,483.93158 H 1121.6656 V 998.54486 H 912.35657 Z m 114.28083,44.89648 a 20.752793,21.815894 86.926601 0 0 -9.2243,-0.58528 20.752793,21.815894 86.926601 0 0 -18.53105,23.48045 l 0.0557,0.35396 a 20.752793,21.815894 86.926601 0 0 24.81605,17.20206 20.752793,21.815894 86.926601 0 0 18.3173,-23.63171 20.752793,21.815894 86.926601 0 0 -15.4337,-16.81948 z M 707.37883,465.4963 c -7.15078,-1.7386 -14.49832,2.66675 -16.47273,9.87849 l -22.23828,81.2277 c -1.97441,7.21175 2.19438,14.41711 9.34515,16.15571 l 199.32113,48.46175 c 7.15073,1.73859 14.49643,-2.66722 16.47084,-9.87896 l 22.23828,-81.2277 c 1.97441,-7.21174 -2.19254,-14.41666 -9.34327,-16.15524 z M 598.02135,453.23104 a 48.423182,50.903752 86.926623 0 0 -21.5241,-1.36927 48.423182,50.903752 86.926623 0 0 -43.23978,54.7896 l 0.12713,0.82721 a 48.423182,50.903752 86.926623 0 0 57.90649,40.13811 48.423182,50.903752 86.926623 0 0 42.74098,-55.13985 48.423182,50.903752 86.926623 0 0 -36.01072,-39.2458 z m 377.16446,104.5578 a 20.752793,21.815894 86.926601 0 0 -9.22414,-0.58526 20.752793,21.815894 86.926601 0 0 -18.53108,23.48045 l 0.0557,0.35396 a 20.752793,21.815894 86.926601 0 0 24.8159,17.20204 20.752793,21.815894 86.926601 0 0 18.31921,-23.63124 20.752793,21.815894 86.926601 0 0 -15.43563,-16.81995 z m 84.42719,20.52712 a 20.752793,21.815894 86.926601 0 0 -9.2243,-0.58529 20.752793,21.815894 86.926601 0 0 -18.531,23.48045 l 0.054,0.35352 a 20.752793,21.815894 86.926601 0 0 24.8159,17.20204 20.752793,21.815894 86.926601 0 0 18.3193,-23.63122 20.752793,21.815894 86.926601 0 0 -15.4338,-16.8195 z m -53.2258,29.9599 a 20.752793,21.815894 86.926601 0 0 -9.22373,-0.58718 20.752793,21.815894 86.926601 0 0 -18.53161,23.48235 l 0.0557,0.35395 a 20.752793,21.815894 86.926601 0 0 24.81584,17.20205 20.752793,21.815894 86.926601 0 0 18.3174,-23.63169 20.752793,21.815894 86.926601 0 0 -15.4337,-16.81948 z M 641.50831,592.48259 c -7.36508,-1.79069 -14.93245,2.74811 -16.96603,10.17597 l -5.87307,21.452 -27.8975,-6.78283 c -7.15078,-1.7386 -14.49644,2.6672 -16.47085,9.87895 l -2.7831,10.16557 c -1.97441,7.21174 2.1925,14.41666 9.34328,16.15525 l 27.8975,6.78284 -6.24026,22.79322 c -2.03358,7.42786 2.25909,14.85024 9.62417,16.64094 l 8.58964,2.08844 c 7.36508,1.7907 14.93057,-2.74856 16.96415,-10.17642 l 6.24026,-22.79322 23.67803,5.75693 c 7.15078,1.7386 14.49644,-2.66722 16.47085,-9.87896 l 2.7831,-10.16557 c 1.97441,-7.21175 -2.1925,-14.41665 -9.34328,-16.15525 l -23.67803,-5.75693 5.87307,-21.45201 c 2.03358,-7.42785 -2.25721,-14.84978 -9.62229,-16.64048 z m 270.91446,68.20272 a 48.423182,50.903752 86.926623 0 0 -21.52221,-1.3688 48.423182,50.903752 86.926623 0 0 -43.23975,54.78961 l 0.12708,0.8272 a 48.423182,50.903752 86.926623 0 0 57.90652,40.13811 48.423182,50.903752 86.926623 0 0 42.74097,-55.13984 48.423182,50.903752 86.926623 0 0 -36.01261,-39.24628 z" />
|
||||||
|
</clipPath>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient1152"
|
||||||
|
id="linearGradient888"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.96445087,0.23449084,-0.26629564,0.97267307,398.764,38.857662)"
|
||||||
|
x1="-398"
|
||||||
|
y1="56"
|
||||||
|
x2="1522"
|
||||||
|
y2="1136" />
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath890">
|
||||||
|
<path
|
||||||
|
id="path892"
|
||||||
|
style="display:none;fill:url(#linearGradient894)"
|
||||||
|
d="m 1138.793,269.14648 a 21.88452,20.676565 0 0 0 -9.1231,1.59766 21.88452,20.676565 0 0 0 -11.7656,26.97656 l 0.1484,0.32813 a 21.88452,20.676565 0 0 0 28.7032,10.76562 21.88452,20.676565 0 0 0 11.5175,-27.07226 21.88452,20.676565 0 0 0 -19.4804,-12.59571 z m -327.22269,13.7754 c -7.41435,0 -13.38476,5.96846 -13.38476,13.38281 v 83.50976 c 0,7.41436 5.97041,13.38282 13.38476,13.38282 h 206.66799 c 7.4143,0 13.3828,-5.96846 13.3828,-13.38282 v -83.50976 c 0,-7.41435 -5.9685,-13.38281 -13.3828,-13.38281 z m -109.57617,13.80664 a 51.063881,48.245316 0 0 0 -21.28906,3.7246 51.063881,48.245316 0 0 0 -27.45313,62.94727 l 0.34375,0.76758 a 51.063881,48.245316 0 0 0 66.97657,25.11914 51.063881,48.245316 0 0 0 26.875,-63.16797 51.063881,48.245316 0 0 0 -45.45313,-29.39062 z m 394.48826,12.39257 a 21.88452,20.676565 0 0 0 -9.123,1.59766 21.88452,20.676565 0 0 0 -11.7656,26.97656 l 0.1484,0.32813 a 21.88452,20.676565 0 0 0 28.7031,10.76562 21.88452,20.676565 0 0 0 11.5195,-27.07226 21.88452,20.676565 0 0 0 -19.4824,-12.59571 z m 87.5391,0 a 21.88452,20.676565 0 0 0 -9.1231,1.59766 21.88452,20.676565 0 0 0 -11.7656,26.97656 l 0.1465,0.32813 a 21.88452,20.676565 0 0 0 28.7031,10.76562 21.88452,20.676565 0 0 0 11.5196,-27.07226 21.88452,20.676565 0 0 0 -19.4805,-12.59571 z m -43.7695,41.35352 a 21.88452,20.676565 0 0 0 -9.1231,1.5957 21.88452,20.676565 0 0 0 -11.7656,26.97852 l 0.1484,0.32812 a 21.88452,20.676565 0 0 0 28.7031,10.76563 21.88452,20.676565 0 0 0 11.5176,-27.07227 21.88452,20.676565 0 0 0 -19.4804,-12.5957 z m -358.91997,70.29101 c -7.63655,10e-6 -13.78515,6.14862 -13.78515,13.78516 v 22.05469 h -28.92579 c -7.41435,0 -13.38281,5.96845 -13.38281,13.38281 v 10.45117 c 0,7.41435 5.96846,13.38282 13.38281,13.38282 h 28.92579 v 23.43359 c 0,7.63654 6.1486,13.78516 13.78515,13.78516 h 8.90625 c 7.63655,0 13.7832,-6.14862 13.7832,-13.78516 v -23.43359 h 24.55079 c 7.41435,0 13.38281,-5.96847 13.38281,-13.38282 v -10.45117 c 0,-7.41436 -5.96846,-13.38281 -13.38281,-13.38281 h -24.55079 v -22.05469 c 0,-7.63654 -6.14665,-13.78516 -13.7832,-13.78516 z m 281.52147,2.25 a 51.063881,48.245316 0 0 0 -21.2871,3.72461 51.063881,48.245316 0 0 0 -27.4531,62.94727 l 0.3437,0.76758 a 51.063881,48.245316 0 0 0 66.9766,25.11914 51.063881,48.245316 0 0 0 26.875,-63.16797 51.063881,48.245316 0 0 0 -45.4551,-29.39063 z" />
|
||||||
|
<path
|
||||||
|
id="lpe_path-effect904"
|
||||||
|
style="fill:url(#linearGradient894)"
|
||||||
|
class="powerclip"
|
||||||
|
d="M 571.42297,222.78436 H 1252.5483 V 563.60941 H 571.42297 Z m 567.37003,46.36212 a 21.88452,20.676565 0 0 0 -9.1231,1.59766 21.88452,20.676565 0 0 0 -11.7656,26.97656 l 0.1484,0.32813 a 21.88452,20.676565 0 0 0 28.7032,10.76562 21.88452,20.676565 0 0 0 11.5175,-27.07226 21.88452,20.676565 0 0 0 -19.4804,-12.59571 z m -327.22269,13.7754 c -7.41435,0 -13.38476,5.96846 -13.38476,13.38281 v 83.50976 c 0,7.41436 5.97041,13.38282 13.38476,13.38282 h 206.66799 c 7.4143,0 13.3828,-5.96846 13.3828,-13.38282 v -83.50976 c 0,-7.41435 -5.9685,-13.38281 -13.3828,-13.38281 z m -109.57617,13.80664 a 51.063881,48.245316 0 0 0 -21.28906,3.7246 51.063881,48.245316 0 0 0 -27.45313,62.94727 l 0.34375,0.76758 a 51.063881,48.245316 0 0 0 66.97657,25.11914 51.063881,48.245316 0 0 0 26.875,-63.16797 51.063881,48.245316 0 0 0 -45.45313,-29.39062 z m 394.48826,12.39257 a 21.88452,20.676565 0 0 0 -9.123,1.59766 21.88452,20.676565 0 0 0 -11.7656,26.97656 l 0.1484,0.32813 a 21.88452,20.676565 0 0 0 28.7031,10.76562 21.88452,20.676565 0 0 0 11.5195,-27.07226 21.88452,20.676565 0 0 0 -19.4824,-12.59571 z m 87.5391,0 a 21.88452,20.676565 0 0 0 -9.1231,1.59766 21.88452,20.676565 0 0 0 -11.7656,26.97656 l 0.1465,0.32813 a 21.88452,20.676565 0 0 0 28.7031,10.76562 21.88452,20.676565 0 0 0 11.5196,-27.07226 21.88452,20.676565 0 0 0 -19.4805,-12.59571 z m -43.7695,41.35352 a 21.88452,20.676565 0 0 0 -9.1231,1.5957 21.88452,20.676565 0 0 0 -11.7656,26.97852 l 0.1484,0.32812 a 21.88452,20.676565 0 0 0 28.7031,10.76563 21.88452,20.676565 0 0 0 11.5176,-27.07227 21.88452,20.676565 0 0 0 -19.4804,-12.5957 z m -358.91997,70.29101 c -7.63655,10e-6 -13.78515,6.14862 -13.78515,13.78516 v 22.05469 h -28.92579 c -7.41435,0 -13.38281,5.96845 -13.38281,13.38281 v 10.45117 c 0,7.41435 5.96846,13.38282 13.38281,13.38282 h 28.92579 v 23.43359 c 0,7.63654 6.1486,13.78516 13.78515,13.78516 h 8.90625 c 7.63655,0 13.7832,-6.14862 13.7832,-13.78516 v -23.43359 h 24.55079 c 7.41435,0 13.38281,-5.96847 13.38281,-13.38282 v -10.45117 c 0,-7.41436 -5.96846,-13.38281 -13.38281,-13.38281 h -24.55079 v -22.05469 c 0,-7.63654 -6.14665,-13.78516 -13.7832,-13.78516 z m 281.52147,2.25 a 51.063881,48.245316 0 0 0 -21.2871,3.72461 51.063881,48.245316 0 0 0 -27.4531,62.94727 l 0.3437,0.76758 a 51.063881,48.245316 0 0 0 66.9766,25.11914 51.063881,48.245316 0 0 0 26.875,-63.16797 51.063881,48.245316 0 0 0 -45.4551,-29.39063 z" />
|
||||||
|
</clipPath>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient1152"
|
||||||
|
id="linearGradient894"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(398,-56)"
|
||||||
|
x1="-398"
|
||||||
|
y1="56"
|
||||||
|
x2="1522"
|
||||||
|
y2="1136" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<rect
|
||||||
|
style="fill:url(#linearGradient1154);fill-opacity:1"
|
||||||
|
id="rect1033"
|
||||||
|
width="1920"
|
||||||
|
height="1080"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
rx="0"
|
||||||
|
ry="0" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke-width:1.41813"
|
||||||
|
id="rect2078"
|
||||||
|
width="671.12531"
|
||||||
|
height="330.82504"
|
||||||
|
x="576.42297"
|
||||||
|
y="227.78436"
|
||||||
|
ry="110.27502"
|
||||||
|
sodipodi:type="rect"
|
||||||
|
clip-path="url(#clipPath890)"
|
||||||
|
inkscape:path-effect="#path-effect904"
|
||||||
|
d="m 686.69799,227.78436 h 450.57531 c 61.0923,0 110.275,49.18266 110.275,110.27502 v 110.27501 c 0,61.09236 -49.1827,110.27502 -110.275,110.27502 H 686.69799 c -61.09236,0 -110.27502,-49.18266 -110.27502,-110.27502 V 338.05938 c 0,-61.09236 49.18266,-110.27502 110.27502,-110.27502 z" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke-width:1.41852"
|
||||||
|
id="rect2146"
|
||||||
|
width="199.30905"
|
||||||
|
height="504.61328"
|
||||||
|
x="917.35657"
|
||||||
|
y="488.93158"
|
||||||
|
ry="97.030388"
|
||||||
|
transform="matrix(0.97214881,-0.23436445,0.26615211,0.96393104,0,0)"
|
||||||
|
sodipodi:type="rect"
|
||||||
|
clip-path="url(#clipPath884)"
|
||||||
|
inkscape:path-effect="#path-effect900"
|
||||||
|
d="m 1014.387,488.93158 h 5.2482 c 53.7549,0 97.0304,43.27555 97.0304,97.03039 v 310.5525 c 0,53.75484 -43.2755,97.03039 -97.0304,97.03039 h -5.2482 c -53.75488,0 -97.03043,-43.27555 -97.03043,-97.03039 v -310.5525 c 0,-53.75484 43.27555,-97.03039 97.03043,-97.03039 z" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke-width:1.41852"
|
||||||
|
id="rect2146-3"
|
||||||
|
width="200.94308"
|
||||||
|
height="502.92538"
|
||||||
|
x="641.0108"
|
||||||
|
y="61.943474"
|
||||||
|
ry="97.050156"
|
||||||
|
transform="matrix(0.97237519,0.23342343,-0.26569554,0.96405699,0,0)"
|
||||||
|
sodipodi:type="rect"
|
||||||
|
clip-path="url(#clipPath878)"
|
||||||
|
inkscape:path-effect="#path-effect896"
|
||||||
|
d="m 738.06096,61.943474 h 6.84277 c 53.76579,0 97.05016,43.284366 97.05016,97.050156 V 467.8187 c 0,53.76579 -43.28437,97.05016 -97.05016,97.05016 h -6.84277 c -53.76579,0 -97.05016,-43.28437 -97.05016,-97.05016 V 158.99363 c 0,-53.76579 43.28437,-97.050156 97.05016,-97.050156 z" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke-width:1.41813"
|
||||||
|
id="rect2384"
|
||||||
|
width="87.538078"
|
||||||
|
height="55.137505"
|
||||||
|
x="649.37134"
|
||||||
|
y="214"
|
||||||
|
ry="27.568752" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke-width:1.41813"
|
||||||
|
id="rect2384-6"
|
||||||
|
width="87.538078"
|
||||||
|
height="55.137505"
|
||||||
|
x="1089.9797"
|
||||||
|
y="214"
|
||||||
|
ry="27.568752" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 24 KiB |
@@ -3,24 +3,27 @@ org.gradle.jvmargs=-Xmx1G
|
|||||||
|
|
||||||
# Fabric Properties
|
# Fabric Properties
|
||||||
# check these on https://fabricmc.net/use
|
# check these on https://fabricmc.net/use
|
||||||
minecraft_version=1.18.1
|
minecraft_version=1.19
|
||||||
yarn_mappings=1.18.1+build.22
|
yarn_mappings=1.19+build.1
|
||||||
loader_version=0.13.3
|
loader_version=0.14.7
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version = 0.2.0
|
mod_version = 1.1.0
|
||||||
maven_group = eu.midnightdust
|
maven_group = eu.midnightdust
|
||||||
archives_base_name = midnightcontrols
|
archives_base_name = midnightcontrols
|
||||||
modrinth_id=W1D3UXEc
|
modrinth_id=bXX9h73M
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
|
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
|
||||||
fabric_version=0.46.6+1.18
|
fabric_version=0.55.2+1.19
|
||||||
spruceui_version=3.3.2+1.17
|
sodium_version=mc1.19-0.4.1
|
||||||
midnightlib_version=0.4.0
|
spruceui_version=4.0.0+1.19
|
||||||
modmenu_version=2.0.2
|
midnightlib_version=0.5.2
|
||||||
emotecraft_version=2.1-MC1.18.1-fabric
|
modmenu_version=4.0.0
|
||||||
|
emotecraft_version=2.1.3-SNAPSHOT-build.29-MC1.19-fabric
|
||||||
bendylib_version=2.0.+
|
bendylib_version=2.0.+
|
||||||
rei_version=7.4.456
|
emi_version=0.1.1+1.18.2
|
||||||
ok_zoomer_version=5.0.0-beta.3+1.17.1
|
|
||||||
libzoomer_version = 0.3.0+1.17.1
|
# Ok Zoomer and LibZoomer are temporarily disabled for the time being, as we are currently using Reflection at runtime instead in OkZoomerCompat due to there being two major, completely incompatible API versions.
|
||||||
|
# ok_zoomer_version=5.0.0-beta.3+1.17.1
|
||||||
|
# libzoomer_version=0.3.0+1.17.1
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
|||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.fabricmc.loader.api.ModContainer;
|
import net.fabricmc.loader.api.ModContainer;
|
||||||
import net.minecraft.network.PacketByteBuf;
|
import net.minecraft.network.PacketByteBuf;
|
||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
@@ -38,7 +38,7 @@ public class MidnightControls implements ModInitializer {
|
|||||||
public static final Identifier FEATURE_CHANNEL = new Identifier(MidnightControlsConstants.FEATURE_CHANNEL.toString());
|
public static final Identifier FEATURE_CHANNEL = new Identifier(MidnightControlsConstants.FEATURE_CHANNEL.toString());
|
||||||
public static final Identifier HELLO_CHANNEL = new Identifier(MidnightControlsConstants.HELLO_CHANNEL.toString());
|
public static final Identifier HELLO_CHANNEL = new Identifier(MidnightControlsConstants.HELLO_CHANNEL.toString());
|
||||||
|
|
||||||
public static final TranslatableText NOT_BOUND_TEXT = new TranslatableText("midnightcontrols.not_bound");
|
public static final Text NOT_BOUND_TEXT = Text.translatable("midnightcontrols.not_bound");
|
||||||
|
|
||||||
public final Logger logger = LogManager.getLogger("MidnightControls");
|
public final Logger logger = LogManager.getLogger("MidnightControls");
|
||||||
|
|
||||||
|
|||||||
@@ -23,5 +23,5 @@ public class MidnightControlsConstants {
|
|||||||
public static final String NAMESPACE = "midnightcontrols";
|
public static final String NAMESPACE = "midnightcontrols";
|
||||||
public static final Identifier CONTROLS_MODE_CHANNEL = new Identifier(NAMESPACE, "controls_mode");
|
public static final Identifier CONTROLS_MODE_CHANNEL = new Identifier(NAMESPACE, "controls_mode");
|
||||||
public static final Identifier FEATURE_CHANNEL = new Identifier(NAMESPACE, "feature");
|
public static final Identifier FEATURE_CHANNEL = new Identifier(NAMESPACE, "feature");
|
||||||
public static final Identifier HELLO_CHANNEL = new Identifier(NAMESPACE, "hello");
|
public static final Identifier HELLO_CHANNEL = new Identifier("lambdacontrols", "hello");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,6 +98,15 @@ public class MidnightControlsFeature implements Nameable {
|
|||||||
this.enabled = enabled;
|
this.enabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refreshes the enabled values from the config.
|
||||||
|
*/
|
||||||
|
public static void refreshEnabled() {
|
||||||
|
MidnightControlsFeature.VERTICAL_REACHAROUND.setEnabled(MidnightControlsConfig.verticalReacharound);
|
||||||
|
MidnightControlsFeature.FAST_BLOCK_PLACING.setEnabled(MidnightControlsConfig.fastBlockPlacing);
|
||||||
|
MidnightControlsFeature.HORIZONTAL_REACHAROUND.setEnabled(MidnightControlsConfig.horizontalReacharound);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether this feature is available or not.
|
* Returns whether this feature is available or not.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -9,9 +9,7 @@
|
|||||||
|
|
||||||
package eu.midnightdust.midnightcontrols.client;
|
package eu.midnightdust.midnightcontrols.client;
|
||||||
|
|
||||||
import net.minecraft.text.LiteralText;
|
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import org.aperlambda.lambdacommon.utils.Nameable;
|
import org.aperlambda.lambdacommon.utils.Nameable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -26,22 +24,22 @@ import java.util.Optional;
|
|||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public enum ControllerType implements Nameable {
|
public enum ControllerType implements Nameable {
|
||||||
DEFAULT(0, new LiteralText("Default")),
|
DEFAULT(0, Text.of("Default")),
|
||||||
DUALSHOCK(1, new LiteralText("Dualshock")),
|
DUALSHOCK(1, Text.of("Dualshock")),
|
||||||
DUALSENSE(2, new LiteralText("Dualsense")),
|
DUALSENSE(2, Text.of("Dualsense")),
|
||||||
SWITCH(3, new LiteralText("Switch")),
|
SWITCH(3, Text.of("Switch")),
|
||||||
XBOX_360(4, new LiteralText("Xbox 360")),
|
XBOX_360(4, Text.of("Xbox 360")),
|
||||||
XBOX(5, new LiteralText("Xbox")),
|
XBOX(5, Text.of("Xbox")),
|
||||||
STEAM_DECK(6, new LiteralText("Steam Deck")),
|
STEAM_DECK(6, Text.of("Steam Deck")),
|
||||||
STEAM_CONTROLLER(7, new LiteralText("Steam Controller")),
|
STEAM_CONTROLLER(7, Text.of("Steam Controller")),
|
||||||
OUYA(8, new LiteralText("Ouya"));
|
OUYA(8, Text.of("Ouya"));
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
private final Text text;
|
private final Text text;
|
||||||
|
|
||||||
ControllerType(int id) {
|
ControllerType(int id) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.text = new TranslatableText("midnightcontrols.controller_type." + this.getName());
|
this.text = Text.translatable("midnightcontrols.controller_type." + this.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
ControllerType(int id, @NotNull Text text) {
|
ControllerType(int id, @NotNull Text text) {
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client;
|
package eu.midnightdust.midnightcontrols.client;
|
||||||
|
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import org.aperlambda.lambdacommon.utils.Nameable;
|
import org.aperlambda.lambdacommon.utils.Nameable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -31,7 +30,7 @@ public enum HudSide implements Nameable {
|
|||||||
private final Text text;
|
private final Text text;
|
||||||
|
|
||||||
HudSide() {
|
HudSide() {
|
||||||
this.text = new TranslatableText(this.getTranslationKey());
|
this.text = Text.translatable(this.getTranslationKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -28,13 +28,15 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
|||||||
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
|
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
|
||||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
|
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
|
||||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||||
|
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
|
||||||
|
import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
|
||||||
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||||
import net.minecraft.client.option.KeyBinding;
|
import net.minecraft.client.option.KeyBinding;
|
||||||
import net.minecraft.client.toast.SystemToast;
|
import net.minecraft.client.toast.SystemToast;
|
||||||
import net.minecraft.client.util.InputUtil;
|
import net.minecraft.client.util.InputUtil;
|
||||||
import net.minecraft.text.LiteralText;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
@@ -64,7 +66,7 @@ public class MidnightControlsClient extends MidnightControls implements ClientMo
|
|||||||
public static final Identifier CONTROLLER_EXPANDED = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_expanded.png");
|
public static final Identifier CONTROLLER_EXPANDED = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_expanded.png");
|
||||||
public static final Identifier CONTROLLER_AXIS = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_axis.png");
|
public static final Identifier CONTROLLER_AXIS = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/controller_axis.png");
|
||||||
public static final Identifier CURSOR_TEXTURE = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/cursor.png");
|
public static final Identifier CURSOR_TEXTURE = new Identifier(MidnightControlsConstants.NAMESPACE, "textures/gui/cursor.png");
|
||||||
public final static File MAPPINGS_FILE = new File("config/gamecontrollerdb.txt");
|
public final static File MAPPINGS_FILE = new File("config/gamecontrollercustommappings.txt");
|
||||||
public final MidnightInput input = new MidnightInput();
|
public final MidnightInput input = new MidnightInput();
|
||||||
public final MidnightRing ring = new MidnightRing(this);
|
public final MidnightRing ring = new MidnightRing(this);
|
||||||
public final MidnightReacharound reacharound = new MidnightReacharound();
|
public final MidnightReacharound reacharound = new MidnightReacharound();
|
||||||
@@ -114,6 +116,9 @@ public class MidnightControlsClient extends MidnightControls implements ClientMo
|
|||||||
});
|
});
|
||||||
|
|
||||||
HudManager.register(this.hud = new MidnightControlsHud(this));
|
HudManager.register(this.hud = new MidnightControlsHud(this));
|
||||||
|
FabricLoader.getInstance().getModContainer("midnightcontrols").ifPresent(modContainer -> {
|
||||||
|
ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("midnightcontrols","bedrock"), modContainer, ResourcePackActivationType.NORMAL);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,10 +132,10 @@ public class MidnightControlsClient extends MidnightControls implements ClientMo
|
|||||||
GLFW.glfwSetJoystickCallback((jid, event) -> {
|
GLFW.glfwSetJoystickCallback((jid, event) -> {
|
||||||
if (event == GLFW.GLFW_CONNECTED) {
|
if (event == GLFW.GLFW_CONNECTED) {
|
||||||
var controller = Controller.byId(jid);
|
var controller = Controller.byId(jid);
|
||||||
client.getToastManager().add(new SystemToast(SystemToast.Type.TUTORIAL_HINT, new TranslatableText("midnightcontrols.controller.connected", jid),
|
client.getToastManager().add(new SystemToast(SystemToast.Type.TUTORIAL_HINT, Text.translatable("midnightcontrols.controller.connected", jid),
|
||||||
new LiteralText(controller.getName())));
|
Text.literal(controller.getName())));
|
||||||
} else if (event == GLFW.GLFW_DISCONNECTED) {
|
} else if (event == GLFW.GLFW_DISCONNECTED) {
|
||||||
client.getToastManager().add(new SystemToast(SystemToast.Type.TUTORIAL_HINT, new TranslatableText("midnightcontrols.controller.disconnected", jid),
|
client.getToastManager().add(new SystemToast(SystemToast.Type.TUTORIAL_HINT, Text.translatable("midnightcontrols.controller.disconnected", jid),
|
||||||
null));
|
null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ package eu.midnightdust.midnightcontrols.client;
|
|||||||
|
|
||||||
import eu.midnightdust.lib.config.MidnightConfig;
|
import eu.midnightdust.lib.config.MidnightConfig;
|
||||||
import eu.midnightdust.midnightcontrols.ControlsMode;
|
import eu.midnightdust.midnightcontrols.ControlsMode;
|
||||||
|
import eu.midnightdust.midnightcontrols.MidnightControlsFeature;
|
||||||
import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding;
|
import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding;
|
||||||
import eu.midnightdust.midnightcontrols.client.controller.Controller;
|
import eu.midnightdust.midnightcontrols.client.controller.Controller;
|
||||||
import eu.midnightdust.midnightcontrols.client.controller.InputManager;
|
import eu.midnightdust.midnightcontrols.client.controller.InputManager;
|
||||||
@@ -30,18 +31,18 @@ import static org.lwjgl.glfw.GLFW.GLFW_GAMEPAD_AXIS_LEFT_Y;
|
|||||||
public class MidnightControlsConfig extends MidnightConfig {
|
public class MidnightControlsConfig extends MidnightConfig {
|
||||||
// General
|
// General
|
||||||
@Entry public static ControlsMode controlsMode = ControlsMode.DEFAULT;
|
@Entry public static ControlsMode controlsMode = ControlsMode.DEFAULT;
|
||||||
@Entry public static boolean autoSwitchMode = false;
|
@Entry public static boolean autoSwitchMode = true;
|
||||||
@Entry public static boolean debug = false;
|
@Entry public static boolean debug = false;
|
||||||
// HUD
|
// HUD
|
||||||
@Entry public static boolean hudEnable = true;
|
@Entry public static boolean hudEnable = true;
|
||||||
@Entry public static HudSide hudSide = HudSide.LEFT;
|
@Entry public static HudSide hudSide = HudSide.LEFT;
|
||||||
// Gameplay
|
// Gameplay
|
||||||
@Entry public static boolean analogMovement = true;
|
@Entry public static boolean analogMovement = true;
|
||||||
@Entry public static boolean fastBlockPlacing = true;
|
@Entry public static boolean fastBlockPlacing = false; // Disabled by default as this behaviour can be considered cheating on multiplayer servers.
|
||||||
@Entry public static boolean flyDrifting = false;
|
@Entry public static boolean flyDrifting = true; // Enabled by default as disabling this behaviour can be considered cheating on multiplayer servers. It can also conflict with some other mods.
|
||||||
@Entry public static boolean verticalFlyDrifting = true;
|
@Entry public static boolean verticalFlyDrifting = true; // Enabled by default as disabling this behaviour can be considered cheating on multiplayer servers.
|
||||||
@Entry public static boolean horizontalReacharound = false;
|
@Entry public static boolean horizontalReacharound = false; // Disabled by default as this behaviour can be considered cheating on multiplayer servers.
|
||||||
@Entry public static boolean verticalReacharound = false;
|
@Entry public static boolean verticalReacharound = false; // Disabled by default as this behaviour can be considered cheating on multiplayer servers.
|
||||||
@Entry public static boolean shouldRenderReacharoundOutline = true;
|
@Entry public static boolean shouldRenderReacharoundOutline = true;
|
||||||
@Entry public static int[] reacharoundOutlineColor = new int[]{255, 255, 255, 102};
|
@Entry public static int[] reacharoundOutlineColor = new int[]{255, 255, 255, 102};
|
||||||
// Controller
|
// Controller
|
||||||
@@ -56,18 +57,12 @@ public class MidnightControlsConfig extends MidnightConfig {
|
|||||||
@Entry public static boolean unfocusedInput = false;
|
@Entry public static boolean unfocusedInput = false;
|
||||||
@Entry public static boolean virtualMouse = false;
|
@Entry public static boolean virtualMouse = false;
|
||||||
@Entry public static VirtualMouseSkin virtualMouseSkin = VirtualMouseSkin.DEFAULT_LIGHT;
|
@Entry public static VirtualMouseSkin virtualMouseSkin = VirtualMouseSkin.DEFAULT_LIGHT;
|
||||||
// @Entry public static List<Pages> ringPages = new ArrayList<String>();
|
|
||||||
// @Entry public static double maxAnalog1 = 1;
|
|
||||||
// @Entry public static double maxAnalog2 = 1;
|
|
||||||
// @Entry public static double maxAnalog3 = 1;
|
|
||||||
// @Entry public static double maxAnalog4 = 1;
|
|
||||||
@Entry public static Object controllerID = 0;
|
@Entry public static Object controllerID = 0;
|
||||||
@Entry public static Object secondControllerID = -1;
|
@Entry public static Object secondControllerID = -1;
|
||||||
|
@Entry public static List<String> mouseScreens = List.of("me.jellysquid.mods.sodium.client.gui","net.coderbot.iris.gui","net.minecraft.client.gui.screen.advancement", "net.minecraft.client.gui.screen.pack.PackScreen", "net.minecraft.class_5375", "net.minecraft.class_457", "net.minecraft.class_408", "me.flashyreese.mods.reeses_sodium_options.client.gui");
|
||||||
@Entry public static Map<String, String> BINDINGS = Map.of();
|
@Entry public static Map<String, String> BINDINGS = Map.of();
|
||||||
|
|
||||||
private static final Pattern BUTTON_BINDING_PATTERN = Pattern.compile("(-?\\d+)\\+?");
|
private static final Pattern BUTTON_BINDING_PATTERN = Pattern.compile("(-?\\d+)\\+?");
|
||||||
// Gameplay.
|
|
||||||
// Controller settings
|
|
||||||
@Entry public static double[] maxAnalogValues = new double[]{DEFAULT_MAX_VALUE, DEFAULT_MAX_VALUE, DEFAULT_MAX_VALUE, DEFAULT_MAX_VALUE};
|
@Entry public static double[] maxAnalogValues = new double[]{DEFAULT_MAX_VALUE, DEFAULT_MAX_VALUE, DEFAULT_MAX_VALUE, DEFAULT_MAX_VALUE};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -87,6 +82,7 @@ public class MidnightControlsConfig extends MidnightConfig {
|
|||||||
public static void save() {
|
public static void save() {
|
||||||
MidnightControlsConfig.write("midnightcontrols");
|
MidnightControlsConfig.write("midnightcontrols");
|
||||||
MidnightControlsClient.get().log("Configuration saved.");
|
MidnightControlsClient.get().log("Configuration saved.");
|
||||||
|
MidnightControlsFeature.refreshEnabled();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Gets the used controller.
|
* Gets the used controller.
|
||||||
|
|||||||
@@ -27,17 +27,18 @@ import dev.lambdaurora.spruceui.widget.AbstractSprucePressableButtonWidget;
|
|||||||
import dev.lambdaurora.spruceui.widget.SpruceElement;
|
import dev.lambdaurora.spruceui.widget.SpruceElement;
|
||||||
import dev.lambdaurora.spruceui.widget.SpruceLabelWidget;
|
import dev.lambdaurora.spruceui.widget.SpruceLabelWidget;
|
||||||
import dev.lambdaurora.spruceui.widget.container.SpruceParentWidget;
|
import dev.lambdaurora.spruceui.widget.container.SpruceParentWidget;
|
||||||
|
import net.fabricmc.fabric.impl.item.group.CreativeGuiExtensions;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.gui.Element;
|
import net.minecraft.client.gui.Element;
|
||||||
import net.minecraft.client.gui.ParentElement;
|
import net.minecraft.client.gui.ParentElement;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.client.gui.screen.TitleScreen;
|
||||||
import net.minecraft.client.gui.screen.advancement.AdvancementTab;
|
import net.minecraft.client.gui.screen.advancement.AdvancementTab;
|
||||||
import net.minecraft.client.gui.screen.advancement.AdvancementsScreen;
|
import net.minecraft.client.gui.screen.advancement.AdvancementsScreen;
|
||||||
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
|
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
|
||||||
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
||||||
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
|
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
|
||||||
import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget;
|
import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget;
|
||||||
import net.minecraft.client.gui.screen.pack.PackScreen;
|
|
||||||
import net.minecraft.client.gui.screen.world.WorldListWidget;
|
import net.minecraft.client.gui.screen.world.WorldListWidget;
|
||||||
import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget;
|
import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget;
|
||||||
import net.minecraft.client.gui.widget.EntryListWidget;
|
import net.minecraft.client.gui.widget.EntryListWidget;
|
||||||
@@ -45,7 +46,7 @@ import net.minecraft.client.gui.widget.PressableWidget;
|
|||||||
import net.minecraft.client.gui.widget.SliderWidget;
|
import net.minecraft.client.gui.widget.SliderWidget;
|
||||||
import net.minecraft.screen.slot.Slot;
|
import net.minecraft.screen.slot.Slot;
|
||||||
import net.minecraft.screen.slot.SlotActionType;
|
import net.minecraft.screen.slot.SlotActionType;
|
||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import org.aperlambda.lambdacommon.utils.Pair;
|
import org.aperlambda.lambdacommon.utils.Pair;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -53,10 +54,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
import org.lwjgl.glfw.GLFWGamepadState;
|
import org.lwjgl.glfw.GLFWGamepadState;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import static org.lwjgl.glfw.GLFW.*;
|
import static org.lwjgl.glfw.GLFW.*;
|
||||||
|
|
||||||
@@ -71,7 +69,7 @@ public class MidnightInput {
|
|||||||
private static final Map<Integer, Integer> BUTTON_COOLDOWNS = new HashMap<>();
|
private static final Map<Integer, Integer> BUTTON_COOLDOWNS = new HashMap<>();
|
||||||
// Cooldowns
|
// Cooldowns
|
||||||
public int actionGuiCooldown = 0;
|
public int actionGuiCooldown = 0;
|
||||||
private boolean ignoreNextARelease = false;
|
public boolean ignoreNextARelease = false;
|
||||||
private double targetYaw = 0.0;
|
private double targetYaw = 0.0;
|
||||||
private double targetPitch = 0.0;
|
private double targetPitch = 0.0;
|
||||||
private float prevXAxis = 0.f;
|
private float prevXAxis = 0.f;
|
||||||
@@ -80,7 +78,7 @@ public class MidnightInput {
|
|||||||
private int targetMouseY = 0;
|
private int targetMouseY = 0;
|
||||||
private float mouseSpeedX = 0.f;
|
private float mouseSpeedX = 0.f;
|
||||||
private float mouseSpeedY = 0.f;
|
private float mouseSpeedY = 0.f;
|
||||||
private int inventoryInteractionCooldown = 0;
|
public int inventoryInteractionCooldown = 0;
|
||||||
|
|
||||||
private ControllerControlsWidget controlsInput = null;
|
private ControllerControlsWidget controlsInput = null;
|
||||||
|
|
||||||
@@ -312,10 +310,10 @@ public class MidnightInput {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (button == GLFW.GLFW_GAMEPAD_BUTTON_B) {
|
if (button == GLFW.GLFW_GAMEPAD_BUTTON_B) {
|
||||||
if (client.currentScreen != null) {
|
if (client.currentScreen != null && client.currentScreen.getClass() != TitleScreen.class) {
|
||||||
if (!MidnightControlsCompat.handleMenuBack(client, client.currentScreen))
|
if (!MidnightControlsCompat.handleMenuBack(client, client.currentScreen))
|
||||||
if (!this.tryGoBack(client.currentScreen))
|
if (!this.tryGoBack(client.currentScreen))
|
||||||
client.currentScreen.onClose();
|
client.currentScreen.close();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -323,6 +321,9 @@ public class MidnightInput {
|
|||||||
|
|
||||||
if (button == GLFW.GLFW_GAMEPAD_BUTTON_A && client.currentScreen != null && !isScreenInteractive(client.currentScreen)
|
if (button == GLFW.GLFW_GAMEPAD_BUTTON_A && client.currentScreen != null && !isScreenInteractive(client.currentScreen)
|
||||||
&& this.actionGuiCooldown == 0) {
|
&& this.actionGuiCooldown == 0) {
|
||||||
|
if (client.currentScreen instanceof CreativeInventoryScreen creativeScreen && ((HandledScreenAccessor) creativeScreen).midnightcontrols$getSlotAt(
|
||||||
|
client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth(),
|
||||||
|
client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight()) != null) return;
|
||||||
if (!this.ignoreNextARelease) {
|
if (!this.ignoreNextARelease) {
|
||||||
double mouseX = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth();
|
double mouseX = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth();
|
||||||
double mouseY = client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight();
|
double mouseY = client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight();
|
||||||
@@ -347,58 +348,57 @@ public class MidnightInput {
|
|||||||
* @return {@code true} if an inventory interaction was done
|
* @return {@code true} if an inventory interaction was done
|
||||||
*/
|
*/
|
||||||
private boolean handleInventory(@NotNull MinecraftClient client, int button) {
|
private boolean handleInventory(@NotNull MinecraftClient client, int button) {
|
||||||
if (!(client.currentScreen instanceof HandledScreen))
|
// if (!(client.currentScreen instanceof HandledScreen screen))
|
||||||
|
// return false;
|
||||||
|
//
|
||||||
|
// if (client.interactionManager == null || client.player == null)
|
||||||
|
// return false;
|
||||||
|
//
|
||||||
|
// if (this.inventoryInteractionCooldown > 0)
|
||||||
|
// return true;
|
||||||
|
//
|
||||||
|
// if (button == GLFW.GLFW_GAMEPAD_BUTTON_B) {
|
||||||
|
// client.player.closeHandledScreen();
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// double x = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth();
|
||||||
|
// double y = client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight();
|
||||||
|
//
|
||||||
|
// var accessor = (HandledScreenAccessor) screen;
|
||||||
|
// Slot slot = ((HandledScreenAccessor) client.currentScreen).midnightcontrols$getSlotAt(x, y);
|
||||||
|
//
|
||||||
|
// int slotId;
|
||||||
|
// if (slot == null) {
|
||||||
|
// if (client.player.currentScreenHandler.getCursorStack().isEmpty())
|
||||||
|
// return false;
|
||||||
|
// slotId = accessor.midnightcontrols$isClickOutsideBounds(x, y, accessor.getX(), accessor.getY(), GLFW_MOUSE_BUTTON_1) ? -999 : -1;
|
||||||
|
// } else {
|
||||||
|
// slotId = slot.id;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// var actionType = SlotActionType.PICKUP;
|
||||||
|
// int clickData = GLFW.GLFW_MOUSE_BUTTON_1;
|
||||||
|
// switch (button) {
|
||||||
|
// case GLFW_GAMEPAD_BUTTON_A:
|
||||||
|
// if (screen instanceof CreativeInventoryScreen)
|
||||||
|
// if (((CreativeInventoryScreenAccessor) screen).midnightcontrols$isCreativeInventorySlot(slot))
|
||||||
|
// actionType = SlotActionType.CLONE;
|
||||||
|
// if (slot != null && MidnightControlsCompat.streamCompatHandlers().anyMatch(handler -> handler.isCreativeSlot(screen, slot)))
|
||||||
|
// actionType = SlotActionType.CLONE;
|
||||||
|
// break;
|
||||||
|
// case GLFW.GLFW_GAMEPAD_BUTTON_X:
|
||||||
|
// clickData = GLFW_MOUSE_BUTTON_2;
|
||||||
|
// break;
|
||||||
|
// case GLFW.GLFW_GAMEPAD_BUTTON_Y:
|
||||||
|
// actionType = SlotActionType.QUICK_MOVE;
|
||||||
|
// break;
|
||||||
|
// default:
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// accessor.midnightcontrols$onMouseClick(slot, slotId, clickData, actionType);
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (client.interactionManager == null || client.player == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (this.inventoryInteractionCooldown > 0)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (button == GLFW.GLFW_GAMEPAD_BUTTON_B) {
|
|
||||||
client.player.closeHandledScreen();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
double x = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth();
|
|
||||||
double y = client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight();
|
|
||||||
|
|
||||||
var screen = (HandledScreen) client.currentScreen;
|
|
||||||
var accessor = (HandledScreenAccessor) screen;
|
|
||||||
Slot slot = ((HandledScreenAccessor) client.currentScreen).midnightcontrols$getSlotAt(x, y);
|
|
||||||
|
|
||||||
int slotId;
|
|
||||||
if (slot == null) {
|
|
||||||
if (client.player.currentScreenHandler.getCursorStack().isEmpty())
|
|
||||||
return false;
|
|
||||||
slotId = accessor.midnightcontrols$isClickOutsideBounds(x, y, accessor.getX(), accessor.getY(), GLFW_MOUSE_BUTTON_1) ? -999 : -1;
|
|
||||||
} else {
|
|
||||||
slotId = slot.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
var actionType = SlotActionType.PICKUP;
|
|
||||||
int clickData = GLFW.GLFW_MOUSE_BUTTON_1;
|
|
||||||
switch (button) {
|
|
||||||
case GLFW_GAMEPAD_BUTTON_A:
|
|
||||||
if (screen instanceof CreativeInventoryScreen)
|
|
||||||
if (((CreativeInventoryScreenAccessor) screen).midnightcontrols$isCreativeInventorySlot(slot))
|
|
||||||
actionType = SlotActionType.CLONE;
|
|
||||||
if (slot != null && MidnightControlsCompat.streamCompatHandlers().anyMatch(handler -> handler.isCreativeSlot(screen, slot)))
|
|
||||||
actionType = SlotActionType.CLONE;
|
|
||||||
break;
|
|
||||||
case GLFW.GLFW_GAMEPAD_BUTTON_X:
|
|
||||||
clickData = GLFW_MOUSE_BUTTON_2;
|
|
||||||
break;
|
|
||||||
case GLFW.GLFW_GAMEPAD_BUTTON_Y:
|
|
||||||
actionType = SlotActionType.QUICK_MOVE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
accessor.midnightcontrols$onMouseClick(slot, slotId, clickData, actionType);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -411,9 +411,9 @@ public class MidnightInput {
|
|||||||
var set = ImmutableSet.of("gui.back", "gui.done", "gui.cancel", "gui.toTitle", "gui.toMenu");
|
var set = ImmutableSet.of("gui.back", "gui.done", "gui.cancel", "gui.toTitle", "gui.toMenu");
|
||||||
return screen.children().stream().filter(element -> element instanceof PressableWidget)
|
return screen.children().stream().filter(element -> element instanceof PressableWidget)
|
||||||
.map(element -> (PressableWidget) element)
|
.map(element -> (PressableWidget) element)
|
||||||
.filter(element -> element.getMessage() instanceof TranslatableText)
|
.filter(element -> element.getMessage() != null && element.getMessage().getContent() != null)
|
||||||
.anyMatch(element -> {
|
.anyMatch(element -> {
|
||||||
if (set.stream().anyMatch(key -> key.equals(((TranslatableText) element.getMessage()).getKey()))) {
|
if (set.stream().anyMatch(key -> element.getMessage().getContent().toString().equals(key))) {
|
||||||
element.onPress();
|
element.onPress();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -511,6 +511,17 @@ public class MidnightInput {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
} else if (client.currentScreen != null) {
|
||||||
|
if (axis == GLFW_GAMEPAD_AXIS_RIGHT_Y && absValue >= deadZone) {
|
||||||
|
client.currentScreen.children().stream().filter(element -> element instanceof EntryListWidget)
|
||||||
|
.map(element -> (EntryListWidget<?>) element)
|
||||||
|
.filter(element -> element.getType().isFocused())
|
||||||
|
.anyMatch(element -> {
|
||||||
|
element.mouseScrolled(0.0, 0.0, -value);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
absValue -= deadZone;
|
absValue -= deadZone;
|
||||||
@@ -593,7 +604,7 @@ public class MidnightInput {
|
|||||||
labelWidget.onPress();
|
labelWidget.onPress();
|
||||||
return true;
|
return true;
|
||||||
} else if (focused instanceof WorldListWidget list) {
|
} else if (focused instanceof WorldListWidget list) {
|
||||||
list.getSelectedAsOptional().ifPresent(WorldListWidget.Entry::play);
|
list.getSelectedAsOptional().ifPresent(WorldListWidget.WorldEntry::play);
|
||||||
return true;
|
return true;
|
||||||
} else if (focused instanceof MultiplayerServerListWidget list) {
|
} else if (focused instanceof MultiplayerServerListWidget list) {
|
||||||
var entry = list.getSelectedOrNull();
|
var entry = list.getSelectedOrNull();
|
||||||
@@ -703,7 +714,7 @@ public class MidnightInput {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isScreenInteractive(@NotNull Screen screen) {
|
public static boolean isScreenInteractive(@NotNull Screen screen) {
|
||||||
return !(screen instanceof AdvancementsScreen || screen instanceof HandledScreen || screen instanceof PackScreen
|
return !(screen instanceof HandledScreen || MidnightControlsConfig.mouseScreens.stream().anyMatch(a -> screen.getClass().toString().contains(a))
|
||||||
|| (screen instanceof SpruceScreen && ((SpruceScreen) screen).requiresCursor())
|
|| (screen instanceof SpruceScreen && ((SpruceScreen) screen).requiresCursor())
|
||||||
|| MidnightControlsCompat.requireMouseOnScreen(screen));
|
|| MidnightControlsCompat.requireMouseOnScreen(screen));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client;
|
package eu.midnightdust.midnightcontrols.client;
|
||||||
|
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import org.aperlambda.lambdacommon.utils.Nameable;
|
import org.aperlambda.lambdacommon.utils.Nameable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -34,7 +33,7 @@ public enum VirtualMouseSkin implements Nameable {
|
|||||||
|
|
||||||
VirtualMouseSkin(String name) {
|
VirtualMouseSkin(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.text = new TranslatableText(this.getTranslationKey());
|
this.text = Text.translatable(this.getTranslationKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -39,8 +39,10 @@ public class MidnightControlsCompat {
|
|||||||
* @param mod the mod instance
|
* @param mod the mod instance
|
||||||
*/
|
*/
|
||||||
public static void init(@NotNull MidnightControlsClient mod) {
|
public static void init(@NotNull MidnightControlsClient mod) {
|
||||||
if (FabricLoader.getInstance().isModLoaded("okzoomer")) {
|
// "okzoomer" is the mod ID used by Fabric-compatible versions of Ok Zoomer. (5.0.0-beta.6 and below.)
|
||||||
mod.log("Adding okzoomer compatibility...");
|
// "ok_zoomer" is the mod ID used by Quilt-exclusive versions of Ok Zoomer. (5.0.0-beta.7 and above.)
|
||||||
|
if (FabricLoader.getInstance().isModLoaded("okzoomer") || FabricLoader.getInstance().isModLoaded("ok_zoomer")) {
|
||||||
|
mod.log("Adding Ok Zoomer compatibility...");
|
||||||
HANDLERS.add(new OkZoomerCompat());
|
HANDLERS.add(new OkZoomerCompat());
|
||||||
}
|
}
|
||||||
/*if (isReiPresent()) {
|
/*if (isReiPresent()) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2021 LambdAurora <aurora42lambda@gmail.com>
|
* Copyright © 2021-2022 Karen/あけみ <karen@akemi.ai>, LambdAurora <aurora42lambda@gmail.com>
|
||||||
*
|
*
|
||||||
* This file is part of midnightcontrols.
|
* This file is part of MidnightControls.
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license. For more information,
|
* Licensed under the MIT license. For more information,
|
||||||
* see the LICENSE file.
|
* see the LICENSE file.
|
||||||
@@ -11,49 +11,185 @@ package eu.midnightdust.midnightcontrols.client.compat;
|
|||||||
|
|
||||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
||||||
import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding;
|
import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding;
|
||||||
import io.github.ennuil.okzoomer.keybinds.ZoomKeybinds;
|
import net.minecraft.client.option.KeyBinding;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.aperlambda.lambdacommon.utils.LambdaReflection;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a compatibility handler for OkZoomer.
|
* Represents a compatibility handler for Ok Zoomer.
|
||||||
*
|
*
|
||||||
* @author LambdAurora
|
* @author Karen/あけみ, LambdAurora
|
||||||
* @version 1.4.3
|
* @version 1.4.3
|
||||||
* @since 1.1.0
|
* @since 1.1.0
|
||||||
*/
|
*/
|
||||||
public class OkZoomerCompat implements CompatHandler {
|
public class OkZoomerCompat implements CompatHandler {
|
||||||
|
private boolean didAllReflectionCallsSucceed = false;
|
||||||
|
|
||||||
|
private KeyBinding okZoomerZoomKey;
|
||||||
|
private KeyBinding okZoomerIncreaseZoomKey;
|
||||||
|
private KeyBinding okZoomerDecreaseZoomKey;
|
||||||
|
private KeyBinding okZoomerResetZoomKey;
|
||||||
|
|
||||||
|
private Method okZoomerAreExtraKeyBindsEnabledMethod;
|
||||||
|
|
||||||
|
public OkZoomerCompat() {
|
||||||
|
// These strings represent the names of the classes, fields, and methods we use from the Ok Zoomer API
|
||||||
|
String okZoomerZoomKeybindsClassString;
|
||||||
|
|
||||||
|
String okZoomerZoomKeyFieldString;
|
||||||
|
String okZoomerIncreaseZoomKeyFieldString;
|
||||||
|
String okZoomerDecreaseZoomKeyFieldString;
|
||||||
|
String okZoomerResetZoomKeyFieldString;
|
||||||
|
|
||||||
|
String okZoomerAreExtraKeyBindsEnabledMethodNameString;
|
||||||
|
|
||||||
|
// These variables represent the actual objects that we reflect to
|
||||||
|
Class<?> okZoomerZoomKeybindsClass;
|
||||||
|
|
||||||
|
Field okZoomerZoomKeyField;
|
||||||
|
Field okZoomerIncreaseZoomKeyField;
|
||||||
|
Field okZoomerDecreaseZoomKeyField;
|
||||||
|
Field okZoomerResetZoomKeyField;
|
||||||
|
|
||||||
|
// First, we need to determine which version of the Ok Zoomer API we're dealing with here.
|
||||||
|
if (LambdaReflection.doesClassExist("io.github.ennuil.okzoomer.keybinds.ZoomKeybinds")) {
|
||||||
|
// https://github.com/EnnuiL/OkZoomer/blob/5.0.0-beta.3+1.17.1/src/main/java/io/github/ennuil/okzoomer/keybinds/ZoomKeybinds.java
|
||||||
|
MidnightControlsClient.get().log("Ok Zoomer version 5.0.0-beta.3 or below detected!");
|
||||||
|
|
||||||
|
okZoomerZoomKeybindsClassString = "io.github.ennuil.okzoomer.keybinds.ZoomKeybinds";
|
||||||
|
|
||||||
|
okZoomerZoomKeyFieldString = "zoomKey";
|
||||||
|
okZoomerIncreaseZoomKeyFieldString = "increaseZoomKey";
|
||||||
|
okZoomerDecreaseZoomKeyFieldString = "decreaseZoomKey";
|
||||||
|
okZoomerResetZoomKeyFieldString = "resetZoomKey";
|
||||||
|
|
||||||
|
okZoomerAreExtraKeyBindsEnabledMethodNameString = "areExtraKeybindsEnabled";
|
||||||
|
} else if (LambdaReflection.doesClassExist("io.github.ennuil.okzoomer.key_binds.ZoomKeyBinds")) {
|
||||||
|
// https://github.com/EnnuiL/OkZoomer/blob/5.0.0-beta.6+1.18.2/src/main/java/io/github/ennuil/okzoomer/key_binds/ZoomKeyBinds.java
|
||||||
|
MidnightControlsClient.get().log("Ok Zoomer version 5.0.0-beta.6, 5.0.0-beta.5, or 5.0.0-beta.4 detected!");
|
||||||
|
|
||||||
|
okZoomerZoomKeybindsClassString = "io.github.ennuil.okzoomer.key_binds.ZoomKeyBinds";
|
||||||
|
|
||||||
|
okZoomerZoomKeyFieldString = "ZOOM_KEY";
|
||||||
|
okZoomerIncreaseZoomKeyFieldString = "INCREASE_ZOOM_KEY";
|
||||||
|
okZoomerDecreaseZoomKeyFieldString = "DECREASE_ZOOM_KEY";
|
||||||
|
okZoomerResetZoomKeyFieldString = "RESET_ZOOM_KEY";
|
||||||
|
|
||||||
|
okZoomerAreExtraKeyBindsEnabledMethodNameString = "areExtraKeyBindsEnabled";
|
||||||
|
} else if (LambdaReflection.doesClassExist("io.github.ennuil.ok_zoomer.key_binds.ZoomKeyBinds")) {
|
||||||
|
// https://github.com/EnnuiL/OkZoomer/blob/5.0.0-beta.7+1.18.2/src/main/java/io/github/ennuil/ok_zoomer/key_binds/ZoomKeyBinds.java
|
||||||
|
MidnightControlsClient.get().log("Ok Zoomer version 5.0.0-beta.7 (Quilt) or above detected!");
|
||||||
|
|
||||||
|
okZoomerZoomKeybindsClassString = "io.github.ennuil.ok_zoomer.key_binds.ZoomKeyBinds";
|
||||||
|
|
||||||
|
okZoomerZoomKeyFieldString = "ZOOM_KEY";
|
||||||
|
okZoomerIncreaseZoomKeyFieldString = "INCREASE_ZOOM_KEY";
|
||||||
|
okZoomerDecreaseZoomKeyFieldString = "DECREASE_ZOOM_KEY";
|
||||||
|
okZoomerResetZoomKeyFieldString = "RESET_ZOOM_KEY";
|
||||||
|
|
||||||
|
okZoomerAreExtraKeyBindsEnabledMethodNameString = "areExtraKeyBindsEnabled";
|
||||||
|
} else {
|
||||||
|
// If all of the above checks fail, then the version of the Ok Zoomer API that the user is trying to use is too new.
|
||||||
|
MidnightControlsClient.get().warn("The version of Ok Zoomer that you are currently using is too new, and is not yet supported by MidnightControls!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reflect to the ZoomKeyBinds (>= 5.0.0-beta.4) / ZoomKeybinds (<= 5.0.0-beta.3) class.
|
||||||
|
try {
|
||||||
|
okZoomerZoomKeybindsClass = Class.forName(okZoomerZoomKeybindsClassString);
|
||||||
|
} catch (ClassNotFoundException exception) {
|
||||||
|
// This theoretically should never happen.
|
||||||
|
MidnightControlsClient.get().warn("MidnightControls failed to reflect to the Ok Zoomer keybinds class!");
|
||||||
|
exception.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reflect to all of the keybind fields.
|
||||||
|
try {
|
||||||
|
okZoomerZoomKeyField = okZoomerZoomKeybindsClass.getField(okZoomerZoomKeyFieldString);
|
||||||
|
okZoomerIncreaseZoomKeyField = okZoomerZoomKeybindsClass.getField(okZoomerIncreaseZoomKeyFieldString);
|
||||||
|
okZoomerDecreaseZoomKeyField = okZoomerZoomKeybindsClass.getField(okZoomerDecreaseZoomKeyFieldString);
|
||||||
|
okZoomerResetZoomKeyField = okZoomerZoomKeybindsClass.getField(okZoomerResetZoomKeyFieldString);
|
||||||
|
} catch (NoSuchFieldException exception) {
|
||||||
|
MidnightControlsClient.get().warn("MidnightControls failed to reflect to the Ok Zoomer keybind fields!");
|
||||||
|
exception.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialise KeyBinding objects
|
||||||
|
try {
|
||||||
|
okZoomerZoomKey = (KeyBinding) okZoomerZoomKeyField.get(null);
|
||||||
|
okZoomerIncreaseZoomKey = (KeyBinding) okZoomerIncreaseZoomKeyField.get(null);
|
||||||
|
okZoomerDecreaseZoomKey = (KeyBinding) okZoomerDecreaseZoomKeyField.get(null);
|
||||||
|
okZoomerResetZoomKey = (KeyBinding) okZoomerResetZoomKeyField.get(null);
|
||||||
|
} catch (IllegalAccessException exception) {
|
||||||
|
MidnightControlsClient.get().warn("MidnightControls failed to reflect to the Ok Zoomer keybind objects!");
|
||||||
|
exception.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reflect to the areExtraKeyBindsEnabled (>= 5.0.0-beta.4) / areExtraKeybindsEnabled (<= 5.0.0-beta.3) method.
|
||||||
|
// TODO: Consider replacing this entirely with getExtraKeyBind (>= 5.0.0-beta.4) / getExtraKeybind (<= 5.0.0-beta.3) in the future.
|
||||||
|
try {
|
||||||
|
okZoomerAreExtraKeyBindsEnabledMethod = okZoomerZoomKeybindsClass.getDeclaredMethod(okZoomerAreExtraKeyBindsEnabledMethodNameString);
|
||||||
|
} catch (NoSuchMethodException exception) {
|
||||||
|
MidnightControlsClient.get().warn("MidnightControls failed to reflect to an Ok Zoomer method (areExtraKeyBindsEnabled / areExtraKeybindsEnabled)!");
|
||||||
|
exception.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
didAllReflectionCallsSucceed = true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(@NotNull MidnightControlsClient mod) {
|
public void handle(@NotNull MidnightControlsClient mod) {
|
||||||
|
if (didAllReflectionCallsSucceed) {
|
||||||
new ButtonBinding.Builder("zoom")
|
new ButtonBinding.Builder("zoom")
|
||||||
.buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_UP, GLFW.GLFW_GAMEPAD_BUTTON_X)
|
.buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_UP, GLFW.GLFW_GAMEPAD_BUTTON_X)
|
||||||
.onlyInGame()
|
.onlyInGame()
|
||||||
.cooldown(true)
|
.cooldown(true)
|
||||||
.category(ButtonBinding.MISC_CATEGORY)
|
.category(ButtonBinding.MISC_CATEGORY)
|
||||||
.linkKeybind(ZoomKeybinds.zoomKey)
|
.linkKeybind(okZoomerZoomKey)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
if (ZoomKeybinds.areExtraKeybindsEnabled()) {
|
boolean okZoomerAreExtraKeyBindsEnabled = false;
|
||||||
|
try {
|
||||||
|
okZoomerAreExtraKeyBindsEnabled = (boolean) okZoomerAreExtraKeyBindsEnabledMethod.invoke(null);
|
||||||
|
} catch (IllegalAccessException exception) {
|
||||||
|
MidnightControlsClient.get().warn("MidnightControls encountered an IllegalAccessException while attempting to invoke a reflected Ok Zoomer method (areExtraKeyBindsEnabled / areExtraKeybindsEnabled)!");
|
||||||
|
exception.printStackTrace();
|
||||||
|
} catch (InvocationTargetException exception) {
|
||||||
|
MidnightControlsClient.get().warn("MidnightControls encountered an InvocationTargetException while attempting to invoke a reflected Ok Zoomer method (areExtraKeyBindsEnabled / areExtraKeybindsEnabled)!");
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (okZoomerAreExtraKeyBindsEnabled) {
|
||||||
new ButtonBinding.Builder("zoom_in")
|
new ButtonBinding.Builder("zoom_in")
|
||||||
.buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_UP, ButtonBinding.axisAsButton(GLFW.GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER, true))
|
.buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_UP, ButtonBinding.axisAsButton(GLFW.GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER, true))
|
||||||
.onlyInGame()
|
.onlyInGame()
|
||||||
.cooldown(true)
|
.cooldown(true)
|
||||||
.category(ButtonBinding.MISC_CATEGORY)
|
.category(ButtonBinding.MISC_CATEGORY)
|
||||||
.linkKeybind(ZoomKeybinds.increaseZoomKey)
|
.linkKeybind(okZoomerIncreaseZoomKey)
|
||||||
.register();
|
.register();
|
||||||
new ButtonBinding.Builder("zoom_out")
|
new ButtonBinding.Builder("zoom_out")
|
||||||
.buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_UP, ButtonBinding.axisAsButton(GLFW.GLFW_GAMEPAD_AXIS_LEFT_TRIGGER, true))
|
.buttons(GLFW.GLFW_GAMEPAD_BUTTON_DPAD_UP, ButtonBinding.axisAsButton(GLFW.GLFW_GAMEPAD_AXIS_LEFT_TRIGGER, true))
|
||||||
.onlyInGame()
|
.onlyInGame()
|
||||||
.cooldown(true)
|
.cooldown(true)
|
||||||
.category(ButtonBinding.MISC_CATEGORY)
|
.category(ButtonBinding.MISC_CATEGORY)
|
||||||
.linkKeybind(ZoomKeybinds.decreaseZoomKey)
|
.linkKeybind(okZoomerDecreaseZoomKey)
|
||||||
.register();
|
.register();
|
||||||
new ButtonBinding.Builder("zoom_reset")
|
new ButtonBinding.Builder("zoom_reset")
|
||||||
.onlyInGame()
|
.onlyInGame()
|
||||||
.cooldown(true)
|
.cooldown(true)
|
||||||
.category(ButtonBinding.MISC_CATEGORY)
|
.category(ButtonBinding.MISC_CATEGORY)
|
||||||
.linkKeybind(ZoomKeybinds.resetZoomKey)
|
.linkKeybind(okZoomerResetZoomKey)
|
||||||
.register();
|
.register();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,16 +16,6 @@ import eu.midnightdust.midnightcontrols.client.compat.mixin.EntryWidgetAccessor;
|
|||||||
import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding;
|
import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding;
|
||||||
import eu.midnightdust.midnightcontrols.client.controller.InputHandlers;
|
import eu.midnightdust.midnightcontrols.client.controller.InputHandlers;
|
||||||
import eu.midnightdust.midnightcontrols.client.controller.PressAction;
|
import eu.midnightdust.midnightcontrols.client.controller.PressAction;
|
||||||
import me.shedaniel.rei.RoughlyEnoughItemsCoreClient;
|
|
||||||
import me.shedaniel.rei.impl.client.ClientHelperImpl;
|
|
||||||
import me.shedaniel.rei.impl.client.REIRuntimeImpl;
|
|
||||||
import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl;
|
|
||||||
import me.shedaniel.rei.impl.client.gui.screen.CompositeDisplayViewingScreen;
|
|
||||||
import me.shedaniel.rei.impl.client.gui.screen.DefaultDisplayViewingScreen;
|
|
||||||
import me.shedaniel.rei.impl.client.gui.widget.EntryListEntryWidget;
|
|
||||||
import me.shedaniel.rei.impl.client.gui.widget.EntryWidget;
|
|
||||||
import me.shedaniel.rei.impl.client.registry.screen.ScreenRegistryImpl;
|
|
||||||
import me.shedaniel.rei.impl.common.entry.AbstractEntryStack;
|
|
||||||
import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry;
|
import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry;
|
||||||
import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry;
|
import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import net.minecraft.client.MinecraftClient;
|
|||||||
import net.minecraft.client.option.GameOptions;
|
import net.minecraft.client.option.GameOptions;
|
||||||
import net.minecraft.client.option.KeyBinding;
|
import net.minecraft.client.option.KeyBinding;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import org.aperlambda.lambdacommon.utils.function.PairPredicate;
|
import org.aperlambda.lambdacommon.utils.function.PairPredicate;
|
||||||
import org.aperlambda.lambdacommon.utils.function.Predicates;
|
import org.aperlambda.lambdacommon.utils.function.Predicates;
|
||||||
@@ -79,6 +78,16 @@ public class ButtonBinding {
|
|||||||
.action(InputHandlers.handleHotbar(false)).filter(Predicates.or(InputHandlers::inInventory, InputHandlers::inAdvancements)).cooldown().register();
|
.action(InputHandlers.handleHotbar(false)).filter(Predicates.or(InputHandlers::inInventory, InputHandlers::inAdvancements)).cooldown().register();
|
||||||
public static final ButtonBinding TAB_RIGHT = new Builder("tab_next").buttons(GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER)
|
public static final ButtonBinding TAB_RIGHT = new Builder("tab_next").buttons(GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER)
|
||||||
.action(InputHandlers.handleHotbar(true)).filter(Predicates.or(InputHandlers::inInventory, InputHandlers::inAdvancements)).cooldown().register();
|
.action(InputHandlers.handleHotbar(true)).filter(Predicates.or(InputHandlers::inInventory, InputHandlers::inAdvancements)).cooldown().register();
|
||||||
|
public static final ButtonBinding PAGE_LEFT = new Builder("page_back").buttons(axisAsButton(GLFW_GAMEPAD_AXIS_LEFT_TRIGGER, true))
|
||||||
|
.action(InputHandlers.handlePage(false)).filter(InputHandlers::inInventory).cooldown().register();
|
||||||
|
public static final ButtonBinding PAGE_RIGHT = new Builder("page_next").buttons(axisAsButton(GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER, true))
|
||||||
|
.action(InputHandlers.handlePage(true)).filter(InputHandlers::inInventory).cooldown().register();
|
||||||
|
public static final ButtonBinding TAKE = new Builder("take").buttons(GLFW_GAMEPAD_BUTTON_X)
|
||||||
|
.action(InputHandlers.handleActions()).filter(InputHandlers::inInventory).cooldown().register();
|
||||||
|
public static final ButtonBinding TAKE_ALL = new Builder("take_all").buttons(GLFW_GAMEPAD_BUTTON_A)
|
||||||
|
.action(InputHandlers.handleActions()).filter(InputHandlers::inInventory).cooldown().register();
|
||||||
|
public static final ButtonBinding QUICK_MOVE = new Builder("quick_move").buttons(GLFW_GAMEPAD_BUTTON_Y)
|
||||||
|
.action(InputHandlers.handleActions()).filter(InputHandlers::inInventory).cooldown().register();
|
||||||
public static final ButtonBinding TOGGLE_PERSPECTIVE = new Builder("toggle_perspective").buttons(GLFW_GAMEPAD_BUTTON_DPAD_UP, GLFW_GAMEPAD_BUTTON_Y).cooldown().register();
|
public static final ButtonBinding TOGGLE_PERSPECTIVE = new Builder("toggle_perspective").buttons(GLFW_GAMEPAD_BUTTON_DPAD_UP, GLFW_GAMEPAD_BUTTON_Y).cooldown().register();
|
||||||
public static final ButtonBinding USE = new Builder("use").buttons(axisAsButton(GLFW_GAMEPAD_AXIS_LEFT_TRIGGER, true)).register();
|
public static final ButtonBinding USE = new Builder("use").buttons(axisAsButton(GLFW_GAMEPAD_AXIS_LEFT_TRIGGER, true)).register();
|
||||||
|
|
||||||
@@ -96,7 +105,7 @@ public class ButtonBinding {
|
|||||||
public ButtonBinding(String key, int[] defaultButton, List<PressAction> actions, PairPredicate<MinecraftClient, ButtonBinding> filter, boolean hasCooldown) {
|
public ButtonBinding(String key, int[] defaultButton, List<PressAction> actions, PairPredicate<MinecraftClient, ButtonBinding> filter, boolean hasCooldown) {
|
||||||
this.setButton(this.defaultButton = defaultButton);
|
this.setButton(this.defaultButton = defaultButton);
|
||||||
this.key = key;
|
this.key = key;
|
||||||
this.text = new TranslatableText(this.key);
|
this.text = Text.translatable(this.key);
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
this.actions.addAll(actions);
|
this.actions.addAll(actions);
|
||||||
this.hasCooldown = hasCooldown;
|
this.hasCooldown = hasCooldown;
|
||||||
@@ -295,24 +304,24 @@ public class ButtonBinding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void init(@NotNull GameOptions options) {
|
public static void init(@NotNull GameOptions options) {
|
||||||
ATTACK.mcKeyBinding = options.keyAttack;
|
ATTACK.mcKeyBinding = options.attackKey;
|
||||||
BACK.mcKeyBinding = options.keyBack;
|
BACK.mcKeyBinding = options.backKey;
|
||||||
CHAT.mcKeyBinding = options.keyChat;
|
CHAT.mcKeyBinding = options.chatKey;
|
||||||
DROP_ITEM.mcKeyBinding = options.keyDrop;
|
DROP_ITEM.mcKeyBinding = options.dropKey;
|
||||||
FORWARD.mcKeyBinding = options.keyForward;
|
FORWARD.mcKeyBinding = options.forwardKey;
|
||||||
INVENTORY.mcKeyBinding = options.keyInventory;
|
INVENTORY.mcKeyBinding = options.inventoryKey;
|
||||||
JUMP.mcKeyBinding = options.keyJump;
|
JUMP.mcKeyBinding = options.jumpKey;
|
||||||
LEFT.mcKeyBinding = options.keyLeft;
|
LEFT.mcKeyBinding = options.leftKey;
|
||||||
PICK_BLOCK.mcKeyBinding = options.keyPickItem;
|
PICK_BLOCK.mcKeyBinding = options.pickItemKey;
|
||||||
PLAYER_LIST.mcKeyBinding = options.keyPlayerList;
|
PLAYER_LIST.mcKeyBinding = options.playerListKey;
|
||||||
RIGHT.mcKeyBinding = options.keyRight;
|
RIGHT.mcKeyBinding = options.rightKey;
|
||||||
SCREENSHOT.mcKeyBinding = options.keyScreenshot;
|
SCREENSHOT.mcKeyBinding = options.screenshotKey;
|
||||||
SMOOTH_CAMERA.mcKeyBinding = options.keySmoothCamera;
|
SMOOTH_CAMERA.mcKeyBinding = options.smoothCameraKey;
|
||||||
SNEAK.mcKeyBinding = options.keySneak;
|
SNEAK.mcKeyBinding = options.sneakKey;
|
||||||
SPRINT.mcKeyBinding = options.keySprint;
|
SPRINT.mcKeyBinding = options.sprintKey;
|
||||||
SWAP_HANDS.mcKeyBinding = options.keySwapHands;
|
SWAP_HANDS.mcKeyBinding = options.swapHandsKey;
|
||||||
TOGGLE_PERSPECTIVE.mcKeyBinding = options.keyTogglePerspective;
|
TOGGLE_PERSPECTIVE.mcKeyBinding = options.togglePerspectiveKey;
|
||||||
USE.mcKeyBinding = options.keyUse;
|
USE.mcKeyBinding = options.useKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -323,37 +332,37 @@ public class ButtonBinding {
|
|||||||
*/
|
*/
|
||||||
public static @NotNull Text getLocalizedButtonName(int button) {
|
public static @NotNull Text getLocalizedButtonName(int button) {
|
||||||
return switch (button % 500) {
|
return switch (button % 500) {
|
||||||
case -1 -> new TranslatableText("key.keyboard.unknown");
|
case -1 -> Text.translatable("key.keyboard.unknown");
|
||||||
case GLFW_GAMEPAD_BUTTON_A -> new TranslatableText("midnightcontrols.button.a");
|
case GLFW_GAMEPAD_BUTTON_A -> Text.translatable("midnightcontrols.button.a");
|
||||||
case GLFW_GAMEPAD_BUTTON_B -> new TranslatableText("midnightcontrols.button.b");
|
case GLFW_GAMEPAD_BUTTON_B -> Text.translatable("midnightcontrols.button.b");
|
||||||
case GLFW_GAMEPAD_BUTTON_X -> new TranslatableText("midnightcontrols.button.x");
|
case GLFW_GAMEPAD_BUTTON_X -> Text.translatable("midnightcontrols.button.x");
|
||||||
case GLFW_GAMEPAD_BUTTON_Y -> new TranslatableText("midnightcontrols.button.y");
|
case GLFW_GAMEPAD_BUTTON_Y -> Text.translatable("midnightcontrols.button.y");
|
||||||
case GLFW_GAMEPAD_BUTTON_LEFT_BUMPER -> new TranslatableText("midnightcontrols.button.left_bumper");
|
case GLFW_GAMEPAD_BUTTON_LEFT_BUMPER -> Text.translatable("midnightcontrols.button.left_bumper");
|
||||||
case GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER -> new TranslatableText("midnightcontrols.button.right_bumper");
|
case GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER -> Text.translatable("midnightcontrols.button.right_bumper");
|
||||||
case GLFW_GAMEPAD_BUTTON_BACK -> new TranslatableText("midnightcontrols.button.back");
|
case GLFW_GAMEPAD_BUTTON_BACK -> Text.translatable("midnightcontrols.button.back");
|
||||||
case GLFW_GAMEPAD_BUTTON_START -> new TranslatableText("midnightcontrols.button.start");
|
case GLFW_GAMEPAD_BUTTON_START -> Text.translatable("midnightcontrols.button.start");
|
||||||
case GLFW_GAMEPAD_BUTTON_GUIDE -> new TranslatableText("midnightcontrols.button.guide");
|
case GLFW_GAMEPAD_BUTTON_GUIDE -> Text.translatable("midnightcontrols.button.guide");
|
||||||
case GLFW_GAMEPAD_BUTTON_LEFT_THUMB -> new TranslatableText("midnightcontrols.button.left_thumb");
|
case GLFW_GAMEPAD_BUTTON_LEFT_THUMB -> Text.translatable("midnightcontrols.button.left_thumb");
|
||||||
case GLFW_GAMEPAD_BUTTON_RIGHT_THUMB -> new TranslatableText("midnightcontrols.button.right_thumb");
|
case GLFW_GAMEPAD_BUTTON_RIGHT_THUMB -> Text.translatable("midnightcontrols.button.right_thumb");
|
||||||
case GLFW_GAMEPAD_BUTTON_DPAD_UP -> new TranslatableText("midnightcontrols.button.dpad_up");
|
case GLFW_GAMEPAD_BUTTON_DPAD_UP -> Text.translatable("midnightcontrols.button.dpad_up");
|
||||||
case GLFW_GAMEPAD_BUTTON_DPAD_RIGHT -> new TranslatableText("midnightcontrols.button.dpad_right");
|
case GLFW_GAMEPAD_BUTTON_DPAD_RIGHT -> Text.translatable("midnightcontrols.button.dpad_right");
|
||||||
case GLFW_GAMEPAD_BUTTON_DPAD_DOWN -> new TranslatableText("midnightcontrols.button.dpad_down");
|
case GLFW_GAMEPAD_BUTTON_DPAD_DOWN -> Text.translatable("midnightcontrols.button.dpad_down");
|
||||||
case GLFW_GAMEPAD_BUTTON_DPAD_LEFT -> new TranslatableText("midnightcontrols.button.dpad_left");
|
case GLFW_GAMEPAD_BUTTON_DPAD_LEFT -> Text.translatable("midnightcontrols.button.dpad_left");
|
||||||
case 100 -> new TranslatableText("midnightcontrols.axis.left_x+");
|
case 100 -> Text.translatable("midnightcontrols.axis.left_x+");
|
||||||
case 101 -> new TranslatableText("midnightcontrols.axis.left_y+");
|
case 101 -> Text.translatable("midnightcontrols.axis.left_y+");
|
||||||
case 102 -> new TranslatableText("midnightcontrols.axis.right_x+");
|
case 102 -> Text.translatable("midnightcontrols.axis.right_x+");
|
||||||
case 103 -> new TranslatableText("midnightcontrols.axis.right_y+");
|
case 103 -> Text.translatable("midnightcontrols.axis.right_y+");
|
||||||
case 104 -> new TranslatableText("midnightcontrols.axis.left_trigger");
|
case 104 -> Text.translatable("midnightcontrols.axis.left_trigger");
|
||||||
case 105 -> new TranslatableText("midnightcontrols.axis.right_trigger");
|
case 105 -> Text.translatable("midnightcontrols.axis.right_trigger");
|
||||||
case 200 -> new TranslatableText("midnightcontrols.axis.left_x-");
|
case 200 -> Text.translatable("midnightcontrols.axis.left_x-");
|
||||||
case 201 -> new TranslatableText("midnightcontrols.axis.left_y-");
|
case 201 -> Text.translatable("midnightcontrols.axis.left_y-");
|
||||||
case 202 -> new TranslatableText("midnightcontrols.axis.right_x-");
|
case 202 -> Text.translatable("midnightcontrols.axis.right_x-");
|
||||||
case 203 -> new TranslatableText("midnightcontrols.axis.right_y-");
|
case 203 -> Text.translatable("midnightcontrols.axis.right_y-");
|
||||||
case 15 -> new TranslatableText("midnightcontrols.button.l4");
|
case 15 -> Text.translatable("midnightcontrols.button.l4");
|
||||||
case 16 -> new TranslatableText("midnightcontrols.button.l5");
|
case 16 -> Text.translatable("midnightcontrols.button.l5");
|
||||||
case 17 -> new TranslatableText("midnightcontrols.button.r4");
|
case 17 -> Text.translatable("midnightcontrols.button.r4");
|
||||||
case 18 -> new TranslatableText("midnightcontrols.button.r5");
|
case 18 -> Text.translatable("midnightcontrols.button.r5");
|
||||||
default -> new TranslatableText("midnightcontrols.button.unknown", button);
|
default -> Text.translatable("midnightcontrols.button.unknown", button);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,7 +385,12 @@ public class ButtonBinding {
|
|||||||
ButtonBinding.HOTBAR_LEFT,
|
ButtonBinding.HOTBAR_LEFT,
|
||||||
ButtonBinding.HOTBAR_RIGHT,
|
ButtonBinding.HOTBAR_RIGHT,
|
||||||
ButtonBinding.INVENTORY,
|
ButtonBinding.INVENTORY,
|
||||||
ButtonBinding.SWAP_HANDS
|
ButtonBinding.SWAP_HANDS,
|
||||||
|
ButtonBinding.PAGE_LEFT,
|
||||||
|
ButtonBinding.PAGE_RIGHT,
|
||||||
|
ButtonBinding.TAKE,
|
||||||
|
ButtonBinding.TAKE_ALL,
|
||||||
|
ButtonBinding.QUICK_MOVE
|
||||||
));
|
));
|
||||||
MULTIPLAYER_CATEGORY = InputManager.registerDefaultCategory("key.categories.multiplayer",
|
MULTIPLAYER_CATEGORY = InputManager.registerDefaultCategory("key.categories.multiplayer",
|
||||||
category -> category.registerAllBindings(ButtonBinding.CHAT, ButtonBinding.PLAYER_LIST));
|
category -> category.registerAllBindings(ButtonBinding.CHAT, ButtonBinding.PLAYER_LIST));
|
||||||
|
|||||||
@@ -14,8 +14,7 @@ import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
|||||||
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.toast.SystemToast;
|
import net.minecraft.client.toast.SystemToast;
|
||||||
import net.minecraft.text.LiteralText;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import org.aperlambda.lambdacommon.utils.Nameable;
|
import org.aperlambda.lambdacommon.utils.Nameable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
@@ -23,7 +22,8 @@ import org.lwjgl.glfw.GLFWGamepadState;
|
|||||||
import org.lwjgl.system.MemoryStack;
|
import org.lwjgl.system.MemoryStack;
|
||||||
import org.lwjgl.system.MemoryUtil;
|
import org.lwjgl.system.MemoryUtil;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.*;
|
||||||
|
import java.net.URL;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
@@ -145,9 +145,23 @@ public record Controller(int id) implements Nameable {
|
|||||||
*/
|
*/
|
||||||
public static void updateMappings() {
|
public static void updateMappings() {
|
||||||
try {
|
try {
|
||||||
|
MidnightControlsClient.get().log("Updating controller mappings...");
|
||||||
|
File databaseFile = new File("config/gamecontrollerdatabase.txt");
|
||||||
|
try {
|
||||||
|
BufferedInputStream in = new BufferedInputStream(new URL("https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt").openStream());
|
||||||
|
|
||||||
|
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(databaseFile));
|
||||||
|
byte[] dataBuffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
|
||||||
|
out.write(dataBuffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
} catch (Exception ignored) {/* Just continue when internet connection is not available */}
|
||||||
|
var database = ioResourceToBuffer(databaseFile.getPath(), 1024);
|
||||||
|
GLFW.glfwUpdateGamepadMappings(database);
|
||||||
if (!MidnightControlsClient.MAPPINGS_FILE.exists())
|
if (!MidnightControlsClient.MAPPINGS_FILE.exists())
|
||||||
return;
|
return;
|
||||||
MidnightControlsClient.get().log("Updating controller mappings...");
|
|
||||||
var buffer = ioResourceToBuffer(MidnightControlsClient.MAPPINGS_FILE.getPath(), 1024);
|
var buffer = ioResourceToBuffer(MidnightControlsClient.MAPPINGS_FILE.getPath(), 1024);
|
||||||
GLFW.glfwUpdateGamepadMappings(buffer);
|
GLFW.glfwUpdateGamepadMappings(buffer);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -163,7 +177,7 @@ public record Controller(int id) implements Nameable {
|
|||||||
var client = MinecraftClient.getInstance();
|
var client = MinecraftClient.getInstance();
|
||||||
if (client != null) {
|
if (client != null) {
|
||||||
client.getToastManager().add(SystemToast.create(client, SystemToast.Type.TUTORIAL_HINT,
|
client.getToastManager().add(SystemToast.create(client, SystemToast.Type.TUTORIAL_HINT,
|
||||||
new TranslatableText("midnightcontrols.controller.mappings.error"), new LiteralText(string)));
|
Text.translatable("midnightcontrols.controller.mappings.error"), Text.literal(string)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
|
|||||||
@@ -10,27 +10,36 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client.controller;
|
package eu.midnightdust.midnightcontrols.client.controller;
|
||||||
|
|
||||||
import eu.midnightdust.midnightcontrols.client.ButtonState;
|
import eu.midnightdust.midnightcontrols.client.ButtonState;
|
||||||
|
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
||||||
import eu.midnightdust.midnightcontrols.client.MidnightInput;
|
import eu.midnightdust.midnightcontrols.client.MidnightInput;
|
||||||
|
import eu.midnightdust.midnightcontrols.client.compat.MidnightControlsCompat;
|
||||||
import eu.midnightdust.midnightcontrols.client.mixin.AdvancementsScreenAccessor;
|
import eu.midnightdust.midnightcontrols.client.mixin.AdvancementsScreenAccessor;
|
||||||
import eu.midnightdust.midnightcontrols.client.mixin.CreativeInventoryScreenAccessor;
|
import eu.midnightdust.midnightcontrols.client.mixin.CreativeInventoryScreenAccessor;
|
||||||
import eu.midnightdust.midnightcontrols.client.mixin.RecipeBookWidgetAccessor;
|
import eu.midnightdust.midnightcontrols.client.mixin.RecipeBookWidgetAccessor;
|
||||||
import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor;
|
import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor;
|
||||||
|
import net.fabricmc.fabric.impl.item.group.CreativeGuiExtensions;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.gl.Framebuffer;
|
import net.minecraft.client.gl.Framebuffer;
|
||||||
import net.minecraft.client.gui.screen.advancement.AdvancementsScreen;
|
import net.minecraft.client.gui.screen.advancement.AdvancementsScreen;
|
||||||
|
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
|
||||||
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
||||||
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
|
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
|
||||||
import net.minecraft.client.util.ScreenshotRecorder;
|
import net.minecraft.client.util.ScreenshotRecorder;
|
||||||
import net.minecraft.item.ItemGroup;
|
import net.minecraft.item.ItemGroup;
|
||||||
import net.minecraft.screen.slot.Slot;
|
import net.minecraft.screen.slot.Slot;
|
||||||
|
import net.minecraft.screen.slot.SlotActionType;
|
||||||
import org.aperlambda.lambdacommon.utils.Pair;
|
import org.aperlambda.lambdacommon.utils.Pair;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static org.lwjgl.glfw.GLFW.*;
|
||||||
|
import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents some input handlers.
|
* Represents some input handlers.
|
||||||
*
|
*
|
||||||
@@ -100,6 +109,67 @@ public class InputHandlers {
|
|||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public static PressAction handlePage(boolean next) {
|
||||||
|
return (client, button, value, action) -> {
|
||||||
|
if (client.currentScreen instanceof CreativeInventoryScreen) {
|
||||||
|
var screen = (HandledScreenAccessor) client.currentScreen;
|
||||||
|
try {
|
||||||
|
if (next) {
|
||||||
|
((CreativeGuiExtensions) screen).fabric_nextPage();
|
||||||
|
} else {
|
||||||
|
((CreativeGuiExtensions) screen).fabric_previousPage();
|
||||||
|
}
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public static PressAction handleActions() {
|
||||||
|
return (client, button, value, action) -> {
|
||||||
|
if (!(client.currentScreen instanceof HandledScreen<?> screen)) return false;
|
||||||
|
if (client.interactionManager == null || client.player == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (MidnightControlsClient.get().input.inventoryInteractionCooldown > 0)
|
||||||
|
return true;
|
||||||
|
double x = client.mouse.getX() * (double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth();
|
||||||
|
double y = client.mouse.getY() * (double) client.getWindow().getScaledHeight() / (double) client.getWindow().getHeight();
|
||||||
|
|
||||||
|
var accessor = (HandledScreenAccessor) screen;
|
||||||
|
Slot slot = ((HandledScreenAccessor) screen).midnightcontrols$getSlotAt(x, y);
|
||||||
|
|
||||||
|
int slotId;
|
||||||
|
if (slot == null) {
|
||||||
|
if (client.player.currentScreenHandler.getCursorStack().isEmpty())
|
||||||
|
return false;
|
||||||
|
slotId = accessor.midnightcontrols$isClickOutsideBounds(x, y, accessor.getX(), accessor.getY(), GLFW_MOUSE_BUTTON_1) ? -999 : -1;
|
||||||
|
} else {
|
||||||
|
slotId = slot.id;
|
||||||
|
}
|
||||||
|
var actionType = SlotActionType.PICKUP;
|
||||||
|
int clickData = GLFW.GLFW_MOUSE_BUTTON_1;
|
||||||
|
MidnightControlsClient.get().input.inventoryInteractionCooldown = 5;
|
||||||
|
switch (button.getName()) {
|
||||||
|
case "take_all":
|
||||||
|
if (accessor instanceof CreativeInventoryScreen)
|
||||||
|
if (((CreativeInventoryScreenAccessor) accessor).midnightcontrols$isCreativeInventorySlot(slot))
|
||||||
|
actionType = SlotActionType.CLONE;
|
||||||
|
if (slot != null && MidnightControlsCompat.streamCompatHandlers().anyMatch(handler -> handler.isCreativeSlot(screen, slot)))
|
||||||
|
actionType = SlotActionType.CLONE;
|
||||||
|
break;
|
||||||
|
case "take":
|
||||||
|
clickData = GLFW_MOUSE_BUTTON_2;
|
||||||
|
break;
|
||||||
|
case "quick_move":
|
||||||
|
actionType = SlotActionType.QUICK_MOVE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
accessor.midnightcontrols$onMouseClick(slot, slotId, clickData, actionType);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean handlePauseGame(@NotNull MinecraftClient client, @NotNull ButtonBinding binding, float value, @NotNull ButtonState action) {
|
public static boolean handlePauseGame(@NotNull MinecraftClient client, @NotNull ButtonBinding binding, float value, @NotNull ButtonState action) {
|
||||||
if (action == ButtonState.PRESS) {
|
if (action == ButtonState.PRESS) {
|
||||||
@@ -109,7 +179,7 @@ public class InputHandlers {
|
|||||||
else if (client.currentScreen instanceof HandledScreen && client.player != null) // If the current screen is a container then close it.
|
else if (client.currentScreen instanceof HandledScreen && client.player != null) // If the current screen is a container then close it.
|
||||||
client.player.closeHandledScreen();
|
client.player.closeHandledScreen();
|
||||||
else // Else just close the current screen.
|
else // Else just close the current screen.
|
||||||
client.currentScreen.onClose();
|
client.currentScreen.close();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -131,12 +201,12 @@ public class InputHandlers {
|
|||||||
|
|
||||||
public static boolean handleToggleSneak(@NotNull MinecraftClient client, @NotNull ButtonBinding button, float value, @NotNull ButtonState action) {
|
public static boolean handleToggleSneak(@NotNull MinecraftClient client, @NotNull ButtonBinding button, float value, @NotNull ButtonState action) {
|
||||||
button.asKeyBinding().ifPresent(binding -> {
|
button.asKeyBinding().ifPresent(binding -> {
|
||||||
boolean sneakToggled = client.options.sneakToggled;
|
boolean sneakToggled = client.options.getSneakToggled().getValue();
|
||||||
if (client.player.getAbilities().flying && sneakToggled)
|
if (client.player.getAbilities().flying && sneakToggled)
|
||||||
client.options.sneakToggled = false;
|
client.options.getSneakToggled().setValue(false);
|
||||||
binding.setPressed(button.pressed);
|
binding.setPressed(button.pressed);
|
||||||
if (client.player.getAbilities().flying && sneakToggled)
|
if (client.player.getAbilities().flying && sneakToggled)
|
||||||
client.options.sneakToggled = true;
|
client.options.getSneakToggled().setValue(true);
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,7 @@ import dev.lambdaurora.spruceui.option.SpruceOption;
|
|||||||
import dev.lambdaurora.spruceui.widget.container.SpruceContainerWidget;
|
import dev.lambdaurora.spruceui.widget.container.SpruceContainerWidget;
|
||||||
import dev.lambdaurora.spruceui.widget.text.SpruceTextAreaWidget;
|
import dev.lambdaurora.spruceui.widget.text.SpruceTextAreaWidget;
|
||||||
import net.minecraft.client.toast.SystemToast;
|
import net.minecraft.client.toast.SystemToast;
|
||||||
import net.minecraft.text.LiteralText;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
|
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -65,7 +64,7 @@ public class MappingsStringInputWidget extends SpruceContainerWidget {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
if (this.client != null)
|
if (this.client != null)
|
||||||
this.client.getToastManager().add(SystemToast.create(this.client, SystemToast.Type.TUTORIAL_HINT,
|
this.client.getToastManager().add(SystemToast.create(this.client, SystemToast.Type.TUTORIAL_HINT,
|
||||||
new TranslatableText("midnightcontrols.controller.mappings.error.write"), LiteralText.EMPTY));
|
Text.translatable("midnightcontrols.controller.mappings.error.write"), Text.empty()));
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,7 +89,7 @@ public class MappingsStringInputWidget extends SpruceContainerWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int textFieldWidth = (int) (this.width * (5.0 / 6.0));
|
int textFieldWidth = (int) (this.width * (5.0 / 6.0));
|
||||||
this.textArea = new SpruceTextAreaWidget(Position.of(this, this.width / 2 - textFieldWidth / 2, 0), textFieldWidth, this.height - 50, new LiteralText(mappings));
|
this.textArea = new SpruceTextAreaWidget(Position.of(this, this.width / 2 - textFieldWidth / 2, 0), textFieldWidth, this.height - 50, Text.literal(mappings));
|
||||||
this.textArea.setText(mappings);
|
this.textArea.setText(mappings);
|
||||||
// Display as many lines as possible
|
// Display as many lines as possible
|
||||||
this.textArea.setDisplayedLines(this.textArea.getInnerHeight() / this.client.textRenderer.fontHeight);
|
this.textArea.setDisplayedLines(this.textArea.getInnerHeight() / this.client.textRenderer.fontHeight);
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ public class MidnightControlsHud extends Hud {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void render(MatrixStack matrices, float tickDelta) {
|
public void render(MatrixStack matrices, float tickDelta) {
|
||||||
if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && this.client.currentScreen == null && MidnightControlsConfig.getController().isConnected() && MidnightControlsConfig.getController().isGamepad()) {
|
if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && this.client.currentScreen == null) {
|
||||||
int y = bottom(2);
|
int y = bottom(2);
|
||||||
this.renderFirstIcons(matrices, MidnightControlsConfig.hudSide == HudSide.LEFT ? 2 : client.getWindow().getScaledWidth() - 2, y);
|
this.renderFirstIcons(matrices, MidnightControlsConfig.hudSide == HudSide.LEFT ? 2 : client.getWindow().getScaledWidth() - 2, y);
|
||||||
this.renderSecondIcons(matrices, MidnightControlsConfig.hudSide == HudSide.RIGHT ? 2 : client.getWindow().getScaledWidth() - 2, y);
|
this.renderSecondIcons(matrices, MidnightControlsConfig.hudSide == HudSide.RIGHT ? 2 : client.getWindow().getScaledWidth() - 2, y);
|
||||||
@@ -106,7 +106,7 @@ public class MidnightControlsHud extends Hud {
|
|||||||
this.drawButton(matrices, currentX, y, ButtonBinding.INVENTORY, true);
|
this.drawButton(matrices, currentX, y, ButtonBinding.INVENTORY, true);
|
||||||
this.drawButton(matrices, currentX += (MidnightControlsConfig.hudSide == HudSide.LEFT ? offset : -offset), y, ButtonBinding.SWAP_HANDS, true);
|
this.drawButton(matrices, currentX += (MidnightControlsConfig.hudSide == HudSide.LEFT ? offset : -offset), y, ButtonBinding.SWAP_HANDS, true);
|
||||||
offset = 2 + this.swapHandsWidth + this.dropItemButtonWidth + 4;
|
offset = 2 + this.swapHandsWidth + this.dropItemButtonWidth + 4;
|
||||||
if (this.client.options.showSubtitles && MidnightControlsConfig.hudSide == HudSide.RIGHT) {
|
if (this.client.options.getShowSubtitles().getValue() && MidnightControlsConfig.hudSide == HudSide.RIGHT) {
|
||||||
currentX += -offset;
|
currentX += -offset;
|
||||||
} else {
|
} else {
|
||||||
currentX = MidnightControlsConfig.hudSide == HudSide.LEFT ? x : x - this.dropItemButtonWidth;
|
currentX = MidnightControlsConfig.hudSide == HudSide.LEFT ? x : x - this.dropItemButtonWidth;
|
||||||
@@ -123,7 +123,7 @@ public class MidnightControlsHud extends Hud {
|
|||||||
currentX -= this.useButtonWidth;
|
currentX -= this.useButtonWidth;
|
||||||
this.drawButton(matrices, currentX, y, ButtonBinding.USE, true);
|
this.drawButton(matrices, currentX, y, ButtonBinding.USE, true);
|
||||||
offset = 2 + this.useWidth + 4;
|
offset = 2 + this.useWidth + 4;
|
||||||
if (this.client.options.showSubtitles && MidnightControlsConfig.hudSide == HudSide.LEFT) {
|
if (this.client.options.getShowSubtitles().getValue() && MidnightControlsConfig.hudSide == HudSide.LEFT) {
|
||||||
currentX -= offset;
|
currentX -= offset;
|
||||||
} else {
|
} else {
|
||||||
currentX = x;
|
currentX = x;
|
||||||
@@ -143,7 +143,7 @@ public class MidnightControlsHud extends Hud {
|
|||||||
currentX += MidnightControlsConfig.hudSide == HudSide.LEFT ? this.inventoryWidth + 4 + this.swapHandsButtonWidth + 2
|
currentX += MidnightControlsConfig.hudSide == HudSide.LEFT ? this.inventoryWidth + 4 + this.swapHandsButtonWidth + 2
|
||||||
: -this.swapHandsWidth - 2 - this.swapHandsButtonWidth - 4;
|
: -this.swapHandsWidth - 2 - this.swapHandsButtonWidth - 4;
|
||||||
this.drawTip(matrices, currentX, y, ButtonBinding.SWAP_HANDS, true);
|
this.drawTip(matrices, currentX, y, ButtonBinding.SWAP_HANDS, true);
|
||||||
if (this.client.options.showSubtitles && MidnightControlsConfig.hudSide == HudSide.RIGHT) {
|
if (this.client.options.getShowSubtitles().getValue() && MidnightControlsConfig.hudSide == HudSide.RIGHT) {
|
||||||
currentX += -this.dropItemWidth - 2 - this.dropItemButtonWidth - 4;
|
currentX += -this.dropItemWidth - 2 - this.dropItemButtonWidth - 4;
|
||||||
} else {
|
} else {
|
||||||
y -= 24;
|
y -= 24;
|
||||||
@@ -160,7 +160,7 @@ public class MidnightControlsHud extends Hud {
|
|||||||
|
|
||||||
this.drawTip(matrices, currentX, y, this.placeAction, true);
|
this.drawTip(matrices, currentX, y, this.placeAction, true);
|
||||||
|
|
||||||
if (this.client.options.showSubtitles && MidnightControlsConfig.hudSide == HudSide.LEFT) {
|
if (this.client.options.getShowSubtitles().getValue() && MidnightControlsConfig.hudSide == HudSide.LEFT) {
|
||||||
currentX -= 4;
|
currentX -= 4;
|
||||||
} else {
|
} else {
|
||||||
currentX = x;
|
currentX = x;
|
||||||
|
|||||||
@@ -34,10 +34,8 @@ import net.minecraft.client.gui.widget.ButtonWidget;
|
|||||||
import net.minecraft.client.render.*;
|
import net.minecraft.client.render.*;
|
||||||
import net.minecraft.client.resource.language.I18n;
|
import net.minecraft.client.resource.language.I18n;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.LiteralText;
|
|
||||||
import net.minecraft.text.MutableText;
|
import net.minecraft.text.MutableText;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import net.minecraft.util.Formatting;
|
import net.minecraft.util.Formatting;
|
||||||
import net.minecraft.util.Util;
|
import net.minecraft.util.Util;
|
||||||
import net.minecraft.util.math.Matrix4f;
|
import net.minecraft.util.math.Matrix4f;
|
||||||
@@ -49,7 +47,7 @@ import java.awt.*;
|
|||||||
* Represents the midnightcontrols settings screen.
|
* Represents the midnightcontrols settings screen.
|
||||||
*/
|
*/
|
||||||
public class MidnightControlsSettingsScreen extends SpruceScreen {
|
public class MidnightControlsSettingsScreen extends SpruceScreen {
|
||||||
private static final Text SDL2_GAMEPAD_TOOL = new LiteralText("SDL2 Gamepad Tool").formatted(Formatting.GREEN);
|
private static final Text SDL2_GAMEPAD_TOOL = Text.literal("SDL2 Gamepad Tool").formatted(Formatting.GREEN);
|
||||||
public static final String GAMEPAD_TOOL_URL = "https://generalarcade.com/gamepadtool/";
|
public static final String GAMEPAD_TOOL_URL = "https://generalarcade.com/gamepadtool/";
|
||||||
final MidnightControlsClient mod = MidnightControlsClient.get();
|
final MidnightControlsClient mod = MidnightControlsClient.get();
|
||||||
private final Screen parent;
|
private final Screen parent;
|
||||||
@@ -88,11 +86,11 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
var controller = MidnightControlsConfig.getController();
|
var controller = MidnightControlsConfig.getController();
|
||||||
var controllerName = controller.getName();
|
var controllerName = controller.getName();
|
||||||
if (!controller.isConnected())
|
if (!controller.isConnected())
|
||||||
return option.getDisplayText(new LiteralText(controllerName).formatted(Formatting.RED));
|
return option.getDisplayText(Text.literal(controllerName).formatted(Formatting.RED));
|
||||||
else if (!controller.isGamepad())
|
else if (!controller.isGamepad())
|
||||||
return option.getDisplayText(new LiteralText(controllerName).formatted(Formatting.GOLD));
|
return option.getDisplayText(Text.literal(controllerName).formatted(Formatting.GOLD));
|
||||||
else
|
else
|
||||||
return option.getDisplayText(new LiteralText(controllerName));
|
return option.getDisplayText(Text.literal(controllerName));
|
||||||
}, null);
|
}, null);
|
||||||
private final SpruceOption secondControllerOption = new SpruceCyclingOption("midnightcontrols.menu.controller2",
|
private final SpruceOption secondControllerOption = new SpruceCyclingOption("midnightcontrols.menu.controller2",
|
||||||
amount -> {
|
amount -> {
|
||||||
@@ -106,13 +104,13 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
option -> MidnightControlsConfig.getSecondController().map(controller -> {
|
option -> MidnightControlsConfig.getSecondController().map(controller -> {
|
||||||
var controllerName = controller.getName();
|
var controllerName = controller.getName();
|
||||||
if (!controller.isConnected())
|
if (!controller.isConnected())
|
||||||
return option.getDisplayText(new LiteralText(controllerName).formatted(Formatting.RED));
|
return option.getDisplayText(Text.literal(controllerName).formatted(Formatting.RED));
|
||||||
else if (!controller.isGamepad())
|
else if (!controller.isGamepad())
|
||||||
return option.getDisplayText(new LiteralText(controllerName).formatted(Formatting.GOLD));
|
return option.getDisplayText(Text.literal(controllerName).formatted(Formatting.GOLD));
|
||||||
else
|
else
|
||||||
return option.getDisplayText(new LiteralText(controllerName));
|
return option.getDisplayText(Text.literal(controllerName));
|
||||||
}).orElse(option.getDisplayText(SpruceTexts.OPTIONS_OFF.shallowCopy().formatted(Formatting.RED))),
|
}).orElse(option.getDisplayText(SpruceTexts.OPTIONS_OFF.copyContentOnly().formatted(Formatting.RED))),
|
||||||
new TranslatableText("midnightcontrols.tooltip.controller2"));
|
Text.translatable("midnightcontrols.tooltip.controller2"));
|
||||||
private final SpruceOption unfocusedInputOption;
|
private final SpruceOption unfocusedInputOption;
|
||||||
private final SpruceOption invertsRightXAxis;
|
private final SpruceOption invertsRightXAxis;
|
||||||
private final SpruceOption invertsRightYAxis;
|
private final SpruceOption invertsRightYAxis;
|
||||||
@@ -129,13 +127,13 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
return new SpruceDoubleOption(key, .25f, 1.f, 0.05f,
|
return new SpruceDoubleOption(key, .25f, 1.f, 0.05f,
|
||||||
() -> MidnightControlsConfig.getAxisMaxValue(axis),
|
() -> MidnightControlsConfig.getAxisMaxValue(axis),
|
||||||
newValue -> MidnightControlsConfig.setAxisMaxValue(axis, newValue),
|
newValue -> MidnightControlsConfig.setAxisMaxValue(axis, newValue),
|
||||||
option -> option.getDisplayText(new LiteralText(String.format("%.2f", option.get()))),
|
option -> option.getDisplayText(Text.literal(String.format("%.2f", option.get()))),
|
||||||
new TranslatableText(key.replace("menu", "tooltip"))
|
Text.translatable(key.replace("menu", "tooltip"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final MutableText controllerMappingsUrlText = new LiteralText("(")
|
private final MutableText controllerMappingsUrlText = Text.literal("(")
|
||||||
.append(new LiteralText(GAMEPAD_TOOL_URL).formatted(Formatting.GOLD))
|
.append(Text.literal(GAMEPAD_TOOL_URL).formatted(Formatting.GOLD))
|
||||||
.append("),");
|
.append("),");
|
||||||
|
|
||||||
private static int searchNextAvailableController(int newId, boolean allowNone) {
|
private static int searchNextAvailableController(int newId, boolean allowNone) {
|
||||||
@@ -153,7 +151,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public MidnightControlsSettingsScreen(Screen parent, boolean hideControls) {
|
public MidnightControlsSettingsScreen(Screen parent, boolean hideControls) {
|
||||||
super(new TranslatableText("midnightcontrols.title.settings"));
|
super(Text.translatable("midnightcontrols.title.settings"));
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
// General options
|
// General options
|
||||||
this.inputModeOption = new SpruceCyclingOption("midnightcontrols.menu.controls_mode",
|
this.inputModeOption = new SpruceCyclingOption("midnightcontrols.menu.controls_mode",
|
||||||
@@ -165,18 +163,18 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
if (this.client.player != null) {
|
if (this.client.player != null) {
|
||||||
ClientPlayNetworking.getSender().sendPacket(MidnightControls.CONTROLS_MODE_CHANNEL, this.mod.makeControlsModeBuffer(next));
|
ClientPlayNetworking.getSender().sendPacket(MidnightControls.CONTROLS_MODE_CHANNEL, this.mod.makeControlsModeBuffer(next));
|
||||||
}
|
}
|
||||||
}, option -> option.getDisplayText(new TranslatableText(MidnightControlsConfig.controlsMode.getTranslationKey())),
|
}, option -> option.getDisplayText(Text.translatable(MidnightControlsConfig.controlsMode.getTranslationKey())),
|
||||||
new TranslatableText("midnightcontrols.tooltip.controlsMidnightColorUtil.radialRainbow(1f,1f);_mode"));
|
Text.translatable("midnightcontrols.tooltip.controls_mode"));
|
||||||
this.autoSwitchModeOption = new SpruceToggleBooleanOption("midnightcontrols.menu.auto_switch_mode", () -> MidnightControlsConfig.autoSwitchMode,
|
this.autoSwitchModeOption = new SpruceToggleBooleanOption("midnightcontrols.menu.auto_switch_mode", () -> MidnightControlsConfig.autoSwitchMode,
|
||||||
value -> MidnightControlsConfig.autoSwitchMode = value, new TranslatableText("midnightcontrols.tooltip.auto_switch_mode"));
|
value -> MidnightControlsConfig.autoSwitchMode = value, Text.translatable("midnightcontrols.tooltip.auto_switch_mode"));
|
||||||
this.rotationSpeedOption = new SpruceDoubleOption("midnightcontrols.menu.rotation_speed", 0.0, 100.0, .5f,
|
this.rotationSpeedOption = new SpruceDoubleOption("midnightcontrols.menu.rotation_speed", 0.0, 100.0, .5f,
|
||||||
() -> MidnightControlsConfig.rotationSpeed,
|
() -> MidnightControlsConfig.rotationSpeed,
|
||||||
value -> MidnightControlsConfig.rotationSpeed = value, option -> option.getDisplayText(new LiteralText(String.valueOf(option.get()))),
|
value -> MidnightControlsConfig.rotationSpeed = value, option -> option.getDisplayText(Text.literal(String.valueOf(option.get()))),
|
||||||
new TranslatableText("midnightcontrols.tooltip.rotation_speed"));
|
Text.translatable("midnightcontrols.tooltip.rotation_speed"));
|
||||||
this.mouseSpeedOption = new SpruceDoubleOption("midnightcontrols.menu.mouse_speed", 0.0, 150.0, .5f,
|
this.mouseSpeedOption = new SpruceDoubleOption("midnightcontrols.menu.mouse_speed", 0.0, 150.0, .5f,
|
||||||
() -> MidnightControlsConfig.mouseSpeed,
|
() -> MidnightControlsConfig.mouseSpeed,
|
||||||
value -> MidnightControlsConfig.mouseSpeed = value, option -> option.getDisplayText(new LiteralText(String.valueOf(option.get()))),
|
value -> MidnightControlsConfig.mouseSpeed = value, option -> option.getDisplayText(Text.literal(String.valueOf(option.get()))),
|
||||||
new TranslatableText("midnightcontrols.tooltip.mouse_speed"));
|
Text.translatable("midnightcontrols.tooltip.mouse_speed"));
|
||||||
this.resetOption = SpruceSimpleActionOption.reset(btn -> {
|
this.resetOption = SpruceSimpleActionOption.reset(btn -> {
|
||||||
// TODO
|
// TODO
|
||||||
MidnightControlsConfig.init("midnightcontrols", MidnightControlsConfig.class);
|
MidnightControlsConfig.init("midnightcontrols", MidnightControlsConfig.class);
|
||||||
@@ -186,57 +184,57 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
// Gameplay options
|
// Gameplay options
|
||||||
this.analogMovementOption = new SpruceToggleBooleanOption("midnightcontrols.menu.analog_movement",
|
this.analogMovementOption = new SpruceToggleBooleanOption("midnightcontrols.menu.analog_movement",
|
||||||
() -> MidnightControlsConfig.analogMovement, value -> MidnightControlsConfig.analogMovement = value,
|
() -> MidnightControlsConfig.analogMovement, value -> MidnightControlsConfig.analogMovement = value,
|
||||||
new TranslatableText("midnightcontrols.tooltip.analog_movement"));
|
Text.translatable("midnightcontrols.tooltip.analog_movement"));
|
||||||
this.autoJumpOption = new SpruceToggleBooleanOption("options.autoJump",
|
this.autoJumpOption = new SpruceToggleBooleanOption("options.autoJump",
|
||||||
() -> this.client.options.autoJump,
|
() -> this.client.options.getAutoJump().getValue(),
|
||||||
newValue -> this.client.options.autoJump = newValue,
|
newValue -> this.client.options.getAutoJump().setValue(newValue),
|
||||||
null);
|
null);
|
||||||
this.fastBlockPlacingOption = new SpruceToggleBooleanOption("midnightcontrols.menu.fast_block_placing", () -> MidnightControlsConfig.fastBlockPlacing,
|
this.fastBlockPlacingOption = new SpruceToggleBooleanOption("midnightcontrols.menu.fast_block_placing", () -> MidnightControlsConfig.fastBlockPlacing,
|
||||||
value -> MidnightControlsConfig.fastBlockPlacing = value, new TranslatableText("midnightcontrols.tooltip.fast_block_placing"));
|
value -> MidnightControlsConfig.fastBlockPlacing = value, Text.translatable("midnightcontrols.tooltip.fast_block_placing"));
|
||||||
this.frontBlockPlacingOption = new SpruceToggleBooleanOption("midnightcontrols.menu.reacharound.horizontal", () -> MidnightControlsConfig.horizontalReacharound,
|
this.frontBlockPlacingOption = new SpruceToggleBooleanOption("midnightcontrols.menu.reacharound.horizontal", () -> MidnightControlsConfig.horizontalReacharound,
|
||||||
value -> MidnightControlsConfig.horizontalReacharound = value, new TranslatableText("midnightcontrols.tooltip.reacharound.horizontal"));
|
value -> MidnightControlsConfig.horizontalReacharound = value, Text.translatable("midnightcontrols.tooltip.reacharound.horizontal"));
|
||||||
this.verticalReacharoundOption = new SpruceToggleBooleanOption("midnightcontrols.menu.reacharound.vertical", () -> MidnightControlsConfig.verticalReacharound,
|
this.verticalReacharoundOption = new SpruceToggleBooleanOption("midnightcontrols.menu.reacharound.vertical", () -> MidnightControlsConfig.verticalReacharound,
|
||||||
value -> MidnightControlsConfig.verticalReacharound = value, new TranslatableText("midnightcontrols.tooltip.reacharound.vertical"));
|
value -> MidnightControlsConfig.verticalReacharound = value, Text.translatable("midnightcontrols.tooltip.reacharound.vertical"));
|
||||||
this.flyDriftingOption = new SpruceToggleBooleanOption("midnightcontrols.menu.fly_drifting", () -> MidnightControlsConfig.flyDrifting,
|
this.flyDriftingOption = new SpruceToggleBooleanOption("midnightcontrols.menu.fly_drifting", () -> MidnightControlsConfig.flyDrifting,
|
||||||
value -> MidnightControlsConfig.flyDrifting = value, new TranslatableText("midnightcontrols.tooltip.fly_drifting"));
|
value -> MidnightControlsConfig.flyDrifting = value, Text.translatable("midnightcontrols.tooltip.fly_drifting"));
|
||||||
this.flyVerticalDriftingOption = new SpruceToggleBooleanOption("midnightcontrols.menu.fly_drifting_vertical", () -> MidnightControlsConfig.verticalFlyDrifting,
|
this.flyVerticalDriftingOption = new SpruceToggleBooleanOption("midnightcontrols.menu.fly_drifting_vertical", () -> MidnightControlsConfig.verticalFlyDrifting,
|
||||||
value -> MidnightControlsConfig.verticalFlyDrifting = value, new TranslatableText("midnightcontrols.tooltip.fly_drifting_vertical"));
|
value -> MidnightControlsConfig.verticalFlyDrifting = value, Text.translatable("midnightcontrols.tooltip.fly_drifting_vertical"));
|
||||||
// Appearance options
|
// Appearance options
|
||||||
this.controllerTypeOption = new SpruceCyclingOption("midnightcontrols.menu.controller_type",
|
this.controllerTypeOption = new SpruceCyclingOption("midnightcontrols.menu.controller_type",
|
||||||
amount -> MidnightControlsConfig.controllerType = MidnightControlsConfig.controllerType.next(),
|
amount -> MidnightControlsConfig.controllerType = MidnightControlsConfig.controllerType.next(),
|
||||||
option -> option.getDisplayText(MidnightControlsConfig.controllerType.getTranslatedText()),
|
option -> option.getDisplayText(MidnightControlsConfig.controllerType.getTranslatedText()),
|
||||||
new TranslatableText("midnightcontrols.tooltip.controller_type"));
|
Text.translatable("midnightcontrols.tooltip.controller_type"));
|
||||||
this.virtualMouseSkinOption = new SpruceCyclingOption("midnightcontrols.menu.virtual_mouse.skin",
|
this.virtualMouseSkinOption = new SpruceCyclingOption("midnightcontrols.menu.virtual_mouse.skin",
|
||||||
amount -> MidnightControlsConfig.virtualMouseSkin = MidnightControlsConfig.virtualMouseSkin.next(),
|
amount -> MidnightControlsConfig.virtualMouseSkin = MidnightControlsConfig.virtualMouseSkin.next(),
|
||||||
option -> option.getDisplayText(MidnightControlsConfig.virtualMouseSkin.getTranslatedText()),
|
option -> option.getDisplayText(MidnightControlsConfig.virtualMouseSkin.getTranslatedText()),
|
||||||
null);
|
null);
|
||||||
this.hudEnableOption = new SpruceToggleBooleanOption("midnightcontrols.menu.hud_enable", () -> MidnightControlsConfig.hudEnable,
|
this.hudEnableOption = new SpruceToggleBooleanOption("midnightcontrols.menu.hud_enable", () -> MidnightControlsConfig.hudEnable,
|
||||||
this.mod::setHudEnabled, new TranslatableText("midnightcontrols.tooltip.hud_enable"));
|
this.mod::setHudEnabled, Text.translatable("midnightcontrols.tooltip.hud_enable"));
|
||||||
this.hudSideOption = new SpruceCyclingOption("midnightcontrols.menu.hud_side",
|
this.hudSideOption = new SpruceCyclingOption("midnightcontrols.menu.hud_side",
|
||||||
amount -> MidnightControlsConfig.hudSide = MidnightControlsConfig.hudSide.next(),
|
amount -> MidnightControlsConfig.hudSide = MidnightControlsConfig.hudSide.next(),
|
||||||
option -> option.getDisplayText(MidnightControlsConfig.hudSide.getTranslatedText()),
|
option -> option.getDisplayText(MidnightControlsConfig.hudSide.getTranslatedText()),
|
||||||
new TranslatableText("midnightcontrols.tooltip.hud_side"));
|
Text.translatable("midnightcontrols.tooltip.hud_side"));
|
||||||
// Controller options
|
// Controller options
|
||||||
this.rightDeadZoneOption = new SpruceDoubleOption("midnightcontrols.menu.right_dead_zone", 0.05, 1.0, .05f,
|
this.rightDeadZoneOption = new SpruceDoubleOption("midnightcontrols.menu.right_dead_zone", 0.05, 1.0, .05f,
|
||||||
() -> MidnightControlsConfig.rightDeadZone,
|
() -> MidnightControlsConfig.rightDeadZone,
|
||||||
value -> MidnightControlsConfig.rightDeadZone = value, option -> {
|
value -> MidnightControlsConfig.rightDeadZone = value, option -> {
|
||||||
var value = String.valueOf(option.get());
|
var value = String.valueOf(option.get());
|
||||||
return option.getDisplayText(new LiteralText(value.substring(0, Math.min(value.length(), 5))));
|
return option.getDisplayText(Text.literal(value.substring(0, Math.min(value.length(), 5))));
|
||||||
}, new TranslatableText("midnightcontrols.tooltip.right_dead_zone"));
|
}, Text.translatable("midnightcontrols.tooltip.right_dead_zone"));
|
||||||
this.leftDeadZoneOption = new SpruceDoubleOption("midnightcontrols.menu.left_dead_zone", 0.05, 1.0, .05f,
|
this.leftDeadZoneOption = new SpruceDoubleOption("midnightcontrols.menu.left_dead_zone", 0.05, 1.0, .05f,
|
||||||
() -> MidnightControlsConfig.leftDeadZone,
|
() -> MidnightControlsConfig.leftDeadZone,
|
||||||
value -> MidnightControlsConfig.leftDeadZone = value, option -> {
|
value -> MidnightControlsConfig.leftDeadZone = value, option -> {
|
||||||
var value = String.valueOf(option.get());
|
var value = String.valueOf(option.get());
|
||||||
return option.getDisplayText(new LiteralText(value.substring(0, Math.min(value.length(), 5))));
|
return option.getDisplayText(Text.literal(value.substring(0, Math.min(value.length(), 5))));
|
||||||
}, new TranslatableText("midnightcontrols.tooltip.left_dead_zone"));
|
}, Text.translatable("midnightcontrols.tooltip.left_dead_zone"));
|
||||||
this.invertsRightXAxis = new SpruceToggleBooleanOption("midnightcontrols.menu.invert_right_x_axis", () -> MidnightControlsConfig.invertRightXAxis,
|
this.invertsRightXAxis = new SpruceToggleBooleanOption("midnightcontrols.menu.invert_right_x_axis", () -> MidnightControlsConfig.invertRightXAxis,
|
||||||
value -> MidnightControlsConfig.invertRightXAxis = value, null);
|
value -> MidnightControlsConfig.invertRightXAxis = value, null);
|
||||||
this.invertsRightYAxis = new SpruceToggleBooleanOption("midnightcontrols.menu.invert_right_y_axis", () -> MidnightControlsConfig.invertRightYAxis,
|
this.invertsRightYAxis = new SpruceToggleBooleanOption("midnightcontrols.menu.invert_right_y_axis", () -> MidnightControlsConfig.invertRightYAxis,
|
||||||
value -> MidnightControlsConfig.invertRightYAxis = value, null);
|
value -> MidnightControlsConfig.invertRightYAxis = value, null);
|
||||||
this.unfocusedInputOption = new SpruceToggleBooleanOption("midnightcontrols.menu.unfocused_input", () -> MidnightControlsConfig.unfocusedInput,
|
this.unfocusedInputOption = new SpruceToggleBooleanOption("midnightcontrols.menu.unfocused_input", () -> MidnightControlsConfig.unfocusedInput,
|
||||||
value -> MidnightControlsConfig.unfocusedInput = value, new TranslatableText("midnightcontrols.tooltip.unfocused_input"));
|
value -> MidnightControlsConfig.unfocusedInput = value, Text.translatable("midnightcontrols.tooltip.unfocused_input"));
|
||||||
this.virtualMouseOption = new SpruceToggleBooleanOption("midnightcontrols.menu.virtual_mouse", () -> MidnightControlsConfig.virtualMouse,
|
this.virtualMouseOption = new SpruceToggleBooleanOption("midnightcontrols.menu.virtual_mouse", () -> MidnightControlsConfig.virtualMouse,
|
||||||
value -> MidnightControlsConfig.virtualMouse = value, new TranslatableText("midnightcontrols.tooltip.virtual_mouse"));
|
value -> MidnightControlsConfig.virtualMouse = value, Text.translatable("midnightcontrols.tooltip.virtual_mouse"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -246,9 +244,9 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClose() {
|
public void close() {
|
||||||
MidnightControlsConfig.save();
|
MidnightControlsConfig.save();
|
||||||
super.onClose();
|
super.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getTextHeight() {
|
private int getTextHeight() {
|
||||||
@@ -273,22 +271,22 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
tabs.getList().setBackground(new MidnightControlsBackground());
|
tabs.getList().setBackground(new MidnightControlsBackground());
|
||||||
this.addDrawableChild(tabs);
|
this.addDrawableChild(tabs);
|
||||||
|
|
||||||
tabs.addSeparatorEntry(new TranslatableText("midnightcontrols.menu.separator.general"));
|
tabs.addSeparatorEntry(Text.translatable("midnightcontrols.menu.separator.general"));
|
||||||
tabs.addTabEntry(new TranslatableText("midnightcontrols.menu.title.general"), null,
|
tabs.addTabEntry(Text.translatable("midnightcontrols.menu.title.general"), null,
|
||||||
this::buildGeneralTab);
|
this::buildGeneralTab);
|
||||||
tabs.addTabEntry(new TranslatableText("midnightcontrols.menu.title.gameplay"), null,
|
tabs.addTabEntry(Text.translatable("midnightcontrols.menu.title.gameplay"), null,
|
||||||
this::buildGameplayTab);
|
this::buildGameplayTab);
|
||||||
tabs.addTabEntry(new TranslatableText("midnightcontrols.menu.title.visual"), null,
|
tabs.addTabEntry(Text.translatable("midnightcontrols.menu.title.visual"), null,
|
||||||
this::buildVisualTab);
|
this::buildVisualTab);
|
||||||
|
|
||||||
tabs.addSeparatorEntry(new TranslatableText("options.controls"));
|
tabs.addSeparatorEntry(Text.translatable("options.controls"));
|
||||||
tabs.addTabEntry(new TranslatableText("midnightcontrols.menu.title.controller_controls"), null,
|
tabs.addTabEntry(Text.translatable("midnightcontrols.menu.title.controller_controls"), null,
|
||||||
this::buildControllerControlsTab);
|
this::buildControllerControlsTab);
|
||||||
|
|
||||||
tabs.addSeparatorEntry(new TranslatableText("midnightcontrols.menu.separator.controller"));
|
tabs.addSeparatorEntry(Text.translatable("midnightcontrols.menu.separator.controller"));
|
||||||
tabs.addTabEntry(new TranslatableText("midnightcontrols.menu.title.controller"), null,
|
tabs.addTabEntry(Text.translatable("midnightcontrols.menu.title.controller"), null,
|
||||||
this::buildControllerTab);
|
this::buildControllerTab);
|
||||||
tabs.addTabEntry(new TranslatableText("midnightcontrols.menu.title.mappings.string"), null,
|
tabs.addTabEntry(Text.translatable("midnightcontrols.menu.title.mappings.string"), null,
|
||||||
this::buildMappingsStringEditorTab);
|
this::buildMappingsStringEditorTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -332,17 +330,17 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
var root = new SpruceContainerWidget(Position.origin(), width, height);
|
var root = new SpruceContainerWidget(Position.origin(), width, height);
|
||||||
|
|
||||||
var aboutMappings1 = new SpruceLabelWidget(Position.of(0, 2),
|
var aboutMappings1 = new SpruceLabelWidget(Position.of(0, 2),
|
||||||
new TranslatableText("midnightcontrols.controller.mappings.1", SDL2_GAMEPAD_TOOL),
|
Text.translatable("midnightcontrols.controller.mappings.1", SDL2_GAMEPAD_TOOL),
|
||||||
width, true);
|
width, true);
|
||||||
|
|
||||||
var gamepadToolUrlLabel = new SpruceLabelWidget(Position.of(0, aboutMappings1.getHeight() + 4),
|
var gamepadToolUrlLabel = new SpruceLabelWidget(Position.of(0, aboutMappings1.getHeight() + 4),
|
||||||
this.controllerMappingsUrlText, width,
|
this.controllerMappingsUrlText, width,
|
||||||
label -> Util.getOperatingSystem().open(GAMEPAD_TOOL_URL), true);
|
label -> Util.getOperatingSystem().open(GAMEPAD_TOOL_URL), true);
|
||||||
gamepadToolUrlLabel.setTooltip(new TranslatableText("chat.link.open"));
|
gamepadToolUrlLabel.setTooltip(Text.translatable("chat.link.open"));
|
||||||
|
|
||||||
var aboutMappings3 = new SpruceLabelWidget(Position.of(0,
|
var aboutMappings3 = new SpruceLabelWidget(Position.of(0,
|
||||||
aboutMappings1.getHeight() + gamepadToolUrlLabel.getHeight() + 6),
|
aboutMappings1.getHeight() + gamepadToolUrlLabel.getHeight() + 6),
|
||||||
new TranslatableText("midnightcontrols.controller.mappings.3", Formatting.GREEN.toString(), Formatting.RESET.toString()),
|
Text.translatable("midnightcontrols.controller.mappings.3", Formatting.GREEN.toString(), Formatting.RESET.toString()),
|
||||||
width, true);
|
width, true);
|
||||||
|
|
||||||
int listHeight = height - 8 - aboutMappings1.getHeight() - aboutMappings3.getHeight() - gamepadToolUrlLabel.getHeight();
|
int listHeight = height - 8 - aboutMappings1.getHeight() - aboutMappings3.getHeight() - gamepadToolUrlLabel.getHeight();
|
||||||
@@ -401,8 +399,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
|
|||||||
bufferBuilder.vertex(matrix, (float)x2, (float)y2, 0.0F).color(r, g, b, t).next();
|
bufferBuilder.vertex(matrix, (float)x2, (float)y2, 0.0F).color(r, g, b, t).next();
|
||||||
bufferBuilder.vertex(matrix, (float)x2, (float)y1, 0.0F).color(r, g, b, t).next();
|
bufferBuilder.vertex(matrix, (float)x2, (float)y1, 0.0F).color(r, g, b, t).next();
|
||||||
bufferBuilder.vertex(matrix, (float)x1, (float)y1, 0.0F).color(r, g, b, t).next();
|
bufferBuilder.vertex(matrix, (float)x1, (float)y1, 0.0F).color(r, g, b, t).next();
|
||||||
bufferBuilder.end();
|
BufferRenderer.drawWithShader(bufferBuilder.end());
|
||||||
BufferRenderer.draw(bufferBuilder);
|
|
||||||
RenderSystem.enableTexture();
|
RenderSystem.enableTexture();
|
||||||
RenderSystem.disableBlend();
|
RenderSystem.disableBlend();
|
||||||
matrixStack.pop();
|
matrixStack.pop();
|
||||||
|
|||||||
@@ -14,8 +14,7 @@ import dev.lambdaurora.spruceui.option.SpruceSimpleActionOption;
|
|||||||
import dev.lambdaurora.spruceui.widget.SpruceButtonWidget;
|
import dev.lambdaurora.spruceui.widget.SpruceButtonWidget;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.toast.SystemToast;
|
import net.minecraft.client.toast.SystemToast;
|
||||||
import net.minecraft.text.LiteralText;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@@ -35,7 +34,7 @@ public class ReloadControllerMappingsOption {
|
|||||||
if (client.currentScreen instanceof MidnightControlsSettingsScreen)
|
if (client.currentScreen instanceof MidnightControlsSettingsScreen)
|
||||||
client.currentScreen.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight());
|
client.currentScreen.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight());
|
||||||
client.getToastManager().add(SystemToast.create(client, SystemToast.Type.TUTORIAL_HINT,
|
client.getToastManager().add(SystemToast.create(client, SystemToast.Type.TUTORIAL_HINT,
|
||||||
new TranslatableText("midnightcontrols.controller.mappings.updated"), LiteralText.EMPTY));
|
Text.translatable("midnightcontrols.controller.mappings.updated"), Text.empty()));
|
||||||
}, new TranslatableText("midnightcontrols.tooltip.reload_controller_mappings"));
|
}, Text.translatable("midnightcontrols.tooltip.reload_controller_mappings"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
|
|||||||
import eu.midnightdust.midnightcontrols.client.ring.RingPage;
|
import eu.midnightdust.midnightcontrols.client.ring.RingPage;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the controls ring screen.
|
* Represents the controls ring screen.
|
||||||
@@ -26,7 +26,7 @@ public class RingScreen extends Screen {
|
|||||||
protected final MidnightControlsClient mod;
|
protected final MidnightControlsClient mod;
|
||||||
|
|
||||||
public RingScreen() {
|
public RingScreen() {
|
||||||
super(new TranslatableText("midnightcontrols.menu.title.ring"));
|
super(Text.literal("midnightcontrols.menu.title.ring"));
|
||||||
this.mod = MidnightControlsClient.get();
|
this.mod = MidnightControlsClient.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import net.minecraft.client.gui.widget.ButtonWidget;
|
|||||||
import net.minecraft.client.gui.widget.TexturedButtonWidget;
|
import net.minecraft.client.gui.widget.TexturedButtonWidget;
|
||||||
import net.minecraft.client.option.KeyBinding;
|
import net.minecraft.client.option.KeyBinding;
|
||||||
import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket;
|
import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket;
|
||||||
import net.minecraft.text.LiteralText;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Arm;
|
import net.minecraft.util.Arm;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
@@ -52,7 +52,7 @@ public class TouchscreenOverlay extends Screen {
|
|||||||
|
|
||||||
public TouchscreenOverlay(@NotNull MidnightControlsClient mod)
|
public TouchscreenOverlay(@NotNull MidnightControlsClient mod)
|
||||||
{
|
{
|
||||||
super(new LiteralText("Touchscreen overlay"));
|
super(Text.literal("Touchscreen overlay"));
|
||||||
this.mod = mod;
|
this.mod = mod;
|
||||||
this.passEvents = true;
|
this.passEvents = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import dev.lambdaurora.spruceui.SpruceTexts;
|
|||||||
import dev.lambdaurora.spruceui.widget.AbstractSpruceIconButtonWidget;
|
import dev.lambdaurora.spruceui.widget.AbstractSpruceIconButtonWidget;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.LiteralText;
|
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -35,13 +34,13 @@ public class ControllerButtonWidget extends AbstractSpruceIconButtonWidget {
|
|||||||
public void update() {
|
public void update() {
|
||||||
int length = binding.getButton().length;
|
int length = binding.getButton().length;
|
||||||
this.setMessage(this.binding.isNotBound() ? SpruceTexts.NOT_BOUND.copy() :
|
this.setMessage(this.binding.isNotBound() ? SpruceTexts.NOT_BOUND.copy() :
|
||||||
(length > 0 ? ButtonBinding.getLocalizedButtonName(binding.getButton()[0]) : new LiteralText("<>")));
|
(length > 0 ? ButtonBinding.getLocalizedButtonName(binding.getButton()[0]) : Text.literal("<>")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Text getMessage() {
|
public Text getMessage() {
|
||||||
if (this.binding.getButton().length > 1)
|
if (this.binding.getButton().length > 1)
|
||||||
return LiteralText.EMPTY;
|
return Text.empty();
|
||||||
return super.getMessage();
|
return super.getMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import dev.lambdaurora.spruceui.widget.SpruceButtonWidget;
|
|||||||
import dev.lambdaurora.spruceui.widget.container.SpruceContainerWidget;
|
import dev.lambdaurora.spruceui.widget.container.SpruceContainerWidget;
|
||||||
import net.minecraft.client.gui.screen.option.ControlsOptionsScreen;
|
import net.minecraft.client.gui.screen.option.ControlsOptionsScreen;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.Text;
|
||||||
import org.aperlambda.lambdacommon.utils.function.Predicates;
|
import org.aperlambda.lambdacommon.utils.function.Predicates;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -46,7 +46,7 @@ public class ControllerControlsWidget extends SpruceContainerWidget {
|
|||||||
|
|
||||||
protected void init() {
|
protected void init() {
|
||||||
this.addChild(new SpruceButtonWidget(Position.of(this, this.width / 2 - 155, 18), 310, 20,
|
this.addChild(new SpruceButtonWidget(Position.of(this, this.width / 2 - 155, 18), 310, 20,
|
||||||
new TranslatableText("midnightcontrols.menu.keyboard_controls"),
|
Text.translatable("midnightcontrols.menu.keyboard_controls"),
|
||||||
btn -> this.client.setScreen(new ControlsOptionsScreen(null, this.client.options))));
|
btn -> this.client.setScreen(new ControlsOptionsScreen(null, this.client.options))));
|
||||||
this.bindingsListWidget = new ControlsListWidget(Position.of(this, 0, 43), this.width, this.height - 43 - 35, this);
|
this.bindingsListWidget = new ControlsListWidget(Position.of(this, 0, 43), this.width, this.height - 43 - 35, this);
|
||||||
this.addChild(this.bindingsListWidget);
|
this.addChild(this.bindingsListWidget);
|
||||||
@@ -57,7 +57,7 @@ public class ControllerControlsWidget extends SpruceContainerWidget {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderWidget(MatrixStack matrices, int mouseX, int mouseY, float delta) {
|
public void renderWidget(MatrixStack matrices, int mouseX, int mouseY, float delta) {
|
||||||
drawCenteredText(matrices, this.client.textRenderer, new TranslatableText("midnightcontrols.menu.title.controller_controls"),
|
drawCenteredText(matrices, this.client.textRenderer, Text.translatable("midnightcontrols.menu.title.controller_controls"),
|
||||||
this.getX() + this.width / 2, this.getY() + 4, 16777215);
|
this.getX() + this.width / 2, this.getY() + 4, 16777215);
|
||||||
this.resetButton.setActive(InputManager.streamBindings().anyMatch(Predicates.not(ButtonBinding::isDefault)));
|
this.resetButton.setActive(InputManager.streamBindings().anyMatch(Predicates.not(ButtonBinding::isDefault)));
|
||||||
super.renderWidget(matrices, mouseX, mouseY, delta);
|
super.renderWidget(matrices, mouseX, mouseY, delta);
|
||||||
|
|||||||
@@ -27,9 +27,7 @@ import net.fabricmc.api.EnvType;
|
|||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
import net.minecraft.client.resource.language.I18n;
|
import net.minecraft.client.resource.language.I18n;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.LiteralText;
|
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import net.minecraft.util.Formatting;
|
import net.minecraft.util.Formatting;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -93,17 +91,17 @@ public class ControlsListWidget extends SpruceEntryListWidget<ControlsListWidget
|
|||||||
MidnightControlsClient.get().input.beginControlsInput(gui);
|
MidnightControlsClient.get().input.beginControlsInput(gui);
|
||||||
}) {
|
}) {
|
||||||
protected Text getNarrationMessage() {
|
protected Text getNarrationMessage() {
|
||||||
return binding.isNotBound() ? new TranslatableText("narrator.controls.unbound", bindingName)
|
return binding.isNotBound() ? Text.translatable("narrator.controls.unbound", bindingName)
|
||||||
: new TranslatableText("narrator.controls.bound", bindingName, super.getNarrationMessage());
|
: Text.translatable("narrator.controls.bound", bindingName, super.getNarrationMessage());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.children.add(editButton);
|
this.children.add(editButton);
|
||||||
this.resetButton = new SpruceButtonWidget(Position.of(this,
|
this.resetButton = new SpruceButtonWidget(Position.of(this,
|
||||||
this.editButton.getPosition().getRelativeX() + this.editButton.getWidth() + 2, 0),
|
this.editButton.getPosition().getRelativeX() + this.editButton.getWidth() + 2, 0),
|
||||||
44, 20, new TranslatableText("controls.reset"),
|
44, 20, Text.translatable("controls.reset"),
|
||||||
btn -> MidnightControlsConfig.setButtonBinding(binding, binding.getDefaultButton())) {
|
btn -> MidnightControlsConfig.setButtonBinding(binding, binding.getDefaultButton())) {
|
||||||
protected Text getNarrationMessage() {
|
protected Text getNarrationMessage() {
|
||||||
return new TranslatableText("narrator.controls.reset", bindingName);
|
return Text.translatable("narrator.controls.reset", bindingName);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.children.add(this.resetButton);
|
this.children.add(this.resetButton);
|
||||||
@@ -116,7 +114,7 @@ public class ControlsListWidget extends SpruceEntryListWidget<ControlsListWidget
|
|||||||
MidnightControlsClient.get().input.beginControlsInput(null);
|
MidnightControlsClient.get().input.beginControlsInput(null);
|
||||||
}) {
|
}) {
|
||||||
protected Text getNarrationMessage() {
|
protected Text getNarrationMessage() {
|
||||||
return new TranslatableText("midnightcontrols.narrator.unbound", bindingName);
|
return Text.translatable("midnightcontrols.narrator.unbound", bindingName);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.children.add(this.unbindButton);
|
this.children.add(this.unbindButton);
|
||||||
@@ -243,9 +241,9 @@ public class ControlsListWidget extends SpruceEntryListWidget<ControlsListWidget
|
|||||||
|
|
||||||
this.editButton.update();
|
this.editButton.update();
|
||||||
if (focused) {
|
if (focused) {
|
||||||
var text = new LiteralText("> ").formatted(Formatting.WHITE);
|
var text = Text.literal("> ").formatted(Formatting.WHITE);
|
||||||
text.append(this.editButton.getMessage().copy().formatted(Formatting.YELLOW));
|
text.append(this.editButton.getMessage().copy().formatted(Formatting.YELLOW));
|
||||||
this.editButton.setMessage(text.append(new LiteralText(" <").formatted(Formatting.WHITE)));
|
this.editButton.setMessage(text.append(Text.literal(" <").formatted(Formatting.WHITE)));
|
||||||
} else if (!this.binding.isNotBound() && InputManager.hasDuplicatedBindings(this.binding)) {
|
} else if (!this.binding.isNotBound() && InputManager.hasDuplicatedBindings(this.binding)) {
|
||||||
var text = this.editButton.getMessage().copy();
|
var text = this.editButton.getMessage().copy();
|
||||||
this.editButton.setMessage(text.formatted(Formatting.RED));
|
this.editButton.setMessage(text.formatted(Formatting.RED));
|
||||||
@@ -264,7 +262,7 @@ public class ControlsListWidget extends SpruceEntryListWidget<ControlsListWidget
|
|||||||
protected CategoryEntry(ControlsListWidget parent, ButtonCategory category) {
|
protected CategoryEntry(ControlsListWidget parent, ButtonCategory category) {
|
||||||
super(parent);
|
super(parent);
|
||||||
this.separatorWidget = new SpruceSeparatorWidget(Position.of(this, 2, 0), this.getWidth() - 4,
|
this.separatorWidget = new SpruceSeparatorWidget(Position.of(this, 2, 0), this.getWidth() - 4,
|
||||||
new LiteralText(category.getTranslatedName())) {
|
Text.literal(category.getTranslatedName())) {
|
||||||
@Override
|
@Override
|
||||||
public int getWidth() {
|
public int getWidth() {
|
||||||
return CategoryEntry.this.getWidth() - 4;
|
return CategoryEntry.this.getWidth() - 4;
|
||||||
|
|||||||
@@ -19,7 +19,9 @@ import net.minecraft.client.network.AbstractClientPlayerEntity;
|
|||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
import net.minecraft.client.network.ClientPlayerEntity;
|
||||||
import net.minecraft.client.world.ClientWorld;
|
import net.minecraft.client.world.ClientWorld;
|
||||||
import net.minecraft.entity.MovementType;
|
import net.minecraft.entity.MovementType;
|
||||||
|
import net.minecraft.network.encryption.PlayerPublicKey;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
@@ -34,6 +36,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity {
|
public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity {
|
||||||
private boolean midnightcontrols$driftingPrevented = false;
|
private boolean midnightcontrols$driftingPrevented = false;
|
||||||
|
|
||||||
|
public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile, @Nullable PlayerPublicKey publicKey) {
|
||||||
|
super(world, profile, publicKey);
|
||||||
|
}
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
protected abstract boolean hasMovementInput();
|
protected abstract boolean hasMovementInput();
|
||||||
|
|
||||||
@@ -47,9 +53,6 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity
|
|||||||
@Shadow
|
@Shadow
|
||||||
protected abstract boolean isCamera();
|
protected abstract boolean isCamera();
|
||||||
|
|
||||||
public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) {
|
|
||||||
super(world, profile);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "move(Lnet/minecraft/entity/MovementType;Lnet/minecraft/util/math/Vec3d;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AbstractClientPlayerEntity;move(Lnet/minecraft/entity/MovementType;Lnet/minecraft/util/math/Vec3d;)V"))
|
@Inject(method = "move(Lnet/minecraft/entity/MovementType;Lnet/minecraft/util/math/Vec3d;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AbstractClientPlayerEntity;move(Lnet/minecraft/entity/MovementType;Lnet/minecraft/util/math/Vec3d;)V"))
|
||||||
public void onMove(MovementType type, Vec3d movement, CallbackInfo ci) {
|
public void onMove(MovementType type, Vec3d movement, CallbackInfo ci) {
|
||||||
@@ -68,7 +71,7 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/Input;tick(Z)V", shift = At.Shift.AFTER))
|
@Inject(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/Input;tick(ZF)V", shift = At.Shift.AFTER))
|
||||||
public void onInputUpdate(CallbackInfo ci) {
|
public void onInputUpdate(CallbackInfo ci) {
|
||||||
MovementHandler.HANDLER.applyMovement((ClientPlayerEntity) (Object) this);
|
MovementHandler.HANDLER.applyMovement((ClientPlayerEntity) (Object) this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import net.minecraft.client.gui.screen.option.GameOptionsScreen;
|
|||||||
import net.minecraft.client.gui.widget.ButtonWidget;
|
import net.minecraft.client.gui.widget.ButtonWidget;
|
||||||
import net.minecraft.client.option.GameOptions;
|
import net.minecraft.client.option.GameOptions;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
@@ -26,7 +25,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
* Injects the new controls settings button.
|
* Injects the new controls settings button.
|
||||||
*/
|
*/
|
||||||
@Mixin(ControlsOptionsScreen.class)
|
@Mixin(ControlsOptionsScreen.class)
|
||||||
public class ControlsOptionsScreenMixin extends GameOptionsScreen {
|
public abstract class ControlsOptionsScreenMixin extends GameOptionsScreen {
|
||||||
public ControlsOptionsScreenMixin(Screen parent, GameOptions gameOptions, Text text) {
|
public ControlsOptionsScreenMixin(Screen parent, GameOptions gameOptions, Text text) {
|
||||||
super(parent, gameOptions, text);
|
super(parent, gameOptions, text);
|
||||||
}
|
}
|
||||||
@@ -35,7 +34,7 @@ public class ControlsOptionsScreenMixin extends GameOptionsScreen {
|
|||||||
int i = this.width / 2 - 155;
|
int i = this.width / 2 - 155;
|
||||||
int j = i + 160;
|
int j = i + 160;
|
||||||
int k = this.height / 6 - 12 + 48;;
|
int k = this.height / 6 - 12 + 48;;
|
||||||
this.addDrawableChild(new ButtonWidget(j, k, 150, 20, new TranslatableText("midnightcontrols.menu.title.controller").append("..."), (button) -> {
|
this.addDrawableChild(new ButtonWidget(j, k, 150, 20, Text.translatable("midnightcontrols.menu.title.controller").append("..."), (button) -> {
|
||||||
this.client.setScreen(new MidnightControlsSettingsScreen(this, false));
|
this.client.setScreen(new MidnightControlsSettingsScreen(this, false));
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client.mixin;
|
package eu.midnightdust.midnightcontrols.client.mixin;
|
||||||
|
|
||||||
import net.minecraft.client.option.GameOptions;
|
import net.minecraft.client.option.GameOptions;
|
||||||
|
import net.minecraft.client.option.SimpleOption;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@@ -22,13 +24,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
* Sets the default of the Auto-Jump option to false.
|
* Sets the default of the Auto-Jump option to false.
|
||||||
*/
|
*/
|
||||||
@Mixin(GameOptions.class)
|
@Mixin(GameOptions.class)
|
||||||
public class GameOptionsMixin {
|
public abstract class GameOptionsMixin {
|
||||||
@Shadow
|
|
||||||
public boolean autoJump;
|
@Shadow public abstract SimpleOption<Boolean> getAutoJump();
|
||||||
|
|
||||||
@Inject(method = "load", at = @At("HEAD"))
|
@Inject(method = "load", at = @At("HEAD"))
|
||||||
public void onInit(CallbackInfo ci) {
|
public void onInit(CallbackInfo ci) {
|
||||||
// Set default value of the Auto-Jump option to false.
|
// Set default value of the Auto-Jump option to false.
|
||||||
this.autoJump = false;
|
getAutoJump().setValue(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ public abstract class MinecraftClientMixin {
|
|||||||
hitResult = mod.reacharound.withSideForReacharound(hitResult, stackInHand);
|
hitResult = mod.reacharound.withSideForReacharound(hitResult, stackInHand);
|
||||||
|
|
||||||
int previousStackCount = stackInHand.getCount();
|
int previousStackCount = stackInHand.getCount();
|
||||||
var result = this.interactionManager.interactBlock(this.player, this.world, hand, hitResult);
|
var result = this.interactionManager.interactBlock(this.player, hand, hitResult);
|
||||||
if (result.isAccepted()) {
|
if (result.isAccepted()) {
|
||||||
if (result.shouldSwingHand()) {
|
if (result.shouldSwingHand()) {
|
||||||
this.player.swingHand(hand);
|
this.player.swingHand(hand);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import net.minecraft.client.font.TextRenderer;
|
|||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.client.option.KeyBinding;
|
import net.minecraft.client.option.KeyBinding;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.TranslatableText;
|
import net.minecraft.text.Text;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ public class KeyBindingRingAction extends RingAction {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawIcon(@NotNull MatrixStack matrices, @NotNull TextRenderer textRenderer, int x, int y, boolean hovered) {
|
public void drawIcon(@NotNull MatrixStack matrices, @NotNull TextRenderer textRenderer, int x, int y, boolean hovered) {
|
||||||
drawCenteredText(matrices, textRenderer, new TranslatableText(this.getName()), x + 25, y + 25 - textRenderer.fontHeight / 2, 0xffffff);
|
drawCenteredText(matrices, textRenderer, Text.translatable(this.getName()), x + 25, y + 25 - textRenderer.fontHeight / 2, 0xffffff);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static class Factory implements RingAction.Factory {
|
protected static class Factory implements RingAction.Factory {
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import net.minecraft.client.gui.DrawableHelper;
|
|||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import org.aperlambda.lambdacommon.utils.Nameable;
|
import org.aperlambda.lambdacommon.utils.Nameable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -43,7 +42,7 @@ public abstract class RingAction extends DrawableHelper implements Nameable {
|
|||||||
* @return the text name
|
* @return the text name
|
||||||
*/
|
*/
|
||||||
public Text getTextName() {
|
public Text getTextName() {
|
||||||
return new TranslatableText(this.getName());
|
return Text.translatable(this.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client.ring;
|
package eu.midnightdust.midnightcontrols.client.ring;
|
||||||
|
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import org.aperlambda.lambdacommon.utils.Nameable;
|
import org.aperlambda.lambdacommon.utils.Nameable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -31,7 +30,7 @@ public enum RingButtonMode implements Nameable {
|
|||||||
|
|
||||||
RingButtonMode(@NotNull String name) {
|
RingButtonMode(@NotNull String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.text = new TranslatableText(this.getTranslationKey());
|
this.text = Text.translatable(this.getTranslationKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
163
src/main/resources/assets/midnightcontrols/lang/de_de.json
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
{
|
||||||
|
"midnightcontrols.midnightconfig.title": "MidnightControls Erweiterte Konfiguration",
|
||||||
|
"key.midnightcontrols.look_down": "Nach unten schauen",
|
||||||
|
"key.midnightcontrols.look_left": "Nach links schauen",
|
||||||
|
"key.midnightcontrols.look_right": "Nach rechts schauen",
|
||||||
|
"key.midnightcontrols.look_up": "Nach oben schauen",
|
||||||
|
"key.midnightcontrols.ring": "Zeige Steuerungsring",
|
||||||
|
"midnightcontrols.action.attack": "Angreifen",
|
||||||
|
"midnightcontrols.action.back": "Zurück",
|
||||||
|
"midnightcontrols.action.chat": "Chat öffnen",
|
||||||
|
"midnightcontrols.action.drop_item": "Item droppen",
|
||||||
|
"midnightcontrols.action.exit": "Schließen",
|
||||||
|
"midnightcontrols.action.forward": "Vorwärts",
|
||||||
|
"midnightcontrols.action.hit": "Schlagen",
|
||||||
|
"midnightcontrols.action.hotbar_left": "Hotbar nach links",
|
||||||
|
"midnightcontrols.action.hotbar_right": "Hotbar nach rechts",
|
||||||
|
"midnightcontrols.action.inventory": "Inventar",
|
||||||
|
"midnightcontrols.action.jump": "Springen",
|
||||||
|
"midnightcontrols.action.left": "Links",
|
||||||
|
"midnightcontrols.action.pause_game": "Spiel pausieren",
|
||||||
|
"midnightcontrols.action.pick_block": "Block auswählen",
|
||||||
|
"midnightcontrols.action.pickup": "Aufheben",
|
||||||
|
"midnightcontrols.action.pickup_all": "Alles aufheben",
|
||||||
|
"midnightcontrols.action.place": "Platzieren",
|
||||||
|
"midnightcontrols.action.player_list": "Spielerliste",
|
||||||
|
"midnightcontrols.action.quick_move": "Schnell bewegen",
|
||||||
|
"midnightcontrols.action.right": "Rechts",
|
||||||
|
"midnightcontrols.action.screenshot": "Screenshot aufnehmen",
|
||||||
|
"midnightcontrols.action.sneak": "Schleichen",
|
||||||
|
"midnightcontrols.action.sprint": "Sprinten",
|
||||||
|
"midnightcontrols.action.swap_hands": "Hände wechseln",
|
||||||
|
"midnightcontrols.action.toggle_perspective": "Perspektive wechseln",
|
||||||
|
"midnightcontrols.action.toggle_smooth_camera": "Cinematische Kamera",
|
||||||
|
"midnightcontrols.action.page_back": "Vorherige Seite",
|
||||||
|
"midnightcontrols.action.page_next": "Nächste Seite",
|
||||||
|
"midnightcontrols.action.take": "Item nehmen",
|
||||||
|
"midnightcontrols.action.take_all": "Stack nehmen",
|
||||||
|
"midnightcontrols.action.use": "Benutzen",
|
||||||
|
"midnightcontrols.action.zoom": "Zoom",
|
||||||
|
"midnightcontrols.action.zoom_in": "Zoom erhöhen",
|
||||||
|
"midnightcontrols.action.zoom_out": "Zoom verringern",
|
||||||
|
"midnightcontrols.action.zoom_reset": "Zoom zurücksetzen",
|
||||||
|
"midnightcontrols.action.key.emotecraft.fastchoose": "Emote Schnellauswahl",
|
||||||
|
"midnightcontrols.action.key.emotecraft.stop": "Emote stoppen",
|
||||||
|
"midnightcontrols.button.left_bumper": "Linke Schultertaste",
|
||||||
|
"midnightcontrols.button.right_bumper": "Rechte Schultertaste",
|
||||||
|
"midnightcontrols.button.back": "Zurück",
|
||||||
|
"midnightcontrols.button.start": "Start",
|
||||||
|
"midnightcontrols.button.guide": "Guide",
|
||||||
|
"midnightcontrols.button.left_thumb": "Linker Stick",
|
||||||
|
"midnightcontrols.button.right_thumb": "Rechter Stick",
|
||||||
|
"midnightcontrols.button.dpad_up": "Steuerkreuz hoch",
|
||||||
|
"midnightcontrols.button.dpad_right": "Steuerkreuz rechts",
|
||||||
|
"midnightcontrols.button.dpad_down": "Steuerkreuz runter",
|
||||||
|
"midnightcontrols.button.dpad_left": "Steuerkreuz links",
|
||||||
|
"midnightcontrols.button.l4": "L4",
|
||||||
|
"midnightcontrols.button.l5": "L5",
|
||||||
|
"midnightcontrols.button.r4": "R4",
|
||||||
|
"midnightcontrols.button.r5": "L5",
|
||||||
|
"midnightcontrols.axis.left_x+": "Links X+",
|
||||||
|
"midnightcontrols.axis.left_y+": "Links Y+",
|
||||||
|
"midnightcontrols.axis.right_x+": "Rechts X+",
|
||||||
|
"midnightcontrols.axis.right_y+": "Rechts Y+",
|
||||||
|
"midnightcontrols.axis.left_trigger": "Linker Trigger",
|
||||||
|
"midnightcontrols.axis.right_trigger": "Rechter Trigger",
|
||||||
|
"midnightcontrols.axis.left_x-": "Links X-",
|
||||||
|
"midnightcontrols.axis.left_y-": "Links Y-",
|
||||||
|
"midnightcontrols.axis.right_x-": "Rechts X-",
|
||||||
|
"midnightcontrols.axis.right_y-": "Rechts Y-",
|
||||||
|
"midnightcontrols.button.unknown": "Unbekannt (%d)",
|
||||||
|
"midnightcontrols.controller.connected": "Controller %d verbunden.",
|
||||||
|
"midnightcontrols.controller.disconnected": "Controller %d getrennt.",
|
||||||
|
"midnightcontrols.controller.mappings.1": "Um die Controller-Mappings anzupassen, benutze %s",
|
||||||
|
"midnightcontrols.controller.mappings.3": "und füge die Controller-Mappings in den Mapping-Editor ein.",
|
||||||
|
"midnightcontrols.controller.mappings.error": "Fehler beim Laden der Controller-Mappings.",
|
||||||
|
"midnightcontrols.controller.mappings.error.write": "Fehler beim Schreiben der Controller Mappings.",
|
||||||
|
"midnightcontrols.controller.mappings.updated": "Mappings aktualisiert!",
|
||||||
|
"midnightcontrols.controller_type.default": "Standard",
|
||||||
|
"midnightcontrols.controller_type.dualshock": "DualShock",
|
||||||
|
"midnightcontrols.controller_type.switch": "Switch",
|
||||||
|
"midnightcontrols.controller_type.xbox": "Xbox",
|
||||||
|
"midnightcontrols.controller_type.steam": "Steam",
|
||||||
|
"midnightcontrols.controller_type.ouya": "OUYA",
|
||||||
|
"midnightcontrols.controls_mode.default": "Tastatur/Maus",
|
||||||
|
"midnightcontrols.controls_mode.controller": "Controller",
|
||||||
|
"midnightcontrols.controls_mode.touchscreen": "Touchscreen",
|
||||||
|
"midnightcontrols.hud_side.left": "links",
|
||||||
|
"midnightcontrols.hud_side.right": "rechts",
|
||||||
|
"midnightcontrols.menu.analog_movement": "Analoge Bewegung",
|
||||||
|
"midnightcontrols.menu.auto_switch_mode": "Automatischer Wechsel",
|
||||||
|
"midnightcontrols.menu.controller": "Controller",
|
||||||
|
"midnightcontrols.menu.controller2": "Zweiter Controller",
|
||||||
|
"midnightcontrols.menu.controller_type": "Controller-Typ",
|
||||||
|
"midnightcontrols.menu.controls_mode": "Modus",
|
||||||
|
"midnightcontrols.menu.fast_block_placing": "Schnelles Bauen",
|
||||||
|
"midnightcontrols.menu.fly_drifting": "Flug-Drifting",
|
||||||
|
"midnightcontrols.menu.fly_drifting_vertical": "Vertikales Flug-Drifting",
|
||||||
|
"midnightcontrols.menu.hud_enable": "HUD aktivieren",
|
||||||
|
"midnightcontrols.menu.hud_side": "HUD-Seite",
|
||||||
|
"midnightcontrols.menu.invert_right_x_axis": "X rechts umkehren",
|
||||||
|
"midnightcontrols.menu.invert_right_y_axis": "Y rechts umkehren",
|
||||||
|
"midnightcontrols.menu.keyboard_controls": "Tastatureinstellungen...",
|
||||||
|
"midnightcontrols.menu.left_dead_zone": "Linke tote Zone",
|
||||||
|
"midnightcontrols.menu.mappings.open_input_str": "Öffne den Controller-Mapping Editor",
|
||||||
|
"midnightcontrols.menu.max_left_x_value": "Maximalwert Linke X-Achse",
|
||||||
|
"midnightcontrols.menu.max_left_y_value": "Maximalwert Linke Y-Achse",
|
||||||
|
"midnightcontrols.menu.max_right_x_value": "Maximalwert Rechte X-Achse",
|
||||||
|
"midnightcontrols.menu.max_right_y_value": "Maximalwert Rechte Y-Achse",
|
||||||
|
"midnightcontrols.menu.mouse_speed": "Mausgeschwindigkeit",
|
||||||
|
"midnightcontrols.menu.reacharound.horizontal": "Vorderes Blockplatzieren",
|
||||||
|
"midnightcontrols.menu.reacharound.vertical": "Vertikales Umgreifen",
|
||||||
|
"midnightcontrols.menu.reload_controller_mappings": "Controller-Mappings neuladen",
|
||||||
|
"midnightcontrols.menu.right_dead_zone": "Rechte tote Zone",
|
||||||
|
"midnightcontrols.menu.rotation_speed": "Rotationsgeschwindigkeit",
|
||||||
|
"midnightcontrols.menu.separator.controller": "Controller",
|
||||||
|
"midnightcontrols.menu.separator.general": "Generell",
|
||||||
|
"midnightcontrols.menu.title": "MidnightControls - Einstellungen",
|
||||||
|
"midnightcontrols.menu.title.controller": "Controlleroptionen",
|
||||||
|
"midnightcontrols.menu.title.controller_controls": "Controller Steuerung",
|
||||||
|
"midnightcontrols.menu.title.gameplay": "Gameplay Optionen",
|
||||||
|
"midnightcontrols.menu.title.general": "Generelle Optionen",
|
||||||
|
"midnightcontrols.menu.title.hud": "HUD Optionen",
|
||||||
|
"midnightcontrols.menu.title.mappings.string": "Mapping-Datei Editor",
|
||||||
|
"midnightcontrols.menu.title.visual": "Visuelle Optionen",
|
||||||
|
"midnightcontrols.menu.unfocused_input": "Unfokussierte Eingabe",
|
||||||
|
"midnightcontrols.menu.virtual_mouse": "Virtuelle Maus",
|
||||||
|
"midnightcontrols.menu.virtual_mouse.skin": "Aussehen der Virtuellen Maus",
|
||||||
|
"midnightcontrols.narrator.unbound": "%s entbunden",
|
||||||
|
"midnightcontrols.not_bound": "Nicht zugewiesen",
|
||||||
|
"midnightcontrols.tooltip.analog_movement": "Aktiviert analoge Bewegung, wenn möglich.",
|
||||||
|
"midnightcontrols.tooltip.auto_switch_mode": "Ob der Eingabemodus automatisch auf Controller eingestellt werden soll, wenn einer verbunden wird.",
|
||||||
|
"midnightcontrols.tooltip.controller2": "Zweiter Controller, zum Beispiel für Joy-Cons.",
|
||||||
|
"midnightcontrols.tooltip.controller_type": "Der Controllertyp für den die Knöpfe angezeigt werden sollen.",
|
||||||
|
"midnightcontrols.tooltip.controls_mode": "Der Steuerungsmodus.",
|
||||||
|
"midnightcontrols.tooltip.fast_block_placing": "Während des Fliegens im Kreativmodus das schnelle Platzieren von Knöpfen aktivieren. §cWird von manchen Servern als cheaten eingestuft.",
|
||||||
|
"midnightcontrols.tooltip.fly_drifting": "Aktiviert das Flug-Drifting von Vanilla Minecraft.",
|
||||||
|
"midnightcontrols.tooltip.fly_drifting_vertical": "Aktiviert das vertikale Flug-Drifting von Vanilla Minecraft",
|
||||||
|
"midnightcontrols.tooltip.hud_enable": "(De-)Aktiviert die Knopfanzeige im Spiel",
|
||||||
|
"midnightcontrols.tooltip.hud_side": "Die Position der Knopfanzeige.",
|
||||||
|
"midnightcontrols.tooltip.left_dead_zone": "Die tote Zone für den linken Analogstick.",
|
||||||
|
"midnightcontrols.tooltip.max_left_x_value": "Ändert den maximalen Wert der linken X-Achse. Nützlich, wenn deine Achse nicht bis zum Maximum geht.",
|
||||||
|
"midnightcontrols.tooltip.max_left_y_value": "Ändert den maximalen Wert der linken Y-Achse. Nützlich, wenn deine Achse nicht bis zum Maximum geht.",
|
||||||
|
"midnightcontrols.tooltip.max_right_x_value": "Ändert den maximalen Wert der rechten X-Achse. Nützlich, wenn deine Achse nicht bis zum Maximum geht.",
|
||||||
|
"midnightcontrols.tooltip.max_right_y_value": "Ändert den maximalen Wert der rechten Y-Achse. Nützlich, wenn deine Achse nicht bis zum Maximum geht.",
|
||||||
|
"midnightcontrols.tooltip.mouse_speed": "Die emulierte Mausgeschwindigkeit des Controllers.",
|
||||||
|
"midnightcontrols.tooltip.reacharound.horizontal": "Aktiviert vorderes Platzieren von Blöcken, §cwird von manchen Servern als cheaten eingestuft§r.",
|
||||||
|
"midnightcontrols.tooltip.reacharound.vertical": "Aktiviert vertikales Platzieren von Blöcken, §cwird von manchen Servern als cheaten eingestuft§r.",
|
||||||
|
"midnightcontrols.tooltip.reload_controller_mappings": "Lädt die Controller-Mappings neu.",
|
||||||
|
"midnightcontrols.tooltip.right_dead_zone": "Die tote Zone für den rechten Analogstick.",
|
||||||
|
"midnightcontrols.tooltip.rotation_speed": "Die Kamerarotationsgeschwindigkeit im Controllermodus.",
|
||||||
|
"midnightcontrols.tooltip.unfocused_input": "Erlaube Controllereingabe auch wenn das Fenster nicht fokussiert ist.",
|
||||||
|
"midnightcontrols.tooltip.virtual_mouse": "Aktiviere die virtuelle Maus.",
|
||||||
|
"midnightcontrols.virtual_mouse.skin.default_light": "Standard Hell",
|
||||||
|
"midnightcontrols.virtual_mouse.skin.default_dark": "Standard Dunkel",
|
||||||
|
"midnightcontrols.virtual_mouse.skin.second_light": "Alternativ Hell",
|
||||||
|
"midnightcontrols.virtual_mouse.skin.second_dark": "Alternativ Dunkel",
|
||||||
|
"midnightcontrols.button.a": "A",
|
||||||
|
"midnightcontrols.button.b": "B",
|
||||||
|
"midnightcontrols.button.x": "X",
|
||||||
|
"midnightcontrols.button.y": "Y",
|
||||||
|
"modmenu.descriptionTranslation.midnightcontrols": "Fügt Controller-Unterstützung hinzu und verbessert allgemein die Steuerung.\nBasiert auf der LambdaControls mod, deren Entwicklung leider eingestellt wurde.",
|
||||||
|
"modmenu.summaryTranslation.midnightcontrols": "Fügt Controller-Unterstützung hinzu und verbessert allgemein die Steuerung."
|
||||||
|
}
|
||||||
@@ -31,6 +31,10 @@
|
|||||||
"midnightcontrols.action.swap_hands": "Swap Hands",
|
"midnightcontrols.action.swap_hands": "Swap Hands",
|
||||||
"midnightcontrols.action.toggle_perspective": "Toggle Perspective",
|
"midnightcontrols.action.toggle_perspective": "Toggle Perspective",
|
||||||
"midnightcontrols.action.toggle_smooth_camera": "Toggle Cinematic Camera",
|
"midnightcontrols.action.toggle_smooth_camera": "Toggle Cinematic Camera",
|
||||||
|
"midnightcontrols.action.page_back": "Previous Page",
|
||||||
|
"midnightcontrols.action.page_next": "Next Page",
|
||||||
|
"midnightcontrols.action.take": "Take Item",
|
||||||
|
"midnightcontrols.action.take_all": "Take Stack",
|
||||||
"midnightcontrols.action.use": "Use",
|
"midnightcontrols.action.use": "Use",
|
||||||
"midnightcontrols.action.zoom": "Zoom",
|
"midnightcontrols.action.zoom": "Zoom",
|
||||||
"midnightcontrols.action.zoom_in": "Increase Zoom",
|
"midnightcontrols.action.zoom_in": "Increase Zoom",
|
||||||
@@ -153,5 +157,6 @@
|
|||||||
"midnightcontrols.virtual_mouse.skin.default_light": "Default Light",
|
"midnightcontrols.virtual_mouse.skin.default_light": "Default Light",
|
||||||
"midnightcontrols.virtual_mouse.skin.default_dark": "Default Dark",
|
"midnightcontrols.virtual_mouse.skin.default_dark": "Default Dark",
|
||||||
"midnightcontrols.virtual_mouse.skin.second_light": "Second Light",
|
"midnightcontrols.virtual_mouse.skin.second_light": "Second Light",
|
||||||
"midnightcontrols.virtual_mouse.skin.second_dark": "Second Dark"
|
"midnightcontrols.virtual_mouse.skin.second_dark": "Second Dark",
|
||||||
|
"modmenu.descriptionTranslation.midnightcontrols": "Adds controller support and enhanced controls overall.\nForked from LambdaControls, which sadly got discontinued."
|
||||||
}
|
}
|
||||||
@@ -115,7 +115,6 @@
|
|||||||
"midnightcontrols.tooltip.controller2": "Kullanılacak ikinci oyun kolu, örnek olarak Joy-Con desteği de mümkün.",
|
"midnightcontrols.tooltip.controller2": "Kullanılacak ikinci oyun kolu, örnek olarak Joy-Con desteği de mümkün.",
|
||||||
"midnightcontrols.tooltip.controller_type": "Doğru tuşları göstermesi için oyun kolu türü.",
|
"midnightcontrols.tooltip.controller_type": "Doğru tuşları göstermesi için oyun kolu türü.",
|
||||||
"midnightcontrols.tooltip.controls_mode": "Kontrol Modu",
|
"midnightcontrols.tooltip.controls_mode": "Kontrol Modu",
|
||||||
"midnightcontrols.tooltip.dead_zone": "Oyun kolunun analog çubukları için ayarlanan ölü bölge/dead zone",
|
|
||||||
"midnightcontrols.tooltip.fast_block_placing": "Yaratıcı modda uçarken, hızına bağlı olarak hızlı blok koymayı etkinleştirir. §cBazı sunucular bunun hile olduğunu düşünebilir.",
|
"midnightcontrols.tooltip.fast_block_placing": "Yaratıcı modda uçarken, hızına bağlı olarak hızlı blok koymayı etkinleştirir. §cBazı sunucular bunun hile olduğunu düşünebilir.",
|
||||||
"midnightcontrols.tooltip.fly_drifting": "Uçarken, Vanilla'daki gibi ani duruşlarda kayma efektini etkinleştirir.",
|
"midnightcontrols.tooltip.fly_drifting": "Uçarken, Vanilla'daki gibi ani duruşlarda kayma efektini etkinleştirir.",
|
||||||
"midnightcontrols.tooltip.fly_drifting_vertical": "Yukarı/aşağı uçarken, Vanilla'daki gibi ani duruşlarda kayma efektini etkinleştirir.",
|
"midnightcontrols.tooltip.fly_drifting_vertical": "Yukarı/aşağı uçarken, Vanilla'daki gibi ani duruşlarda kayma efektini etkinleştirir.",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
@@ -3,11 +3,21 @@
|
|||||||
"id": "midnightcontrols",
|
"id": "midnightcontrols",
|
||||||
"name": "MidnightControls",
|
"name": "MidnightControls",
|
||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"description": "Adds better controls, and controller support.",
|
"description": "Adds controller support and enhanced controls overall.",
|
||||||
"authors": [
|
"authors": [
|
||||||
"LambdAurora",
|
"LambdAurora",
|
||||||
"Motschen"
|
"Motschen"
|
||||||
],
|
],
|
||||||
|
"contributors": [
|
||||||
|
"akemin-dayo",
|
||||||
|
"DioEgizio",
|
||||||
|
"Ivanoks",
|
||||||
|
"FlashyReese",
|
||||||
|
"Hambaka",
|
||||||
|
"joaoh1",
|
||||||
|
"EnnuiL",
|
||||||
|
"egeesin"
|
||||||
|
],
|
||||||
"contact": {
|
"contact": {
|
||||||
"homepage": "https://modrinth.com/mod/midnightcontrols",
|
"homepage": "https://modrinth.com/mod/midnightcontrols",
|
||||||
"sources": "https://github.com/TeamMidnightDust/MidnightControls",
|
"sources": "https://github.com/TeamMidnightDust/MidnightControls",
|
||||||
|
|||||||
4
src/main/resources/resourcepacks/bedrock/CREDITS
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Some of the textures in this Resourcepack are directly taken from the Bedrock assets and are therefore © Mojang Studios.
|
||||||
|
Credits go to Ivanoks for redrawing the Bedrock XBox controller icons in 15x15,
|
||||||
|
Motschen for creating the assets for the other controllers
|
||||||
|
and LambdAurora for the original assets, part of which are also included.
|
||||||
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
6
src/main/resources/resourcepacks/bedrock/pack.mcmeta
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"pack": {
|
||||||
|
"pack_format": 8,
|
||||||
|
"description": "Makes the controller buttons look like from Bedrock Edition"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
src/main/resources/resourcepacks/bedrock/pack.png
Normal file
|
After Width: | Height: | Size: 12 KiB |