├── .gitattributes
├── .github
└── workflows
│ └── build.yml
├── .gitignore
├── LICENSE
├── README.md
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
└── main
├── java
└── minitweaks
│ ├── MiniTweaks.java
│ ├── MiniTweaksCarpetExtension.java
│ ├── MiniTweaksSettings.java
│ ├── dispenser
│ ├── MiniTweaksDispenserBehaviors.java
│ └── behaviors
│ │ ├── AmethystShardDispenserBehavior.java
│ │ ├── DyeItemDispenserBehavior.java
│ │ ├── GoldenAppleDispenserBehavior.java
│ │ ├── IronIngotDispenserBehavior.java
│ │ ├── NameTagDispenserBehavior.java
│ │ ├── WaterBottleDispenserBehavior.java
│ │ └── WaterBucketDispenserBehavior.java
│ ├── mixins
│ ├── block
│ │ ├── all
│ │ │ └── AbstractBlockMixin.java
│ │ ├── anvil
│ │ │ └── crushing
│ │ │ │ └── AnvilBlockMixin.java
│ │ ├── dispenser
│ │ │ └── behavior
│ │ │ │ └── DispenserBlockMixin.java
│ │ ├── farmland
│ │ │ └── trample
│ │ │ │ └── FarmlandBlockMixin.java
│ │ ├── grindstone
│ │ │ └── curses
│ │ │ │ └── GrindstoneScreenHandlerMixin.java
│ │ ├── oxidizable
│ │ │ └── OxidizableBlockMixin.java
│ │ ├── piston
│ │ │ └── waterlog
│ │ │ │ └── PistonBlockEntityMixin.java
│ │ ├── shrieker
│ │ │ └── activate
│ │ │ │ └── SculkShriekerBlockMixin.java
│ │ └── snow
│ │ │ └── shave
│ │ │ └── ShovelItemMixin.java
│ ├── command
│ │ └── seed
│ │ │ └── permission
│ │ │ └── SeedCommandMixin.java
│ ├── crafting
│ │ └── curses
│ │ │ └── RepairItemRecipeMixin.java
│ ├── item
│ │ └── hoe
│ │ │ └── harvest
│ │ │ └── HoeItemMixin.java
│ └── mob
│ │ ├── all
│ │ ├── interact
│ │ │ └── MobEntityMixin.java
│ │ ├── lightning
│ │ │ └── EntityMixin.java
│ │ └── nametag
│ │ │ └── LivingEntityMixin.java
│ │ ├── allay
│ │ └── duplicate
│ │ │ └── AllayEntityInvoker.java
│ │ ├── blaze
│ │ └── fire
│ │ │ └── SmallFireballEntityMixin.java
│ │ ├── creeper
│ │ ├── block_damage
│ │ │ └── CreeperEntityMixin.java
│ │ └── head_drops
│ │ │ └── CreeperEntityMixin.java
│ │ ├── dragon
│ │ ├── block_damage
│ │ │ └── EnderDragonEntityMixin.java
│ │ └── egg
│ │ │ └── EnderDragonFightMixin.java
│ │ ├── ghast
│ │ └── block_damage
│ │ │ └── FireballEntityMixin.java
│ │ ├── phantom
│ │ └── spawning
│ │ │ └── PhantomSpawnerMixin.java
│ │ ├── pickup
│ │ └── SkeletonZombieEntityMixin.java
│ │ ├── player
│ │ ├── drops
│ │ │ ├── ItemEntityAccessor.java
│ │ │ └── PlayerInventoryMixin.java
│ │ └── xp
│ │ │ └── PlayerEntityMixin.java
│ │ ├── sheep
│ │ └── dye
│ │ │ └── DyeItemMixin.java
│ │ ├── shulker
│ │ └── dye
│ │ │ ├── DyeItemMixin.java
│ │ │ ├── ShulkerEntityInvoker.java
│ │ │ └── ShulkerEntityMixin.java
│ │ ├── slime
│ │ └── looting
│ │ │ └── SlimeEntityMixin.java
│ │ ├── snowgolem
│ │ └── melt
│ │ │ └── SnowGolemEntityMixin.java
│ │ ├── squid
│ │ └── lightning
│ │ │ └── SquidEntityMixin.java
│ │ ├── vex
│ │ └── nerf
│ │ │ └── VexEntityMixin.java
│ │ ├── villager
│ │ ├── bed_explode
│ │ │ └── VillagerEntityMixin.java
│ │ └── lightning
│ │ │ └── VillagerEntityMixin.java
│ │ └── zombie
│ │ └── convert
│ │ ├── ZombieEntityMixin.java
│ │ └── ZombieVillagerEntityInvoker.java
│ └── util
│ └── AnvilCrushing.java
└── resources
├── assets
└── minitweaks
│ ├── icon.png
│ └── lang
│ └── en_us.json
├── fabric.mod.json
└── minitweaks.mixins.json
/.gitattributes:
--------------------------------------------------------------------------------
1 | #
2 | # https://help.github.com/articles/dealing-with-line-endings/
3 | #
4 | # Linux start script should use lf
5 | /gradlew text eol=lf
6 |
7 | # These are Windows script files and should use crlf
8 | *.bat text eol=crlf
9 |
10 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | # Automatically build the project and run any configured tests for every push
2 | # and submitted pull request. This can help catch issues that only occur on
3 | # certain platforms or Java versions, and provides a first line of defence
4 | # against bad commits.
5 |
6 | name: build
7 | on: [pull_request, push]
8 |
9 | jobs:
10 | build:
11 | runs-on: ubuntu-24.04
12 | steps:
13 | - name: checkout repository
14 | uses: actions/checkout@v4
15 | - name: validate gradle wrapper
16 | uses: gradle/actions/wrapper-validation@v4
17 | - name: setup jdk
18 | uses: actions/setup-java@v4
19 | with:
20 | java-version: '21'
21 | distribution: 'microsoft'
22 | - name: make gradle wrapper executable
23 | run: chmod +x ./gradlew
24 | - name: build
25 | run: ./gradlew build
26 | - name: capture build artifacts
27 | uses: actions/upload-artifact@v4
28 | with:
29 | name: Artifacts
30 | path: build/libs/
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # gradle
2 |
3 | .gradle/
4 | build/
5 | out/
6 | classes/
7 |
8 | # eclipse
9 |
10 | *.launch
11 |
12 | # idea
13 |
14 | .idea/
15 | *.iml
16 | *.ipr
17 | *.iws
18 |
19 | # vscode
20 |
21 | .settings/
22 | .vscode/
23 | bin/
24 | .classpath
25 | .project
26 |
27 | # macos
28 |
29 | *.DS_Store
30 |
31 | # fabric
32 |
33 | run/
34 |
35 | # java
36 |
37 | hs_err_*.log
38 | replay_*.log
39 | *.hprof
40 | *.jfr
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU LESSER GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 |
9 | This version of the GNU Lesser General Public License incorporates
10 | the terms and conditions of version 3 of the GNU General Public
11 | License, supplemented by the additional permissions listed below.
12 |
13 | 0. Additional Definitions.
14 |
15 | As used herein, "this License" refers to version 3 of the GNU Lesser
16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU
17 | General Public License.
18 |
19 | "The Library" refers to a covered work governed by this License,
20 | other than an Application or a Combined Work as defined below.
21 |
22 | An "Application" is any work that makes use of an interface provided
23 | by the Library, but which is not otherwise based on the Library.
24 | Defining a subclass of a class defined by the Library is deemed a mode
25 | of using an interface provided by the Library.
26 |
27 | A "Combined Work" is a work produced by combining or linking an
28 | Application with the Library. The particular version of the Library
29 | with which the Combined Work was made is also called the "Linked
30 | Version".
31 |
32 | The "Minimal Corresponding Source" for a Combined Work means the
33 | Corresponding Source for the Combined Work, excluding any source code
34 | for portions of the Combined Work that, considered in isolation, are
35 | based on the Application, and not on the Linked Version.
36 |
37 | The "Corresponding Application Code" for a Combined Work means the
38 | object code and/or source code for the Application, including any data
39 | and utility programs needed for reproducing the Combined Work from the
40 | Application, but excluding the System Libraries of the Combined Work.
41 |
42 | 1. Exception to Section 3 of the GNU GPL.
43 |
44 | You may convey a covered work under sections 3 and 4 of this License
45 | without being bound by section 3 of the GNU GPL.
46 |
47 | 2. Conveying Modified Versions.
48 |
49 | If you modify a copy of the Library, and, in your modifications, a
50 | facility refers to a function or data to be supplied by an Application
51 | that uses the facility (other than as an argument passed when the
52 | facility is invoked), then you may convey a copy of the modified
53 | version:
54 |
55 | a) under this License, provided that you make a good faith effort to
56 | ensure that, in the event an Application does not supply the
57 | function or data, the facility still operates, and performs
58 | whatever part of its purpose remains meaningful, or
59 |
60 | b) under the GNU GPL, with none of the additional permissions of
61 | this License applicable to that copy.
62 |
63 | 3. Object Code Incorporating Material from Library Header Files.
64 |
65 | The object code form of an Application may incorporate material from
66 | a header file that is part of the Library. You may convey such object
67 | code under terms of your choice, provided that, if the incorporated
68 | material is not limited to numerical parameters, data structure
69 | layouts and accessors, or small macros, inline functions and templates
70 | (ten or fewer lines in length), you do both of the following:
71 |
72 | a) Give prominent notice with each copy of the object code that the
73 | Library is used in it and that the Library and its use are
74 | covered by this License.
75 |
76 | b) Accompany the object code with a copy of the GNU GPL and this license
77 | document.
78 |
79 | 4. Combined Works.
80 |
81 | You may convey a Combined Work under terms of your choice that,
82 | taken together, effectively do not restrict modification of the
83 | portions of the Library contained in the Combined Work and reverse
84 | engineering for debugging such modifications, if you also do each of
85 | the following:
86 |
87 | a) Give prominent notice with each copy of the Combined Work that
88 | the Library is used in it and that the Library and its use are
89 | covered by this License.
90 |
91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license
92 | document.
93 |
94 | c) For a Combined Work that displays copyright notices during
95 | execution, include the copyright notice for the Library among
96 | these notices, as well as a reference directing the user to the
97 | copies of the GNU GPL and this license document.
98 |
99 | d) Do one of the following:
100 |
101 | 0) Convey the Minimal Corresponding Source under the terms of this
102 | License, and the Corresponding Application Code in a form
103 | suitable for, and under terms that permit, the user to
104 | recombine or relink the Application with a modified version of
105 | the Linked Version to produce a modified Combined Work, in the
106 | manner specified by section 6 of the GNU GPL for conveying
107 | Corresponding Source.
108 |
109 | 1) Use a suitable shared library mechanism for linking with the
110 | Library. A suitable mechanism is one that (a) uses at run time
111 | a copy of the Library already present on the user's computer
112 | system, and (b) will operate properly with a modified version
113 | of the Library that is interface-compatible with the Linked
114 | Version.
115 |
116 | e) Provide Installation Information, but only if you would otherwise
117 | be required to provide such information under section 6 of the
118 | GNU GPL, and only to the extent that such information is
119 | necessary to install and execute a modified version of the
120 | Combined Work produced by recombining or relinking the
121 | Application with a modified version of the Linked Version. (If
122 | you use option 4d0, the Installation Information must accompany
123 | the Minimal Corresponding Source and Corresponding Application
124 | Code. If you use option 4d1, you must provide the Installation
125 | Information in the manner specified by section 6 of the GNU GPL
126 | for conveying Corresponding Source.)
127 |
128 | 5. Combined Libraries.
129 |
130 | You may place library facilities that are a work based on the
131 | Library side by side in a single library together with other library
132 | facilities that are not Applications and are not covered by this
133 | License, and convey such a combined library under terms of your
134 | choice, if you do both of the following:
135 |
136 | a) Accompany the combined library with a copy of the same work based
137 | on the Library, uncombined with any other library facilities,
138 | conveyed under the terms of this License.
139 |
140 | b) Give prominent notice with the combined library that part of it
141 | is a work based on the Library, and explaining where to find the
142 | accompanying uncombined form of the same work.
143 |
144 | 6. Revised Versions of the GNU Lesser General Public License.
145 |
146 | The Free Software Foundation may publish revised and/or new versions
147 | of the GNU Lesser General Public License from time to time. Such new
148 | versions will be similar in spirit to the present version, but may
149 | differ in detail to address new problems or concerns.
150 |
151 | Each version is given a distinguishing version number. If the
152 | Library as you received it specifies that a certain numbered version
153 | of the GNU Lesser General Public License "or any later version"
154 | applies to it, you have the option of following the terms and
155 | conditions either of that published version or of any later version
156 | published by the Free Software Foundation. If the Library as you
157 | received it does not specify a version number of the GNU Lesser
158 | General Public License, you may choose any version of the GNU Lesser
159 | General Public License ever published by the Free Software Foundation.
160 |
161 | If the Library as you received it specifies that a proxy can decide
162 | whether future versions of the GNU Lesser General Public License shall
163 | apply, that proxy's public statement of acceptance of any version is
164 | permanent authorization for you to choose that version for the
165 | Library.
166 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | # Minitweaks
5 | Minitweaks is an extension for [Carpet Mod](https://github.com/gnembon/fabric-carpet) with many small, mostly survival-related features and game mechanic changes
6 |
7 |
8 |
9 | # Downloads
10 | [
](https://modrinth.com/mod/minitweaks)
11 | [
](https://github.com/manyrandomthings/minitweaks/releases)
12 | [
](https://www.curseforge.com/minecraft/mc-mods/carpet-minitweaks)
13 |
14 | # Minitweaks Carpet Rules List
15 | ## allChargedCreeperHeadsDrop
16 | All mobs killed by a charged creeper drop their head instead of only one
17 | * Type: `boolean`
18 | * Default value: `false`
19 | * Required options: `true`, `false`
20 | * Categories: `minitweaks`, `mobs`
21 |
22 | ## commandSeed
23 | Permission level required to use /seed
24 | Only available server-side
25 | ops/2 for only ops, true/0 for anyone
26 | * Type: `String`
27 | * Default value: `ops`
28 | * Suggested options: `true`, `false`, `ops`
29 | * Categories: `minitweaks`, `command`
30 |
31 | ## deathItemsDespawnMinutes
32 | How many minutes it takes for a player's items to despawn after death
33 | -1 for infinte, 0 for instant despawn, max value 32
34 | * Type: `int`
35 | * Default value: `5`
36 | * Suggested options: `5`, `10`, `15`, `30`, `-1`
37 | * Categories: `minitweaks`, `survival`
38 |
39 | ## disableBlazeFire
40 | Disables fire made from blaze fireballs
41 | * Type: `boolean`
42 | * Default value: `false`
43 | * Required options: `true`, `false`
44 | * Categories: `minitweaks`, `mobs`, `survival`
45 |
46 | ## disableGhastFire
47 | Disables fire made from ghast fireballs
48 | * Type: `boolean`
49 | * Default value: `false`
50 | * Required options: `true`, `false`
51 | * Categories: `minitweaks`, `mobs`, `survival`
52 |
53 | ## dispensersBucketMobs
54 | Dispensers can pick up bucketable mobs
55 | * Type: `boolean`
56 | * Default value: `false`
57 | * Required options: `true`, `false`
58 | * Categories: `minitweaks`, `mobs`, `dispenser`
59 |
60 | ## dispensersCureVillagers
61 | Dispensers feed golden apples to zombie villagers with weakness
62 | Note: dispensers curing a villager does not lower the villager's prices due to gossips being player-specific
63 | * Type: `boolean`
64 | * Default value: `false`
65 | * Required options: `true`, `false`
66 | * Categories: `minitweaks`, `mobs`, `dispenser`, `survival`
67 |
68 | ## dispensersDuplicateAllays
69 | Dispensers duplicate dancing allays with amethyst shards
70 | * Type: `boolean`
71 | * Default value: `false`
72 | * Required options: `true`, `false`
73 | * Categories: `minitweaks`, `mobs`, `dispenser`
74 |
75 | ## dispensersDyeMobs
76 | Dispensers can dye sheep (and shulkers if dyeableShulkers is enabled)
77 | * Type: `boolean`
78 | * Default value: `false`
79 | * Required options: `true`, `false`
80 | * Categories: `minitweaks`, `mobs`, `dispenser`
81 |
82 | ## dispensersNameMobs
83 | Dispensers use name tags on mobs
84 | * Type: `boolean`
85 | * Default value: `false`
86 | * Required options: `true`, `false`
87 | * Categories: `minitweaks`, `mobs`, `dispenser`
88 |
89 | ## dispensersRepairGolems
90 | Dispensers can repair Iron Golems with iron ingots
91 | * Type: `boolean`
92 | * Default value: `false`
93 | * Required options: `true`, `false`
94 | * Categories: `minitweaks`, `mobs`, `dispenser`
95 |
96 | ## dragonBlockDamage
97 | Set dragon block damage breaking type, regardless of mobGriefing gamerule
98 | default: default block breaking
99 | none: no blocks are broken
100 | break: broken blocks are dropped
101 | destroy: broken blocks are destroyed and not dropped
102 | * Type: `String`
103 | * Default value: `default`
104 | * Required options: `default`, `none`, `break`, `destroy`
105 | * Categories: `minitweaks`, `mobs`, `survival`
106 |
107 | ## dyeableShearedSheep
108 | Sheared sheep can be dyed
109 | * Type: `boolean`
110 | * Default value: `false`
111 | * Required options: `true`, `false`
112 | * Categories: `minitweaks`, `mobs`
113 |
114 | ## dyeableShulkers
115 | Shulkers can be dyed
116 | Color can be reset to default using a water bottle
117 | * Type: `boolean`
118 | * Default value: `false`
119 | * Required options: `true`, `false`
120 | * Categories: `minitweaks`, `mobs`
121 |
122 | ## echoShardsEnableShriekers
123 | Using an echo shard on a sculk shrieker allows it to summon wardens
124 | * Type: `boolean`
125 | * Default value: `false`
126 | * Required options: `true`, `false`
127 | * Categories: `minitweaks`, `feature`
128 |
129 | ## fasterOxidation
130 | Blocks oxidize much faster when touching water
131 | * Type: `boolean`
132 | * Default value: `false`
133 | * Required options: `true`, `false`
134 | * Categories: `minitweaks`, `survival`, `feature`
135 |
136 | ## infinityMendingStacking
137 | Allows infinity and mending to stack on bows, like in 1.9 to 1.11
138 | * Type: `boolean`
139 | * Default value: `false`
140 | * Required options: `true`, `false`
141 | * Categories: `minitweaks`, `enchantment`, `survival`
142 |
143 | ## lightningGlowifiesSquids
144 | Squids struck by lightning convert to glow squids
145 | * Type: `boolean`
146 | * Default value: `false`
147 | * Required options: `true`, `false`
148 | * Categories: `minitweaks`, `mobs`
149 |
150 | ## maxPlayerXpDrop
151 | Maximum amount of xp players drop on death
152 | * Type: `int`
153 | * Default value: `100`
154 | * Suggested options: `0`, `100`, `1000`, `10000`
155 | * Categories: `minitweaks`, `survival`
156 | * Additional notes:
157 | * Must be a positive number
158 |
159 | ## mobItemPickup
160 | Overwrites random default pickup chance when mob spawns
161 | Only zombie and skeleton type mobs are affected
162 | default: uses default pickup
163 | always: mobs pick up items
164 | never: mobs don't pick up items
165 | * Type: `String`
166 | * Default value: `default`
167 | * Required options: `default`, `always`, `never`
168 | * Categories: `minitweaks`, `mobs`
169 |
170 | ## mobsDropNametag
171 | Named mobs drop their name tag on death
172 | Note: mobs will drop a name tag even if they weren't named with one
173 | This may also cause name tags to be able to be duped
174 | * Type: `boolean`
175 | * Default value: `false`
176 | * Required options: `true`, `false`
177 | * Categories: `minitweaks`, `mobs`, `survival`
178 |
179 | ## moveableWaterloggedBlocks
180 | Waterlogged blocks stay waterlogged when moved with a piston
181 | * Type: `boolean`
182 | * Default value: `false`
183 | * Required options: `true`, `false`
184 | * Categories: `minitweaks`, `feature`
185 |
186 | ## noCreeperBlockBreaking
187 | Disables creeper explosion block breaking
188 | * Type: `boolean`
189 | * Default value: `false`
190 | * Required options: `true`, `false`
191 | * Categories: `minitweaks`, `mobs`, `survival`
192 |
193 | ## noFeatherFallingTrample
194 | Prevents farmland from being trampled if you have feather falling
195 | * Type: `boolean`
196 | * Default value: `false`
197 | * Required options: `true`, `false`
198 | * Categories: `minitweaks`, `survival`
199 |
200 | ## noGhastBlockBreaking
201 | Disables ghast fireball explosion block breaking
202 | * Type: `boolean`
203 | * Default value: `false`
204 | * Required options: `true`, `false`
205 | * Categories: `minitweaks`, `mobs`, `survival`
206 |
207 | ## noRepairCost
208 | Removes additional cost for using an item in an anvil multiple times
209 | * Type: `boolean`
210 | * Default value: `false`
211 | * Required options: `true`, `false`
212 | * Categories: `minitweaks`, `survival`
213 |
214 | ## noSnowGolemMelting
215 | Prevents Snow Golems from melting in hot biomes
216 | * Type: `boolean`
217 | * Default value: `false`
218 | * Required options: `true`, `false`
219 | * Categories: `minitweaks`, `mobs`
220 |
221 | ## noVillagerWitchConversion
222 | Villagers don't convert to witches when struck by lightning
223 | * Type: `boolean`
224 | * Default value: `false`
225 | * Required options: `true`, `false`
226 | * Categories: `minitweaks`, `mobs`
227 |
228 | ## phantomSpawningTime
229 | Amount of ticks before Phantoms start having a chance to spawn
230 | * Type: `int`
231 | * Default value: `72000`
232 | * Suggested options: `72000`, `360000`, `720000`
233 | * Categories: `minitweaks`, `mobs`, `survival`
234 | * Additional notes:
235 | * Must be a positive number
236 |
237 | ## protectionStacking
238 | Allows all the different protection types to stack on the same piece of armor, like in 1.14 to 1.14.2
239 | * Type: `boolean`
240 | * Default value: `false`
241 | * Required options: `true`, `false`
242 | * Categories: `minitweaks`, `enchantment`, `survival`
243 |
244 | ## quickHarvesting
245 | Right click crops with a hoe to harvest and replant
246 | * Type: `boolean`
247 | * Default value: `false`
248 | * Required options: `true`, `false`
249 | * Categories: `minitweaks`, `survival`, `feature`
250 |
251 | ## removableCurses
252 | Curses are also removed when using grindstones or repair crafting
253 | * Type: `boolean`
254 | * Default value: `false`
255 | * Required options: `true`, `false`
256 | * Categories: `minitweaks`, `enchantment`, `survival`
257 |
258 | ## renewableDragonEgg
259 | Dragon eggs will always be placed on the portal after defeating the dragon
260 | * Type: `boolean`
261 | * Default value: `false`
262 | * Required options: `true`, `false`
263 | * Categories: `minitweaks`, `mobs`, `survival`
264 |
265 | ## renewableRawOres
266 | An anvil landing on Iron/Gold/Copper blocks turns them into the raw ore block version
267 | * Type: `boolean`
268 | * Default value: `false`
269 | * Required options: `true`, `false`
270 | * Categories: `minitweaks`, `survival`, `feature`
271 |
272 | ## shaveSnowLayers
273 | Snow layers can be shaved, removing one layer, when right clicked with a shovel
274 | * Type: `boolean`
275 | * Default value: `false`
276 | * Required options: `true`, `false`
277 | * Categories: `minitweaks`, `survival`, `feature`
278 |
279 | ## slimeLooting
280 | Bigger slimes spawn more smaller slimes when killed with looting
281 | Additional slimes can be up to as many levels of looting as you have (up to +3 with looting 3, etc)
282 | * Type: `boolean`
283 | * Default value: `false`
284 | * Required options: `true`, `false`
285 | * Categories: `minitweaks`, `mobs`, `enchantment`, `survival`
286 |
287 | ## vexesNerf
288 | Vexes will start to die after the evoker that summoned them dies
289 | * Type: `boolean`
290 | * Default value: `false`
291 | * Required options: `true`, `false`
292 | * Categories: `minitweaks`, `mobs`, `survival`
293 |
294 | ## villagersAlwaysConvert
295 | Villagers will always convert to Zombie Villagers when killed by a zombie, even on easy and normal difficulty
296 | * Type: `boolean`
297 | * Default value: `false`
298 | * Required options: `true`, `false`
299 | * Categories: `minitweaks`, `mobs`, `survival`
300 |
301 | ## villagersExplodeBeds
302 | Villagers cause explosions when trying to use beds in the nether or end, like players
303 | "But why?" Idk, it's just a funny idea I had
304 | * Type: `boolean`
305 | * Default value: `false`
306 | * Required options: `true`, `false`
307 | * Categories: `minitweaks`, `mobs`
308 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'fabric-loom' version '1.10-SNAPSHOT'
3 | id 'maven-publish'
4 | }
5 |
6 | version = project.mod_version
7 | group = project.maven_group
8 |
9 | base {
10 | archivesName = "${project.archives_base_name}-${project.minecraft_version}"
11 | }
12 |
13 | repositories {
14 | // Add repositories to retrieve artifacts from in here.
15 | // You should only use this when depending on other mods because
16 | // Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
17 | // See https://docs.gradle.org/current/userguide/declaring_repositories.html
18 | // for more information about repositories.
19 | maven {
20 | url 'https://masa.dy.fi/maven'
21 | }
22 | }
23 |
24 | loom {
25 | splitEnvironmentSourceSets()
26 |
27 | mods {
28 | "minitweaks" {
29 | sourceSet sourceSets.main
30 | }
31 | }
32 |
33 | }
34 |
35 | dependencies {
36 | // To change the versions see the gradle.properties file
37 | minecraft "com.mojang:minecraft:${project.minecraft_version}"
38 | mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
39 | modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
40 | modImplementation "carpet:fabric-carpet:${project.carpet_core_version}"
41 | }
42 |
43 | processResources {
44 | inputs.property "version", project.version
45 |
46 | filesMatching("fabric.mod.json") {
47 | expand "version": inputs.properties.version
48 | }
49 | }
50 |
51 | tasks.withType(JavaCompile).configureEach {
52 | it.options.release = 21
53 | }
54 |
55 | java {
56 | // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
57 | // if it is present.
58 | // If you remove this line, sources will not be generated.
59 | withSourcesJar()
60 |
61 | sourceCompatibility = JavaVersion.VERSION_21
62 | targetCompatibility = JavaVersion.VERSION_21
63 | }
64 |
65 | jar {
66 | inputs.property "archivesName", project.base.archivesName
67 |
68 | from("LICENSE") {
69 | rename { "${it}_${inputs.properties.archivesName}"}
70 | }
71 | }
72 |
73 | // configure the maven publication
74 | publishing {
75 | publications {
76 | create("mavenJava", MavenPublication) {
77 | artifactId = project.archives_base_name
78 | from components.java
79 | }
80 | }
81 |
82 | // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
83 | repositories {
84 | // Add repositories to publish to here.
85 | // Notice: This block does NOT have the same function as the block in the top level.
86 | // The repositories here will be used for publishing your artifact, not for
87 | // retrieving dependencies.
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Done to increase the memory available to gradle.
2 | org.gradle.jvmargs=-Xmx1G
3 |
4 | # Fabric Properties
5 | # check these on https://fabricmc.net/develop
6 | minecraft_version=1.21.5
7 | yarn_mappings=1.21.5+build.1
8 | loader_version=0.16.10
9 | # check available versions on maven for the given minecraft version you are using: https://masa.dy.fi/maven/carpet/fabric-carpet/
10 | carpet_core_version=1.21.5-1.4.169+v250325
11 |
12 | # Mod Properties
13 | mod_version=1.5.2
14 | maven_group=minitweaks
15 | archives_base_name=minitweaks
16 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/manyrandomthings/minitweaks/15691919818b51915b6a3da4c473cd49e39b39fe/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #
4 | # Copyright © 2015-2021 the original authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 | # SPDX-License-Identifier: Apache-2.0
19 | #
20 |
21 | ##############################################################################
22 | #
23 | # Gradle start up script for POSIX generated by Gradle.
24 | #
25 | # Important for running:
26 | #
27 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
28 | # noncompliant, but you have some other compliant shell such as ksh or
29 | # bash, then to run this script, type that shell name before the whole
30 | # command line, like:
31 | #
32 | # ksh Gradle
33 | #
34 | # Busybox and similar reduced shells will NOT work, because this script
35 | # requires all of these POSIX shell features:
36 | # * functions;
37 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
38 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
39 | # * compound commands having a testable exit status, especially «case»;
40 | # * various built-in commands including «command», «set», and «ulimit».
41 | #
42 | # Important for patching:
43 | #
44 | # (2) This script targets any POSIX shell, so it avoids extensions provided
45 | # by Bash, Ksh, etc; in particular arrays are avoided.
46 | #
47 | # The "traditional" practice of packing multiple parameters into a
48 | # space-separated string is a well documented source of bugs and security
49 | # problems, so this is (mostly) avoided, by progressively accumulating
50 | # options in "$@", and eventually passing that to Java.
51 | #
52 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
53 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
54 | # see the in-line comments for details.
55 | #
56 | # There are tweaks for specific operating systems such as AIX, CygWin,
57 | # Darwin, MinGW, and NonStop.
58 | #
59 | # (3) This script is generated from the Groovy template
60 | # https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
61 | # within the Gradle project.
62 | #
63 | # You can find Gradle at https://github.com/gradle/gradle/.
64 | #
65 | ##############################################################################
66 |
67 | # Attempt to set APP_HOME
68 |
69 | # Resolve links: $0 may be a link
70 | app_path=$0
71 |
72 | # Need this for daisy-chained symlinks.
73 | while
74 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
75 | [ -h "$app_path" ]
76 | do
77 | ls=$( ls -ld "$app_path" )
78 | link=${ls#*' -> '}
79 | case $link in #(
80 | /*) app_path=$link ;; #(
81 | *) app_path=$APP_HOME$link ;;
82 | esac
83 | done
84 |
85 | # This is normally unused
86 | # shellcheck disable=SC2034
87 | APP_BASE_NAME=${0##*/}
88 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
89 | APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
90 |
91 | # Use the maximum available, or set MAX_FD != -1 to use that value.
92 | MAX_FD=maximum
93 |
94 | warn () {
95 | echo "$*"
96 | } >&2
97 |
98 | die () {
99 | echo
100 | echo "$*"
101 | echo
102 | exit 1
103 | } >&2
104 |
105 | # OS specific support (must be 'true' or 'false').
106 | cygwin=false
107 | msys=false
108 | darwin=false
109 | nonstop=false
110 | case "$( uname )" in #(
111 | CYGWIN* ) cygwin=true ;; #(
112 | Darwin* ) darwin=true ;; #(
113 | MSYS* | MINGW* ) msys=true ;; #(
114 | NONSTOP* ) nonstop=true ;;
115 | esac
116 |
117 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
118 |
119 |
120 | # Determine the Java command to use to start the JVM.
121 | if [ -n "$JAVA_HOME" ] ; then
122 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
123 | # IBM's JDK on AIX uses strange locations for the executables
124 | JAVACMD=$JAVA_HOME/jre/sh/java
125 | else
126 | JAVACMD=$JAVA_HOME/bin/java
127 | fi
128 | if [ ! -x "$JAVACMD" ] ; then
129 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
130 |
131 | Please set the JAVA_HOME variable in your environment to match the
132 | location of your Java installation."
133 | fi
134 | else
135 | JAVACMD=java
136 | if ! command -v java >/dev/null 2>&1
137 | then
138 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
139 |
140 | Please set the JAVA_HOME variable in your environment to match the
141 | location of your Java installation."
142 | fi
143 | fi
144 |
145 | # Increase the maximum file descriptors if we can.
146 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
147 | case $MAX_FD in #(
148 | max*)
149 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
150 | # shellcheck disable=SC2039,SC3045
151 | MAX_FD=$( ulimit -H -n ) ||
152 | warn "Could not query maximum file descriptor limit"
153 | esac
154 | case $MAX_FD in #(
155 | '' | soft) :;; #(
156 | *)
157 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
158 | # shellcheck disable=SC2039,SC3045
159 | ulimit -n "$MAX_FD" ||
160 | warn "Could not set maximum file descriptor limit to $MAX_FD"
161 | esac
162 | fi
163 |
164 | # Collect all arguments for the java command, stacking in reverse order:
165 | # * args from the command line
166 | # * the main class name
167 | # * -classpath
168 | # * -D...appname settings
169 | # * --module-path (only if needed)
170 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
171 |
172 | # For Cygwin or MSYS, switch paths to Windows format before running java
173 | if "$cygwin" || "$msys" ; then
174 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
175 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
176 |
177 | JAVACMD=$( cygpath --unix "$JAVACMD" )
178 |
179 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
180 | for arg do
181 | if
182 | case $arg in #(
183 | -*) false ;; # don't mess with options #(
184 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
185 | [ -e "$t" ] ;; #(
186 | *) false ;;
187 | esac
188 | then
189 | arg=$( cygpath --path --ignore --mixed "$arg" )
190 | fi
191 | # Roll the args list around exactly as many times as the number of
192 | # args, so each arg winds up back in the position where it started, but
193 | # possibly modified.
194 | #
195 | # NB: a `for` loop captures its iteration list before it begins, so
196 | # changing the positional parameters here affects neither the number of
197 | # iterations, nor the values presented in `arg`.
198 | shift # remove old arg
199 | set -- "$@" "$arg" # push replacement arg
200 | done
201 | fi
202 |
203 |
204 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
205 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
206 |
207 | # Collect all arguments for the java command:
208 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
209 | # and any embedded shellness will be escaped.
210 | # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
211 | # treated as '${Hostname}' itself on the command line.
212 |
213 | set -- \
214 | "-Dorg.gradle.appname=$APP_BASE_NAME" \
215 | -classpath "$CLASSPATH" \
216 | org.gradle.wrapper.GradleWrapperMain \
217 | "$@"
218 |
219 | # Stop when "xargs" is not available.
220 | if ! command -v xargs >/dev/null 2>&1
221 | then
222 | die "xargs is not available"
223 | fi
224 |
225 | # Use "xargs" to parse quoted args.
226 | #
227 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
228 | #
229 | # In Bash we could simply go:
230 | #
231 | # readarray ARGS < <( xargs -n1 <<<"$var" ) &&
232 | # set -- "${ARGS[@]}" "$@"
233 | #
234 | # but POSIX shell has neither arrays nor command substitution, so instead we
235 | # post-process each arg (as a line of input to sed) to backslash-escape any
236 | # character that might be a shell metacharacter, then use eval to reverse
237 | # that process (while maintaining the separation between arguments), and wrap
238 | # the whole thing up as a single "set" statement.
239 | #
240 | # This will of course break if any of these variables contains a newline or
241 | # an unmatched quote.
242 | #
243 |
244 | eval "set -- $(
245 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
246 | xargs -n1 |
247 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
248 | tr '\n' ' '
249 | )" '"$@"'
250 |
251 | exec "$JAVACMD" "$@"
252 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 | @rem SPDX-License-Identifier: Apache-2.0
17 | @rem
18 |
19 | @if "%DEBUG%"=="" @echo off
20 | @rem ##########################################################################
21 | @rem
22 | @rem Gradle startup script for Windows
23 | @rem
24 | @rem ##########################################################################
25 |
26 | @rem Set local scope for the variables with windows NT shell
27 | if "%OS%"=="Windows_NT" setlocal
28 |
29 | set DIRNAME=%~dp0
30 | if "%DIRNAME%"=="" set DIRNAME=.
31 | @rem This is normally unused
32 | set APP_BASE_NAME=%~n0
33 | set APP_HOME=%DIRNAME%
34 |
35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
37 |
38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
40 |
41 | @rem Find java.exe
42 | if defined JAVA_HOME goto findJavaFromJavaHome
43 |
44 | set JAVA_EXE=java.exe
45 | %JAVA_EXE% -version >NUL 2>&1
46 | if %ERRORLEVEL% equ 0 goto execute
47 |
48 | echo. 1>&2
49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50 | echo. 1>&2
51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52 | echo location of your Java installation. 1>&2
53 |
54 | goto fail
55 |
56 | :findJavaFromJavaHome
57 | set JAVA_HOME=%JAVA_HOME:"=%
58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
59 |
60 | if exist "%JAVA_EXE%" goto execute
61 |
62 | echo. 1>&2
63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64 | echo. 1>&2
65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66 | echo location of your Java installation. 1>&2
67 |
68 | goto fail
69 |
70 | :execute
71 | @rem Setup the command line
72 |
73 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
74 |
75 |
76 | @rem Execute Gradle
77 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
78 |
79 | :end
80 | @rem End local scope for the variables with windows NT shell
81 | if %ERRORLEVEL% equ 0 goto mainEnd
82 |
83 | :fail
84 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
85 | rem the _cmd.exe /c_ return code!
86 | set EXIT_CODE=%ERRORLEVEL%
87 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
88 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
89 | exit /b %EXIT_CODE%
90 |
91 | :mainEnd
92 | if "%OS%"=="Windows_NT" endlocal
93 |
94 | :omega
95 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | maven {
4 | name = 'Fabric'
5 | url = 'https://maven.fabricmc.net/'
6 | }
7 | mavenCentral()
8 | gradlePluginPortal()
9 | }
10 | }
--------------------------------------------------------------------------------
/src/main/java/minitweaks/MiniTweaks.java:
--------------------------------------------------------------------------------
1 | package minitweaks;
2 |
3 | import carpet.CarpetExtension;
4 | import carpet.CarpetServer;
5 | import net.fabricmc.api.ModInitializer;
6 |
7 | public class MiniTweaks implements ModInitializer {
8 | public static final String MOD_ID = "minitweaks";
9 | public static CarpetExtension EXTENSION = new MiniTweaksCarpetExtension();
10 |
11 | @Override
12 | public void onInitialize() {
13 | CarpetServer.manageExtension(EXTENSION);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/minitweaks/MiniTweaksCarpetExtension.java:
--------------------------------------------------------------------------------
1 | package minitweaks;
2 |
3 | import carpet.CarpetExtension;
4 | import carpet.CarpetServer;
5 | import carpet.api.settings.CarpetRule;
6 | import carpet.api.settings.InvalidRuleValueException;
7 | import carpet.api.settings.SettingsManager;
8 | import com.google.gson.Gson;
9 | import com.google.gson.GsonBuilder;
10 | import com.google.gson.Strictness;
11 | import com.google.gson.reflect.TypeToken;
12 | import net.fabricmc.loader.api.FabricLoader;
13 | import net.fabricmc.loader.api.ModContainer;
14 | import org.apache.commons.io.IOUtils;
15 | import org.slf4j.Logger;
16 | import org.slf4j.LoggerFactory;
17 |
18 | import java.io.IOException;
19 | import java.io.InputStream;
20 | import java.nio.charset.StandardCharsets;
21 | import java.util.Collections;
22 | import java.util.HashMap;
23 | import java.util.Map;
24 |
25 | public class MiniTweaksCarpetExtension implements CarpetExtension {
26 | private static final Logger LOGGER = LoggerFactory.getLogger(MiniTweaks.MOD_ID);
27 | public static SettingsManager settingsManager;
28 |
29 | @Override
30 | public void onGameStarted() {
31 | ModContainer mod = FabricLoader.getInstance().getModContainer(MiniTweaks.MOD_ID).orElseThrow(NullPointerException::new);
32 |
33 | // create settings manager
34 | settingsManager = new SettingsManager(mod.getMetadata().getVersion().getFriendlyString(), MiniTweaks.MOD_ID, mod.getMetadata().getName());
35 |
36 | // load carpet rules into settings manager(s)
37 | settingsManager.parseSettingsClass(MiniTweaksSettings.class);
38 | CarpetServer.settingsManager.parseSettingsClass(MiniTweaksSettings.class);
39 |
40 | this.createRuleOverwriteWorkaround();
41 | }
42 |
43 | private void createRuleOverwriteWorkaround() {
44 | // workaround for rule being overwritten: https://github.com/gnembon/fabric-carpet/issues/802
45 | SettingsManager.registerGlobalRuleObserver((source, changedRule, userInput) -> {
46 | CarpetRule> minitweaksRule = settingsManager.getCarpetRule(changedRule.name());
47 | CarpetRule> carpetRule = CarpetServer.settingsManager.getCarpetRule(changedRule.name());
48 |
49 | // check if the rule being changed exists in minitweaks, but isn't the same rule as the one in carpet's settingsManager
50 | // if so, update the rule (if types are the same)
51 | if(minitweaksRule != null && carpetRule != null && minitweaksRule != carpetRule && minitweaksRule.type() == carpetRule.type()) {
52 | try {
53 | minitweaksRule.set(source, userInput);
54 | } catch (InvalidRuleValueException e) {
55 | LOGGER.error("Error setting rule", e);
56 | }
57 | }
58 | });
59 | }
60 |
61 | @Override
62 | public Map canHasTranslations(String lang) {
63 | InputStream langFile = MiniTweaks.class.getClassLoader().getResourceAsStream("assets/minitweaks/lang/%s.json".formatted(lang));
64 | if (langFile == null) {
65 | return Collections.emptyMap();
66 | }
67 | String jsonData;
68 | try {
69 | jsonData = IOUtils.toString(langFile, StandardCharsets.UTF_8);
70 | } catch (IOException e) {
71 | return Collections.emptyMap();
72 | }
73 | Gson gson = new GsonBuilder().setStrictness(Strictness.LENIENT).create();
74 |
75 | Map map = gson.fromJson(jsonData, new TypeToken